summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/Sources
diff options
context:
space:
mode:
authorAmlal <amlal@el-mahrouss-logic.com>2024-09-07 09:18:35 +0200
committerAmlal <amlal@el-mahrouss-logic.com>2024-09-07 09:18:35 +0200
commit1003d7a20bab6885b4edde7d11103a199de30d21 (patch)
treea1992f26fd9afeb802bbb1829dec8ebe02ce5cd9 /dev/ZKA/Sources
parent4019b870041d1ac50a48ba9e7a981df1afde96e6 (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.cxx1
-rw-r--r--dev/ZKA/Sources/ExeMain.cxx12
-rw-r--r--dev/ZKA/Sources/HardwareThreadScheduler.cxx6
-rw-r--r--dev/ZKA/Sources/PEFCodeMgr.cxx15
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;