From 770b1034a8f1bc401251ebbbeb8af82568829f09 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 4 May 2024 19:23:48 +0200 Subject: MHR-23: Improve code and add a ProcessSubsystem inside the scheduler. Signed-off-by: Amlal El Mahrouss --- Private/KernelKit/LoaderInterface.hpp | 2 +- Private/KernelKit/PEFCodeManager.hxx | 2 +- Private/KernelKit/ProcessScheduler.hpp | 11 +++++++++-- Private/Source/PEFCodeManager.cxx | 19 +++++++++++-------- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Private/KernelKit/LoaderInterface.hpp b/Private/KernelKit/LoaderInterface.hpp index 09d0d7b5..97a12938 100644 --- a/Private/KernelKit/LoaderInterface.hpp +++ b/Private/KernelKit/LoaderInterface.hpp @@ -22,7 +22,7 @@ class LoaderInterface { NEWOS_COPY_DEFAULT(LoaderInterface); public: - virtual _Output const char* Format() = 0; + virtual _Output const char* FormatAsString() = 0; virtual _Output const char* MIME() = 0; virtual _Output const char* Path() = 0; virtual _Output ErrorOr FindStart() = 0; diff --git a/Private/KernelKit/PEFCodeManager.hxx b/Private/KernelKit/PEFCodeManager.hxx index a928e89e..2d8517cb 100644 --- a/Private/KernelKit/PEFCodeManager.hxx +++ b/Private/KernelKit/PEFCodeManager.hxx @@ -32,7 +32,7 @@ class PEFLoader : public LoaderInterface { public: const char *Path() override; - const char *Format() override; + const char *FormatAsString() override; const char *MIME() override; public: diff --git a/Private/KernelKit/ProcessScheduler.hpp b/Private/KernelKit/ProcessScheduler.hpp index 3085713f..3c080b15 100644 --- a/Private/KernelKit/ProcessScheduler.hpp +++ b/Private/KernelKit/ProcessScheduler.hpp @@ -93,7 +93,14 @@ inline bool operator>=(AffinityKind lhs, AffinityKind rhs) { // end of operator overloading. -using ProcessSubsystem = UInt32; +enum ProcessSubsystemEnum { + eProcessSubsystemLogin, + eProcessSubsystemNative, + eProcessSubsystemInvalid, + eProcessSubsystemCount, +}; + +using ProcessSubsystem = ProcessSubsystemEnum; using ProcessTime = UInt64; using PID = Int64; @@ -127,7 +134,7 @@ class ProcessHeader final { public: Char Name[kProcessLen] = {"NewOS Process"}; - ProcessSubsystem SubSystem{0}; + ProcessSubsystem SubSystem{ProcessSubsystem::eProcessSubsystemInvalid}; ProcessSelector Selector{ProcessSelector::kRingUser}; HAL::StackFramePtr StackFrame{nullptr}; AffinityKind Affinity; diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx index cd1b301f..41a0d7f3 100644 --- a/Private/Source/PEFCodeManager.cxx +++ b/Private/Source/PEFCodeManager.cxx @@ -94,19 +94,22 @@ VoidPtr PEFLoader::FindSymbol(const char *name, Int32 kind) { PEFCommandHeader *container_header = reinterpret_cast( (UIntPtr)fCachedBlob + sizeof(PEFContainer)); + constexpr auto cMangleCharacter = '$'; + const char* cContainerKinds[] = { ".code64", ".data64", ".zero64", nullptr }; + ErrorOr errOrSym; switch (kind) { case kPefCode: { - errOrSym = StringBuilder::Construct(".code64$"); + errOrSym = StringBuilder::Construct(cContainerKinds[0]); // code symbol. break; } case kPefData: { - errOrSym = StringBuilder::Construct(".data64$"); + errOrSym = StringBuilder::Construct(cContainerKinds[1]); // data symbol. break; } case kPefZero: { - errOrSym = StringBuilder::Construct(".zero64$"); + errOrSym = StringBuilder::Construct(cContainerKinds[2]); // block starting symbol. break; } default: @@ -115,9 +118,9 @@ VoidPtr PEFLoader::FindSymbol(const char *name, Int32 kind) { char *unconstSymbol = const_cast(name); - for (SizeT i = 0UL; i < rt_string_len(name, 0); ++i) { + for (SizeT i = 0UL; i < rt_string_len(unconstSymbol, kPefNameLen); ++i) { if (unconstSymbol[i] == ' ') { - unconstSymbol[i] = '$'; + unconstSymbol[i] = cMangleCharacter; } } @@ -170,7 +173,7 @@ bool execute_from_image(PEFLoader &exec, const Int32& procKind) noexcept { const char *PEFLoader::Path() { return fPath.Leak().CData(); } -const char *PEFLoader::Format() { +const char *PEFLoader::FormatAsString() { #ifdef __32x0__ return "32x0 PEF."; #elif defined(__64x0__) @@ -180,8 +183,8 @@ const char *PEFLoader::Format() { #elif defined(__powerpc64__) return "POWER PEF."; #else - return "Unknonwn PEF."; - #endif // __32x0__ || __64x0__ || __x86_64__ + return "Unknown PEF."; + #endif // __32x0__ || __64x0__ || __x86_64__ || __powerpc64__ } const char *PEFLoader::MIME() { return kPefApplicationMime; } -- cgit v1.2.3