diff options
| author | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-07 09:18:35 +0200 |
|---|---|---|
| committer | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-07 09:18:35 +0200 |
| commit | 1003d7a20bab6885b4edde7d11103a199de30d21 (patch) | |
| tree | a1992f26fd9afeb802bbb1829dec8ebe02ce5cd9 /dev/ZKA/Sources | |
| parent | 4019b870041d1ac50a48ba9e7a981df1afde96e6 (diff) | |
Daily bump.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/ZKA/Sources')
| -rw-r--r-- | dev/ZKA/Sources/CodeMgr.cxx | 1 | ||||
| -rw-r--r-- | dev/ZKA/Sources/ExeMain.cxx | 12 | ||||
| -rw-r--r-- | dev/ZKA/Sources/HardwareThreadScheduler.cxx | 6 | ||||
| -rw-r--r-- | dev/ZKA/Sources/PEFCodeMgr.cxx | 15 |
4 files changed, 23 insertions, 11 deletions
diff --git a/dev/ZKA/Sources/CodeMgr.cxx b/dev/ZKA/Sources/CodeMgr.cxx index ae4cb00b..8e560408 100644 --- a/dev/ZKA/Sources/CodeMgr.cxx +++ b/dev/ZKA/Sources/CodeMgr.cxx @@ -25,6 +25,7 @@ namespace Kernel proc.Kind = UserProcess::kExeKind; proc.StackSize = mib_cast(4); + rt_set_memory(proc.Name, 0, kProcessLen); rt_copy_memory((VoidPtr)process_name, proc.Name, rt_string_len(process_name)); return UserProcessScheduler::The().Add(proc) > 0; diff --git a/dev/ZKA/Sources/ExeMain.cxx b/dev/ZKA/Sources/ExeMain.cxx index 036c5725..4497d5b3 100644 --- a/dev/ZKA/Sources/ExeMain.cxx +++ b/dev/ZKA/Sources/ExeMain.cxx @@ -112,11 +112,13 @@ namespace Kernel::Detail EXTERN_C ATTRIBUTE(naked) Kernel::Void HangCPU(Kernel::Void) { - while (Yes) - { - Kernel::Char* p = nullptr; - *p = 4; - } + asm volatile( + ".intel_syntax;" + "start:" + "syscall;" + "jmp start;" + ".att_syntax;" + ); } namespace Kernel diff --git a/dev/ZKA/Sources/HardwareThreadScheduler.cxx b/dev/ZKA/Sources/HardwareThreadScheduler.cxx index cbe0cc46..5b310fca 100644 --- a/dev/ZKA/Sources/HardwareThreadScheduler.cxx +++ b/dev/ZKA/Sources/HardwareThreadScheduler.cxx @@ -79,7 +79,7 @@ namespace Kernel /// @note Those symbols are needed in order to switch and validate the stack. EXTERN Bool hal_check_stack(HAL::StackFramePtr stackPtr); - EXTERN_C Bool mp_register_process(HAL::StackFramePtr stackPtr); + EXTERN_C Bool mp_register_process(VoidPtr image, UInt8* stack_ptr, HAL::StackFramePtr frame_ptr); /// @brief Switch to hardware thread. /// @param stack the new hardware thread. @@ -99,8 +99,10 @@ namespace Kernel if (this->IsBusy()) return false; + kcout << "Switching to the Process's HW thread...\r"; + this->Busy(true); - Bool ret = mp_register_process(fStack); + Bool ret = mp_register_process(image, stack_ptr, fStack); this->Busy(false); return ret; diff --git a/dev/ZKA/Sources/PEFCodeMgr.cxx b/dev/ZKA/Sources/PEFCodeMgr.cxx index 23dfae31..b6f7e3da 100644 --- a/dev/ZKA/Sources/PEFCodeMgr.cxx +++ b/dev/ZKA/Sources/PEFCodeMgr.cxx @@ -15,6 +15,7 @@ /// @brief PEF stack size symbol. #define cPefStackSizeSymbol "SizeOfReserveStack" +#define cPefNameSymbol "ProgramName" namespace Kernel { @@ -164,11 +165,10 @@ namespace Kernel Char* blobRet = new Char[container_header->Size]; - HAL::mm_update_pte(blobRet, HAL::eFlagsPresent); - HAL::mm_update_pte(blobRet, HAL::eFlagsUser); - if (container_header->Kind != kPefCode) - HAL::mm_update_pte(blobRet, HAL::eFlagsRw); + HAL::mm_map_page(blobRet, 0, HAL::eFlagsRw | HAL::eFlagsUser); + else + HAL::mm_map_page(blobRet, 0, HAL::eFlagsUser); rt_copy_memory((VoidPtr)((Char*)blob + sizeof(PEFCommandHeader)), blobRet, container_header->Size); @@ -214,6 +214,13 @@ namespace Kernel proc.Kind = procKind; proc.StackSize = *(UIntPtr*)exec.FindSymbol(cPefStackSizeSymbol, kPefData); + rt_set_memory(proc.Name, 0, kProcessLen); + + if (exec.FindSymbol(cPefNameSymbol, kPefData)) + rt_copy_memory((VoidPtr)exec.FindSymbol(cPefNameSymbol, kPefData), proc.Name, rt_string_len((Char*)exec.FindSymbol(cPefNameSymbol, kPefData))); + else + rt_copy_memory((VoidPtr) "UNNAMED PROCESS.", proc.Name, rt_string_len("UNNAMED PROCESS.")); + if (!proc.StackSize) { const auto cDefaultStackSizeMib = 8; |
