summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-05 09:34:00 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-05 09:34:00 +0100
commitb636137088923d092c3f0fa4221907fd43c34923 (patch)
tree2d21e43349204866d17091cfb395cd2dd1b28a90
parent4e7ea02ed492a1fc0b167392361673244f957cce (diff)
IMP: Scheduler improvements, fixing stack issue of kernel now.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
-rw-r--r--apps/Framework.h6
-rw-r--r--apps/src/Framework.cc4
-rw-r--r--dev/ZBAKit/amd64-efi.make6
-rw-r--r--dev/ZBAKit/arm64-efi.make2
-rw-r--r--dev/ZBAKit/src/HEL/AMD64/BootATA.cc2
-rw-r--r--dev/ZBAKit/src/HEL/AMD64/BootMain.cc50
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc14
-rw-r--r--dev/ZKAKit/HALKit/AMD64/PCI/Device.cc2
-rw-r--r--dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc16
-rw-r--r--dev/ZKAKit/KernelKit/DebugOutput.h10
-rw-r--r--dev/ZKAKit/KernelKit/DriveMgr.h6
-rw-r--r--dev/ZKAKit/KernelKit/LoaderInterface.h1
-rw-r--r--dev/ZKAKit/KernelKit/PCI/Device.h16
-rw-r--r--dev/ZKAKit/KernelKit/PEFCodeMgr.h1
-rw-r--r--dev/ZKAKit/KernelKit/UserProcessScheduler.h23
-rw-r--r--dev/ZKAKit/NewKit/Array.h11
-rw-r--r--dev/ZKAKit/NewKit/Macros.h4
-rw-r--r--dev/ZKAKit/NewKit/Stop.h2
-rw-r--r--dev/ZKAKit/src/CodeMgr.cc8
-rw-r--r--dev/ZKAKit/src/DriveMgr.cc6
-rw-r--r--dev/ZKAKit/src/FS/NeFS.cc10
-rw-r--r--dev/ZKAKit/src/Heap.cc11
-rw-r--r--dev/ZKAKit/src/IPEFDLLObject.cc2
-rw-r--r--dev/ZKAKit/src/PEFCodeMgr.cc10
-rw-r--r--dev/ZKAKit/src/Stop.cc4
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc130
-rw-r--r--dev/ZKAKit/src/Utils.cc10
27 files changed, 203 insertions, 164 deletions
diff --git a/apps/Framework.h b/apps/Framework.h
index bc66658c..9c33a4dd 100644
--- a/apps/Framework.h
+++ b/apps/Framework.h
@@ -3,8 +3,8 @@
(C) EL Mahrouss Logic.
*/
-#ifndef TOOLS_FRAMEWORK_H
-#define TOOLS_FRAMEWORK_H
+#ifndef APPS_FRAMEWORK_H
+#define APPS_FRAMEWORK_H
#include <Common.h>
@@ -13,4 +13,4 @@
#define kFKExtension ".fwrk"
#define kAppExtension ".app"
-#endif // !TOOLS_FRAMEWORK_H
+#endif // !APPS_FRAMEWORK_H
diff --git a/apps/src/Framework.cc b/apps/src/Framework.cc
index 1a678ec3..f6f17149 100644
--- a/apps/src/Framework.cc
+++ b/apps/src/Framework.cc
@@ -50,11 +50,11 @@ int main(int argc, char* argv[])
for (auto& file : files)
{
- std::string file_cpy = file;
+ std::string file_cpy = file;
while (file_cpy.find("/") != std::string::npos)
{
- file_cpy.erase(0, file_cpy.find("/"));
+ file_cpy.erase(0, file_cpy.find("/"));
file_cpy.erase(file_cpy.find("/"), 1);
}
diff --git a/dev/ZBAKit/amd64-efi.make b/dev/ZBAKit/amd64-efi.make
index 23e88b55..ba32671a 100644
--- a/dev/ZBAKit/amd64-efi.make
+++ b/dev/ZBAKit/amd64-efi.make
@@ -21,7 +21,7 @@ EMU=qemu-system-x86_64
endif
ifeq ($(NEWS_MODEL), )
-ZKA_MODEL=-DkMachineModel="\"ZKA SSD\""
+ZKA_MODEL=-DkMachineModel="\"ZKA\""
endif
BIOS=OVMF.fd
@@ -34,7 +34,7 @@ EMU_FLAGS=-net none -smp 4 -m 8G -M q35 \
file=fat:rw:src/Root/,index=2,format=raw \
-drive id=disk_2,file=$(IMG),if=none \
-device ahci,id=ahci \
- -device ide-hd,drive=disk_2,bus=ahci.0 -d int
+ -device ide-hd,drive=disk_2,bus=ahci.0 -serial stdio
LD_FLAGS=-e Main --subsystem=10
@@ -47,7 +47,7 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEWOSKRNL__ -D__NEWOSLDR__ \
-DEFI_FUNCTION_WRAPPER -I./ -I../ZKAKit -I../ -c -nostdlib -fno-rtti -fno-exceptions \
- -std=c++20 -D__HAVE_ZKA_APIS__ -D__ZKA_USE_FB__ -D__ZKA_AMD64__ -D__ZKA__
+ -std=c++20 -D__HAVE_ZKA_APIS__ -DZBA_USE_FB -D__ZKA_AMD64__ -D__ZKA__
BOOTLOADER=zbaosldr.exe
KERNEL=minoskrnl.exe
diff --git a/dev/ZBAKit/arm64-efi.make b/dev/ZBAKit/arm64-efi.make
index fb2317c4..1dd58d80 100644
--- a/dev/ZBAKit/arm64-efi.make
+++ b/dev/ZBAKit/arm64-efi.make
@@ -19,7 +19,7 @@ EMU=qemu-system-aarch64
endif
ifeq ($(NEWS_MODEL), )
-ZKA_MODEL=-DkMachineModel="\"ZKA SSD\""
+ZKA_MODEL=-DkMachineModel="\"ZKA\""
endif
BIOS=OVMF.fd
diff --git a/dev/ZBAKit/src/HEL/AMD64/BootATA.cc b/dev/ZBAKit/src/HEL/AMD64/BootATA.cc
index ca883935..0d24f99b 100644
--- a/dev/ZBAKit/src/HEL/AMD64/BootATA.cc
+++ b/dev/ZBAKit/src/HEL/AMD64/BootATA.cc
@@ -83,7 +83,7 @@ ATAInit_Retry:
if (statRdy & ATA_SR_ERR)
{
writer.Write(
- L"ZBA: ATA: error, not an IDE based hard-drive.\r");
+ L"ZBA: ATA: Not an IDE based drive.\r");
return false;
}
diff --git a/dev/ZBAKit/src/HEL/AMD64/BootMain.cc b/dev/ZBAKit/src/HEL/AMD64/BootMain.cc
index 98db6587..39e3fd31 100644
--- a/dev/ZBAKit/src/HEL/AMD64/BootMain.cc
+++ b/dev/ZBAKit/src/HEL/AMD64/BootMain.cc
@@ -16,10 +16,11 @@
#include <NewKit/Macros.h>
#include <NewKit/Ref.h>
#include <BootKit/Thread.h>
+#include <Modules/FB/FB.h>
// Makes the compiler shut up.
#ifndef kMachineModel
-#define kMachineModel "ZKA SSD"
+#define kMachineModel "ZKA"
#endif // !kMachineModel
#ifndef kExpectedWidth
@@ -94,7 +95,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
UInt32 sz_desc = sizeof(EfiMemoryDescriptor);
UInt32 rev_desc = 0;
-#ifdef __ZKA_USE_FB__
+#ifdef ZBA_USE_FB
if (!boot_init_fb())
return 1; ///! Init the GOP.
@@ -125,7 +126,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
handover_hdr->f_GOP.f_PixelPerLine = kGop->Mode->Info->PixelsPerScanLine;
handover_hdr->f_GOP.f_PixelFormat = kGop->Mode->Info->PixelFormat;
handover_hdr->f_GOP.f_Size = kGop->Mode->FrameBufferSize;
-#endif // __ZKA_USE_FB__
+#endif // ZBA_USE_FB
// ------------------------------------------- //
// Grab MP services, extended to runtime. //
@@ -140,21 +141,23 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
kHandoverHeader = handover_hdr;
-#ifdef __ZKA_USE_FB__
+#ifdef ZBA_USE_FB
CGInit();
- CGDrawInRegion(CGColor(0xFF, 0x3A, 0x3A), handover_hdr->f_GOP.f_Height, handover_hdr->f_GOP.f_Width, 0, 0);
+ CGDrawInRegion(CGColor(0x00, 0x00, 0x00), handover_hdr->f_GOP.f_Height, handover_hdr->f_GOP.f_Width, 0, 0);
+ CGFini();
+
CGFini();
-#endif // __ZKA_USE_FB__
+#endif // ZBA_USE_FB
UInt32 cnt_enabled = 0;
UInt32 cnt_disabled = 0;
mp->GetNumberOfProcessors(mp, &cnt_disabled, &cnt_enabled);
-#ifdef __ZKA_USE_FB__
+#ifdef ZBA_USE_FB
CGDrawString("ZBA (C) EL MAHROUSS LOGIC", 10, 10, RGB(0xFF, 0xFF, 0xFF));
CGDrawString((cnt_enabled > 1) ? "MULTIPLE PROCESSORS DETECTED." : "SINGLE PROCESSOR DETECTED.", 20, 10, RGB(0xFF, 0xFF, 0xFF));
-#endif // __ZKA_USE_FB__
+#endif // ZBA_USE_FB
handover_hdr->f_HardwareTables.f_MultiProcessingEnabled = cnt_enabled > 1;
// Fill handover header now.
@@ -167,9 +170,11 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
// format the disk.
// ---------------------------------------------------- //
-#ifdef __ZKA_AUTO_FORMAT__
+#ifdef ZKA_AUTO_FORMAT
if (!partition_factory.IsPartitionValid())
{
+ CGDrawString("FORMATTING EPM DISK...", 20, 10, RGB(0xFF, 0xFF, 0xFF));
+
Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root;
root.fFileName[0] = kNeFSRoot[0];
root.fFileName[1] = 0;
@@ -180,7 +185,11 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
rt_reset_hardware();
}
-#endif // __ZKA_AUTO_FORMAT__
+ else
+ {
+ CGDrawString("BOOTING FROM EPM DISK...", 20, 10, RGB(0xFF, 0xFF, 0xFF));
+ }
+#endif // ZKA_AUTO_FORMAT
BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc);
@@ -234,7 +243,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
if (reader_syschk.Blob())
{
syschk_thread = new Boot::BThread(reader_syschk.Blob());
- syschk_thread->SetName("System Check (Integrity check)");
+ syschk_thread->SetName("System Check (ZBA Driver)");
}
syschk_thread->Start(handover_hdr);
@@ -271,15 +280,17 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
if (reader_kernel.Blob())
{
kernel_thread = new Boot::BThread(reader_kernel.Blob());
- kernel_thread->SetName("OS Kernel (Microkernel).");
+ kernel_thread->SetName("Minimal OS Kernel.");
handover_hdr->f_KernelImage = reader_kernel.Blob();
}
else
{
-#ifdef __ZKA_USE_FB__
+#ifdef ZBA_USE_FB
CGDrawString("ZBA: PLEASE RECOVER YOUR KERNEL IMAGE.", 30, 10, RGB(0xFF, 0xFF, 0xFF));
-#endif // __ZKA_USE_FB__
+#endif // ZBA_USE_FB
+
+ EFI::Stop();
}
Boot::BFileReader chime_wav(L"zka\\startup.wav", ImageHandle);
@@ -300,18 +311,15 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
}
else
{
-#ifdef __ZKA_USE_FB__
+#ifdef ZBA_USE_FB
CGDrawString("ZBA: ONE OR MORE SYSTEM COMPONENTS ARE MISSING, PLEASE REINSTALL THE OS.", 30, 10, RGB(0xFF, 0xFF, 0xFF));
-#endif // __ZKA_USE_FB__
+#endif // ZBA_USE_FB
+
+ EFI::Stop();
}
EFI::ExitBootServices(map_key, ImageHandle);
-#ifdef __ZKA_USE_FB__
- CGDrawInRegion(CGColor(0xFF, 0x3A, 0x3A), handover_hdr->f_GOP.f_Height, handover_hdr->f_GOP.f_Width, 0, 0);
- CGFini();
-#endif // __ZKA_USE_FB__
-
// ---------------------------------------------------- //
// Finally load the operating system kernel.
// ---------------------------------------------------- //
diff --git a/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc b/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc
index 05ace369..1b880784 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc
@@ -57,10 +57,10 @@ EXTERN_C void hal_init_platform(
/* INITIALIZE GDT AND SEGMENTS. */
/************************************** */
- STATIC CONST auto cEntriesCount = 6;
+ STATIC CONST auto kGDTEntriesCount = 6;
/* GDT, mostly descriptors for user and kernel segments. */
- STATIC Kernel::HAL::Detail::ZKA_GDT_ENTRY ALIGN(0x08) cGdt[cEntriesCount] = {
+ STATIC Kernel::HAL::Detail::ZKA_GDT_ENTRY ALIGN(0x08) kGDTArray[kGDTEntriesCount] = {
{.fLimitLow = 0, .fBaseLow = 0, .fBaseMid = 0, .fAccessByte = 0x00, .fFlags = 0x00, .fBaseHigh = 0}, // Null entry
{.fLimitLow = 0xFFFF, .fBaseLow = 0, .fBaseMid = 0, .fAccessByte = 0x9A, .fFlags = 0xAF, .fBaseHigh = 0}, // Kernel code
{.fLimitLow = 0xFFFF, .fBaseLow = 0, .fBaseMid = 0, .fAccessByte = 0x92, .fFlags = 0xCF, .fBaseHigh = 0}, // Kernel data
@@ -71,8 +71,8 @@ EXTERN_C void hal_init_platform(
// Load memory descriptors.
Kernel::HAL::RegisterGDT gdt_reg;
- gdt_reg.Base = reinterpret_cast<Kernel::UIntPtr>(cGdt);
- gdt_reg.Limit = (sizeof(Kernel::HAL::Detail::ZKA_GDT_ENTRY) * cEntriesCount) - 1;
+ gdt_reg.Base = reinterpret_cast<Kernel::UIntPtr>(kGDTArray);
+ gdt_reg.Limit = (sizeof(Kernel::HAL::Detail::ZKA_GDT_ENTRY) * kGDTEntriesCount) - 1;
//! GDT will load hal_read_init after it successfully loads the segments.
Kernel::HAL::GDTLoader gdt_loader;
@@ -88,11 +88,9 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept
Kernel::rtl_create_process([]() -> void {
while (Yes)
- {
- kcout << "Hello.\r";
- }
+ ;
},
- "RtlProcess");
+ "RtlProcess\0");
/* Start any cores. */
if (kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled)
diff --git a/dev/ZKAKit/HALKit/AMD64/PCI/Device.cc b/dev/ZKAKit/HALKit/AMD64/PCI/Device.cc
index bd451d96..4d44d7d0 100644
--- a/dev/ZKAKit/HALKit/AMD64/PCI/Device.cc
+++ b/dev/ZKAKit/HALKit/AMD64/PCI/Device.cc
@@ -116,7 +116,7 @@ namespace Kernel::PCI
Write(bar_in, enable, sizeof(UShort));
}
- UInt32 Device::Bar(UInt32 bar_in)
+ UIntPtr Device::Bar(UInt32 bar_in)
{
UInt32 bar = ZKA_PCIReadRaw(bar_in, fBus, fDevice, fFunction);
return bar;
diff --git a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc
index 52603f51..91948324 100644
--- a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc
+++ b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI.cc
@@ -110,7 +110,7 @@ Kernel::Void drv_std_read(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT S
Kernel::LockDelegate<kMaxAhciPoll> lock(&kSlotIsUsed);
- if (lock.HasTimedOut())
+ if (kSlotIsUsed)
return;
kSlotIsUsed = Yes;
@@ -119,7 +119,7 @@ Kernel::Void drv_std_read(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT S
// Prepare command header.
- HbaCmdHeader* cmd_header = (HbaCmdHeader*)kAhciPort->Clb;
+ HbaCmdHeader* cmd_header = (HbaCmdHeader*)(Kernel::UIntPtr)kAhciPort->Clb;
cmd_header += free_slot;
// Read operation/set entries count.
@@ -129,7 +129,7 @@ Kernel::Void drv_std_read(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT S
// Prepare command table.
- HbaCmdTbl* cmd_tbl = (HbaCmdTbl*)cmd_header->Ctba;
+ HbaCmdTbl* cmd_tbl = (HbaCmdTbl*)(Kernel::UIntPtr)cmd_header->Ctba;
Kernel::rt_set_memory(cmd_tbl, 0, sizeof(HbaCmdTbl));
Kernel::UInt64 size = Size * kAHCISectorSize;
@@ -193,9 +193,7 @@ Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT
{
STATIC Kernel::Boolean kSlotIsUsed = No;
- Kernel::LockDelegate<kMaxAhciPoll> lock(&kSlotIsUsed);
-
- if (lock.HasTimedOut())
+ if (kSlotIsUsed)
return;
kSlotIsUsed = Yes;
@@ -204,7 +202,7 @@ Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT
// Prepare command header.
- HbaCmdHeader* cmd_header = (HbaCmdHeader*)kAhciPort->Clb;
+ HbaCmdHeader* cmd_header = (HbaCmdHeader*)(Kernel::UIntPtr)kAhciPort->Clb;
cmd_header += free_slot;
// Read operation/set entries count.
@@ -214,7 +212,7 @@ Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT
// Prepare command table.
- HbaCmdTbl* cmd_tbl = (HbaCmdTbl*)cmd_header->Ctba;
+ HbaCmdTbl* cmd_tbl = (HbaCmdTbl*)(Kernel::UIntPtr)cmd_header->Ctba;
Kernel::rt_set_memory(cmd_tbl, 0, sizeof(HbaCmdTbl));
Kernel::UInt64 size = Size * kAHCISectorSize;
@@ -267,6 +265,8 @@ Kernel::Void drv_std_write(Kernel::UInt64 Lba, Kernel::Char* Buf, Kernel::SizeT
}
else if (kAhciPort->Is & (1 << 30))
{
+ kcout << "Error in task file. (AHCI Drv)\r";
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
return; // Error in task file
}
}
diff --git a/dev/ZKAKit/KernelKit/DebugOutput.h b/dev/ZKAKit/KernelKit/DebugOutput.h
index ec098129..dce371dd 100644
--- a/dev/ZKAKit/KernelKit/DebugOutput.h
+++ b/dev/ZKAKit/KernelKit/DebugOutput.h
@@ -109,10 +109,10 @@ namespace Kernel
if (y < 0)
y = -y;
- const Char cNumbers[11] = "0123456789";
+ const Char kNumbers[11] = "0123456789";
Char buf[2];
- buf[0] = cNumbers[h];
+ buf[0] = kNumbers[h];
buf[1] = 0;
term.operator<<(buf);
@@ -128,7 +128,7 @@ namespace Kernel
_write_number_hex(y, term);
/* fail if the hex number is not base-16 */
- if (h > 15)
+ if (h > 16)
{
_write_number_hex('?', term);
return term;
@@ -137,10 +137,10 @@ namespace Kernel
if (y < 0)
y = -y;
- const Char cNumbers[17] = "0123456789ABCDEF";
+ const Char kNumbers[17] = "0123456789ABCDEF";
Char buf[2];
- buf[0] = cNumbers[h];
+ buf[0] = kNumbers[h];
buf[1] = 0;
term.operator<<(buf);
diff --git a/dev/ZKAKit/KernelKit/DriveMgr.h b/dev/ZKAKit/KernelKit/DriveMgr.h
index 38b9624a..9407f060 100644
--- a/dev/ZKAKit/KernelKit/DriveMgr.h
+++ b/dev/ZKAKit/KernelKit/DriveMgr.h
@@ -17,9 +17,9 @@
#include <NewKit/Ref.h>
#define kMaxDriveCountPerMountpoint (4U)
-
-#define kDriveInvalidID (-1)
-#define kDriveNameLen (32)
+#define kDriveSectorSz (512U)
+#define kDriveInvalidID (-1)
+#define kDriveNameLen (32)
#define DrvSectorCnt(SIZE, SECTOR_SZ) (((SIZE) + (SECTOR_SZ)) / (SECTOR_SZ))
diff --git a/dev/ZKAKit/KernelKit/LoaderInterface.h b/dev/ZKAKit/KernelKit/LoaderInterface.h
index a8b4625c..7f759ac3 100644
--- a/dev/ZKAKit/KernelKit/LoaderInterface.h
+++ b/dev/ZKAKit/KernelKit/LoaderInterface.h
@@ -24,6 +24,7 @@ namespace Kernel
ZKA_COPY_DEFAULT(LoaderInterface);
public:
+ virtual _Output ErrorOr<VoidPtr> GetBlob() = 0;
virtual _Output const Char* AsString() = 0;
virtual _Output const Char* MIME() = 0;
virtual _Output const Char* Path() = 0;
diff --git a/dev/ZKAKit/KernelKit/PCI/Device.h b/dev/ZKAKit/KernelKit/PCI/Device.h
index a37837f1..1b51e175 100644
--- a/dev/ZKAKit/KernelKit/PCI/Device.h
+++ b/dev/ZKAKit/KernelKit/PCI/Device.h
@@ -53,14 +53,14 @@ namespace Kernel::PCI
}
public:
- UShort DeviceId();
- UShort VendorId();
- UShort InterfaceId();
- UChar Class();
- UChar Subclass();
- UChar ProgIf();
- UChar HeaderType();
- UInt32 Bar(UInt32 bar_in);
+ UShort DeviceId();
+ UShort VendorId();
+ UShort InterfaceId();
+ UChar Class();
+ UChar Subclass();
+ UChar ProgIf();
+ UChar HeaderType();
+ UIntPtr Bar(UInt32 bar_in);
public:
void EnableMmio(UInt32 bar_in);
diff --git a/dev/ZKAKit/KernelKit/PEFCodeMgr.h b/dev/ZKAKit/KernelKit/PEFCodeMgr.h
index 6887f521..89b4ea40 100644
--- a/dev/ZKAKit/KernelKit/PEFCodeMgr.h
+++ b/dev/ZKAKit/KernelKit/PEFCodeMgr.h
@@ -41,6 +41,7 @@ namespace Kernel
public:
ErrorOr<VoidPtr> FindStart() override;
VoidPtr FindSymbol(const Char* name, Int32 kind) override;
+ ErrorOr<VoidPtr> GetBlob() override;
public:
bool IsLoaded() noexcept;
diff --git a/dev/ZKAKit/KernelKit/UserProcessScheduler.h b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
index 9880b565..4f9b04e8 100644
--- a/dev/ZKAKit/KernelKit/UserProcessScheduler.h
+++ b/dev/ZKAKit/KernelKit/UserProcessScheduler.h
@@ -39,16 +39,18 @@ namespace Kernel
typedef Int64 ProcessID;
//! @brief Local Process name length.
- inline constexpr SizeT kProcessLen = 4096U;
+ inline constexpr SizeT kProcessNameLen = 4096U;
//! @brief Local Process status enum.
enum class ProcessStatusKind : Int32
{
+ kInvalid,
kStarting,
kRunning,
kKilled,
kFrozen,
- kDead
+ kDead,
+ kCount,
};
//! @brief Affinity is the amount of nano-seconds this process is going
@@ -134,17 +136,18 @@ namespace Kernel
~UserProcess();
public:
- ZKA_COPY_DEFAULT(UserProcess)
+ ZKA_COPY_DEFAULT(UserProcess);
public:
- Char Name[kProcessLen] = {"Application Process (Unnamed)"};
+ Char Name[kProcessNameLen] = {"Application Process (Unnamed)"};
ProcessSubsystem SubSystem{ProcessSubsystem::kProcessSubsystemInvalid};
User* Owner{nullptr};
HAL::StackFramePtr StackFrame{nullptr};
AffinityKind Affinity{AffinityKind::kStandard};
ProcessStatusKind Status{ProcessStatusKind::kDead};
UInt8* StackReserve{nullptr};
- ImagePtr Image{nullptr};
+ ImagePtr Code{nullptr};
+ ImagePtr ExecImg{nullptr};
SizeT StackSize{kSchedMaxStackSz};
IPEFDLLObject* PefDLLDelegate{nullptr};
SizeT MemoryCursor{0};
@@ -264,7 +267,7 @@ namespace Kernel
UserProcessTeam& CurrentTeam();
public:
- SizeT Add(UserProcess process);
+ ProcessID Add(UserProcess* process);
const Bool Remove(ProcessID process_id);
const Bool IsUser() override;
@@ -289,10 +292,10 @@ namespace Kernel
class UserProcessHelper final
{
public:
- STATIC bool Switch(VoidPtr image_ptr, UInt8* stack_ptr, HAL::StackFramePtr frame_ptr, const PID& new_pid);
- STATIC bool CanBeScheduled(const UserProcess& process);
- STATIC PID& TheCurrentPID();
- STATIC SizeT StartScheduling();
+ STATIC Bool Switch(VoidPtr image_ptr, UInt8* stack_ptr, HAL::StackFramePtr frame_ptr, const PID& new_pid);
+ STATIC Bool CanBeScheduled(const UserProcess& process);
+ STATIC ErrorOr<PID> TheCurrentPID();
+ STATIC SizeT StartScheduling();
};
const UInt32& sched_get_exit_code(void) noexcept;
diff --git a/dev/ZKAKit/NewKit/Array.h b/dev/ZKAKit/NewKit/Array.h
index 28060857..994645c5 100644
--- a/dev/ZKAKit/NewKit/Array.h
+++ b/dev/ZKAKit/NewKit/Array.h
@@ -24,12 +24,19 @@ namespace Kernel
T& operator[](const SizeT& At)
{
+ MUST_PASS(At < N);
return fArray[At];
}
- Boolean Empty() const
+ T& Assign(const SizeT& At, T& NewVal)
{
- return No;
+ fArray[At] = NewVal;
+ return fArray[At];
+ }
+
+ Boolean Empty()
+ {
+ return this->Count() > 0;
}
const SizeT Capacity()
diff --git a/dev/ZKAKit/NewKit/Macros.h b/dev/ZKAKit/NewKit/Macros.h
index 7041741b..63ba28cd 100644
--- a/dev/ZKAKit/NewKit/Macros.h
+++ b/dev/ZKAKit/NewKit/Macros.h
@@ -118,6 +118,10 @@
#define RGB(R, G, B) (Kernel::UInt32)(R | G << 0x8 | B << 0x10)
#endif // !RGB
+#define BREAK_POINT() \
+ while (Yes) \
+ ;
+
/// @brief The system page file.
#define kPageSys "/System/syspage.sys"
diff --git a/dev/ZKAKit/NewKit/Stop.h b/dev/ZKAKit/NewKit/Stop.h
index 4155ff88..e47d0ec7 100644
--- a/dev/ZKAKit/NewKit/Stop.h
+++ b/dev/ZKAKit/NewKit/Stop.h
@@ -57,7 +57,7 @@ namespace Kernel
STATIC Void Recover() noexcept;
};
- void ke_stop(const Int& id);
+ void ke_stop(const Int32& id);
} // namespace Kernel
#ifdef TRY
diff --git a/dev/ZKAKit/src/CodeMgr.cc b/dev/ZKAKit/src/CodeMgr.cc
index 4031736a..335d1d87 100644
--- a/dev/ZKAKit/src/CodeMgr.cc
+++ b/dev/ZKAKit/src/CodeMgr.cc
@@ -23,15 +23,15 @@ namespace Kernel
UserProcess* proc = new UserProcess{reinterpret_cast<VoidPtr>(main)};
- kcout << "Setting-up process...\r";
+ kcout << "Setting-up process data...\r";
proc->Kind = UserProcess::kExectuableKind;
- proc->StackSize = kib_cast(8);
- proc->PTime = 0UL;
+ proc->StackSize = kib_cast(4);
+ rt_set_memory(proc->Name, 0, kProcessNameLen);
rt_copy_memory((VoidPtr)process_name, proc->Name, rt_string_len(process_name));
- ProcessID id = UserProcessScheduler::The().Add(*proc);
+ ProcessID id = UserProcessScheduler::The().Add(proc);
delete proc;
diff --git a/dev/ZKAKit/src/DriveMgr.cc b/dev/ZKAKit/src/DriveMgr.cc
index 3d11600b..812bec36 100644
--- a/dev/ZKAKit/src/DriveMgr.cc
+++ b/dev/ZKAKit/src/DriveMgr.cc
@@ -158,10 +158,12 @@ namespace Kernel
if (rt_string_cmp(block_struct.Magic, kEPMMagic, kEPMMagicLength) == 0)
{
trait.fKind |= kEPMDrive;
+ kcout << "Formatted drive is EPM.\r";
}
else
{
trait.fKind |= kUnformattedDrive;
+ kcout << "Formatted drive is blank.\r";
}
trait.fPacket.fLba = 0;
@@ -178,14 +180,14 @@ namespace Kernel
rt_copy_memory((VoidPtr) "/Mount/OS:", trait.fName, rt_string_len("/Mount/OS:"));
- Detail::ioi_detect_drive(trait);
-
trait.fVerify = io_drv_unimplemented;
trait.fOutput = io_drv_output;
trait.fInput = io_drv_input;
trait.fInit = io_drv_init;
trait.fDriveKind = io_drv_kind;
+ Detail::ioi_detect_drive(trait);
+
kcout << "Construct: " << trait.fName << ".\r";
return trait;
diff --git a/dev/ZKAKit/src/FS/NeFS.cc b/dev/ZKAKit/src/FS/NeFS.cc
index bd93332a..53c88aa0 100644
--- a/dev/ZKAKit/src/FS/NeFS.cc
+++ b/dev/ZKAKit/src/FS/NeFS.cc
@@ -501,18 +501,18 @@ bool NeFSParser::Format(_Input _Output DriveTrait* drive, _Input const Lba endLb
BOOT_BLOCK_STRUCT* epmBoot = (BOOT_BLOCK_STRUCT*)bufEpmHdr;
- // EPM header.
+ // Write a new EPM entry.
- constexpr auto cFsName = "NeFS";
- constexpr auto cBlockName = "ZKA:";
+ constexpr auto kFsName = "NeFS";
+ constexpr auto kBlockName = "ZKA:";
- rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(cFsName)), epmBoot->Fs, rt_string_len(cFsName));
+ rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(kFsName)), epmBoot->Fs, rt_string_len(kFsName));
epmBoot->FsVersion = kNeFSVersionInteger;
epmBoot->LbaStart = start;
epmBoot->SectorSz = kNeFSSectorSz;
- rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(cBlockName)), epmBoot->Name, rt_string_len(cBlockName));
+ rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(kBlockName)), epmBoot->Name, rt_string_len(kBlockName));
rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(kEPMMagic)), epmBoot->Magic, rt_string_len(kEPMMagic));
Lba outEpmLba = kEPMBaseLba;
diff --git a/dev/ZKAKit/src/Heap.cc b/dev/ZKAKit/src/Heap.cc
index fc3f7051..9d36d04e 100644
--- a/dev/ZKAKit/src/Heap.cc
+++ b/dev/ZKAKit/src/Heap.cc
@@ -22,8 +22,9 @@
//! @file Heap.cc
//! @brief The Kernel's heap manager serves as the main memory manager.
-#define kKernelHeapMagic (0xD4D7D5)
-#define kKernelAlignSz (__BIGGEST_ALIGNMENT__)
+#define kKernelHeapMagic (0xD4D7D5)
+#define kKernelHeapAlignSz (__BIGGEST_ALIGNMENT__)
+#define kKernelHeapMaxSize (gib_cast(2))
namespace Kernel
{
@@ -65,7 +66,7 @@ namespace Kernel
UIntPtr fHeapPtr;
/// @brief Padding bytes for header.
- UInt8 fPadding[kKernelAlignSz];
+ UInt8 fPadding[kKernelHeapAlignSz];
};
/// @brief Check for heap address validity.
@@ -121,7 +122,7 @@ namespace Kernel
return nullptr;
// We can't allocate that big now.
- MUST_PASS(sz <= gib_cast(2));
+ MUST_PASS(sz < kKernelHeapMaxSize);
sz_fix += sizeof(Detail::HEAP_INFORMATION_BLOCK);
@@ -141,7 +142,7 @@ namespace Kernel
heap_info_ptr->fUser = user;
heap_info_ptr->fPresent = Yes;
- rt_set_memory(heap_info_ptr->fPadding, 0, kKernelAlignSz);
+ rt_set_memory(heap_info_ptr->fPadding, 0, kKernelHeapAlignSz);
auto result = reinterpret_cast<VoidPtr>(heap_info_ptr->fHeapPtr);
diff --git a/dev/ZKAKit/src/IPEFDLLObject.cc b/dev/ZKAKit/src/IPEFDLLObject.cc
index c68f582d..620002d8 100644
--- a/dev/ZKAKit/src/IPEFDLLObject.cc
+++ b/dev/ZKAKit/src/IPEFDLLObject.cc
@@ -60,7 +60,7 @@ EXTERN_C IDLL rtl_init_dll(UserProcess* header)
}
dll_obj->Get()->fImageObject =
- header->Image;
+ header->ExecImg;
if (!dll_obj->Get()->fImageObject)
{
diff --git a/dev/ZKAKit/src/PEFCodeMgr.cc b/dev/ZKAKit/src/PEFCodeMgr.cc
index a2b3482a..ba0d3a78 100644
--- a/dev/ZKAKit/src/PEFCodeMgr.cc
+++ b/dev/ZKAKit/src/PEFCodeMgr.cc
@@ -226,6 +226,11 @@ namespace Kernel
return kPefApplicationMime;
}
+ ErrorOr<VoidPtr> PEFLoader::GetBlob()
+ {
+ return ErrorOr<VoidPtr>{this->fCachedBlob};
+ }
+
namespace Utils
{
ProcessID rtl_create_process(PEFLoader& exec, const Int32& procKind) noexcept
@@ -238,11 +243,12 @@ namespace Kernel
UserProcess* proc = new UserProcess{errOrStart.Leak().Leak()};
proc->Kind = procKind;
+ proc->ExecImg = exec.GetBlob().Leak().Leak();
proc->StackSize = *(UIntPtr*)exec.FindSymbol(kPefStackSizeSymbol, kPefData);
proc->MemoryLimit = *(UIntPtr*)exec.FindSymbol(kPefHeapSizeSymbol, kPefData);
proc->PTime = 0UL;
- rt_set_memory(proc->Name, 0, kProcessLen);
+ rt_set_memory(proc->Name, 0, kProcessNameLen);
if (exec.FindSymbol(kPefNameSymbol, kPefData))
rt_copy_memory(exec.FindSymbol(kPefNameSymbol, kPefData), proc->Name, rt_string_len((Char*)exec.FindSymbol(kPefNameSymbol, kPefData)));
@@ -253,7 +259,7 @@ namespace Kernel
proc->StackSize = mib_cast(cDefaultStackSizeMib);
}
- return UserProcessScheduler::The().Add(*proc);
+ return UserProcessScheduler::The().Add(proc);
}
} // namespace Utils
} // namespace Kernel
diff --git a/dev/ZKAKit/src/Stop.cc b/dev/ZKAKit/src/Stop.cc
index 122b4489..c244456a 100644
--- a/dev/ZKAKit/src/Stop.cc
+++ b/dev/ZKAKit/src/Stop.cc
@@ -21,7 +21,7 @@
namespace Kernel
{
- Void ke_stop(const Kernel::Int& id)
+ Void ke_stop(const Kernel::Int32& id)
{
CGInit();
@@ -30,7 +30,7 @@ namespace Kernel
auto start_y = 10;
auto x = 10;
- CGDrawString("minoskrnl.exe stopped working properly so it had to stop.", start_y, x, panic_text);
+ CGDrawString("minoskrnl.exe, bug check error raised, stopping...", start_y, x, panic_text);
start_y += 10;
// simply offset from previous string and then write the website.
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 67eac095..96d2244f 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -35,13 +35,19 @@ namespace Kernel
UInt32 kLastExitCode = 0U;
/***********************************************************************************/
+ /// @brief Process count global variable.
+ /***********************************************************************************/
+
+ ProcessID kProcessIDCounter = 0UL;
+
+ /***********************************************************************************/
/// @brief User Process scheduler global and external reference of thread scheduler.
/***********************************************************************************/
UserProcessScheduler kProcessScheduler;
UserProcess::UserProcess(VoidPtr start_image)
- : Image(start_image)
+ : Code(start_image)
{
}
@@ -71,7 +77,7 @@ namespace Kernel
UserProcess::operator bool()
{
- return this->Status == ProcessStatusKind::kRunning && this->Image != nullptr;
+ return this->Status == ProcessStatusKind::kRunning;
}
/***********************************************************************************/
@@ -239,7 +245,10 @@ namespace Kernel
void UserProcess::Exit(const Int32& exit_code)
{
- this->Status = ProcessStatusKind::kDead;
+ if (exit_code > 0)
+ this->Status = ProcessStatusKind::kKilled;
+ else
+ this->Status = ProcessStatusKind::kDead;
fLastExitCode = exit_code;
kLastExitCode = exit_code;
@@ -275,13 +284,13 @@ namespace Kernel
HAL::mm_free_bitmap(reinterpret_cast<VoidPtr>(this->VMRegister));
//! Delete image if not done already.
- if (this->Image && mm_is_valid_heap(this->Image))
- mm_delete_heap(this->Image);
+ if (this->Code && mm_is_valid_heap(this->Code))
+ mm_delete_heap(this->Code);
if (this->StackFrame && mm_is_valid_heap(this->StackFrame))
mm_delete_heap((VoidPtr)this->StackFrame);
- this->Image = nullptr;
+ this->Code = nullptr;
this->StackFrame = nullptr;
if (this->Kind == kExectuableDLLKind)
@@ -310,71 +319,61 @@ namespace Kernel
/// @return the process index inside the team.
/***********************************************************************************/
- SizeT UserProcessScheduler::Add(UserProcess process)
+ ProcessID UserProcessScheduler::Add(UserProcess* process)
{
- kcout << "Creating process: " << process.Name << ", prevous process count: " << number(mTeam.mProcessList.Count()) << endl;
-
- if (mTeam.mProcessList.Count() >= kSchedProcessLimitPerTeam)
- return kErrorInvalidData;
-
- kcout << "Create vm_register of: " << process.Name << endl;
+ kcout << "Create VMRegister of: " << process->Name << endl;
#ifdef __ZKA_AMD64__
- process.VMRegister = reinterpret_cast<UIntPtr>(mm_new_heap(sizeof(PDE), No, Yes));
+ process->VMRegister = reinterpret_cast<UIntPtr>(mm_new_heap(sizeof(PDE), No, Yes));
- if (!process.VMRegister)
+ if (!process->VMRegister)
{
- process.Crash();
- return kErrorProcessFault;
+ process->Crash();
+ return -kErrorProcessFault;
}
#endif // __ZKA_AMD64__
- kcout << "Create stack_frame of: " << process.Name << endl;
+ kcout << "Create StackFrame of: " << process->Name << endl;
- process.StackFrame = reinterpret_cast<HAL::StackFramePtr>(mm_new_heap(sizeof(HAL::StackFrame), Yes, Yes));
+ process->StackFrame = reinterpret_cast<HAL::StackFramePtr>(mm_new_heap(sizeof(HAL::StackFrame), Yes, Yes));
- if (!process.StackFrame)
+ if (!process->StackFrame)
{
- process.Crash();
- return kErrorProcessFault;
+ process->Crash();
+ return -kErrorProcessFault;
}
- kcout << "Create delegate if DLL for: " << process.Name << endl;
-
- // Create heap according to type of process.
- if (process.Kind == UserProcess::kExectuableDLLKind)
+ // Create heap according to type of process->
+ if (process->Kind == UserProcess::kExectuableDLLKind)
{
- process.PefDLLDelegate = rtl_init_dll(&process);
+ kcout << "Create delegate dylib for: " << process->Name << endl;
+ process->PefDLLDelegate = rtl_init_dll(process);
}
- kcout << "Validate image of: " << process.Name << endl;
+ process->StackReserve = reinterpret_cast<UInt8*>(mm_new_heap(sizeof(UInt8) * process->StackSize, Yes, Yes));
+
+ kcout << "Validate stack reserve: " << number((UIntPtr)process->StackReserve) << endl;
- if (!process.Image)
+ if (!process->StackReserve)
{
- process.Crash();
- return kErrorProcessFault;
+ process->Crash();
+ return -kErrorProcessFault;
}
- kcout << "Validate stack reserve of: " << process.Name << endl;
+ auto pid = 0UL;
- // Get preferred stack size by app.
- const auto kMaxStackSize = process.StackSize;
- process.StackReserve = reinterpret_cast<UInt8*>(mm_new_heap(sizeof(UInt8) * kMaxStackSize, Yes, Yes));
-
- if (!process.StackReserve)
- {
- process.Crash();
- return kErrorProcessFault;
- }
+ process->ProcessId = pid;
+ process->Status = ProcessStatusKind::kRunning;
+ process->PTime = (UIntPtr)AffinityKind::kStandard;
- process.ProcessId = 0UL;
- process.Status = ProcessStatusKind::kRunning;
+ mTeam.AsArray().Assign(pid, *process);
- mTeam.AsArray()[process.ProcessId] = process;
+ kcout << "Process Name: " << mTeam.AsArray()[pid].Name << endl;
+ kcout << "PID: " << number(mTeam.AsArray()[pid].ProcessId) << endl;
- kcout << "Create process: " << process.Name << endl;
+ BREAK_POINT();
- return process.ProcessId;
+ return pid;
}
/***********************************************************************************/
@@ -402,7 +401,7 @@ namespace Kernel
if (process_id > mTeam.mProcessList.Count())
return No;
- mTeam.AsArray()[process_id].Status = ProcessStatusKind::kDead;
+ --kProcessIDCounter;
return Yes;
}
@@ -445,24 +444,23 @@ namespace Kernel
for (; process_index < mTeam.AsArray().Capacity(); ++process_index)
{
- auto& process = mTeam.AsArray()[process_index];
+ auto process = mTeam.AsArray()[process_index];
//! check if process needs to be scheduled.
if (UserProcessHelper::CanBeScheduled(process))
{
+ // Set current process header.
+ this->GetCurrentProcess() = process;
+
process.PTime = static_cast<Int32>(process.Affinity);
kcout << "Switch to '" << process.Name << "'.\r";
- // Set current process header.
- this->GetCurrentProcess() = process;
-
// tell helper to find a core to schedule on.
- if (!UserProcessHelper::Switch(process.Image, &process.StackReserve[process.StackSize - 1], process.StackFrame,
+ if (!UserProcessHelper::Switch(process.Code, &process.StackReserve[process.StackSize - 1], process.StackFrame,
process.ProcessId))
{
process.Crash();
- continue;
}
}
else
@@ -492,10 +490,13 @@ namespace Kernel
/// @brief Current proccess id getter.
/// @return UserProcess ID integer.
- PID& UserProcessHelper::TheCurrentPID()
+ ErrorOr<PID> UserProcessHelper::TheCurrentPID()
{
+ if (!kProcessScheduler.GetCurrentProcess())
+ return ErrorOr<PID>{kErrorProcessFault};
+
kcout << "UserProcessHelper::TheCurrentPID: Leaking ProcessId...\r";
- return kProcessScheduler.GetCurrentProcess().Leak().ProcessId;
+ return ErrorOr<PID>{kProcessScheduler.GetCurrentProcess().Leak().ProcessId};
}
/// @brief Check if process can be schedulded.
@@ -505,13 +506,17 @@ namespace Kernel
Bool UserProcessHelper::CanBeScheduled(const UserProcess& process)
{
if (process.Status == ProcessStatusKind::kKilled ||
- process.Status == ProcessStatusKind::kDead)
+ process.Status == ProcessStatusKind::kDead ||
+ process.Status == ProcessStatusKind::kFrozen)
+ return No;
+
+ if (process.Status == ProcessStatusKind::kInvalid)
return No;
- if (!process.Image)
+ if (!process.Code)
return No;
- return process.PTime < 1 && process.Status == ProcessStatusKind::kRunning;
+ return process.PTime < 1;
}
/***********************************************************************************/
@@ -537,6 +542,9 @@ namespace Kernel
if (!stack || !frame_ptr || !image_ptr || new_pid < 0)
return No;
+ if (!mm_is_valid_heap(image_ptr))
+ return No;
+
for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Count(); ++index)
{
if (HardwareThreadScheduler::The()[index].Leak()->Kind() == kInvalidHart)
@@ -547,8 +555,8 @@ namespace Kernel
HardwareThreadScheduler::The()[index].Leak()->Kind() !=
ThreadKind::kHartSystemReserved)
{
- PID prev_pid = UserProcessHelper::TheCurrentPID();
- UserProcessHelper::TheCurrentPID() = new_pid;
+ PID prev_pid = UserProcessHelper::TheCurrentPID();
+ UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid;
////////////////////////////////////////////////////////////
/// Prepare task switch. ///
@@ -565,7 +573,7 @@ namespace Kernel
if (!ret)
{
HardwareThreadScheduler::The()[index].Leak()->fPTime = prev_ptime;
- UserProcessHelper::TheCurrentPID() = prev_pid;
+ UserProcessHelper::TheCurrentPID().Leak().Leak() = prev_pid;
continue;
}
diff --git a/dev/ZKAKit/src/Utils.cc b/dev/ZKAKit/src/Utils.cc
index f6564f38..9a2b5e78 100644
--- a/dev/ZKAKit/src/Utils.cc
+++ b/dev/ZKAKit/src/Utils.cc
@@ -34,7 +34,7 @@ namespace Kernel
{
SizeT len{0};
- while (str[len] != '\0')
+ do
{
if (len > _len)
{
@@ -42,7 +42,7 @@ namespace Kernel
}
++len;
- }
+ } while (str[len] != '\0');
return len;
}
@@ -51,10 +51,10 @@ namespace Kernel
{
SizeT cnt{0};
- while (ptr[cnt] != 0)
+ do
{
++cnt;
- }
+ } while (ptr[cnt] != 0);
return cnt;
}
@@ -211,7 +211,7 @@ namespace Kernel
}
} // namespace Kernel
-EXTERN_C void* memset(void* dst, char c, Kernel::Size len)
+EXTERN_C Kernel::VoidPtr memset(Kernel::VoidPtr dst, Kernel::UInt32 c, Kernel::Size len)
{
return Kernel::rt_set_memory(dst, c, len);
}