From d87eb24271671f4d7d1298c6c4bbdf4e73f774f3 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 30 Aug 2024 08:43:46 +0200 Subject: A lot of fixes regarding the kernel: + Either choose NewFS or generic filesystem interface for FileStream class. + Fixed PEF code manager executable probing method, inside it's Loader class. + Add function mm_update_page for virtual memory purposes. - Remove logging on HardwareTimer class. --- dev/ZKA/Sources/PEFCodeManager.cxx | 57 ++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 30 deletions(-) (limited to 'dev/ZKA/Sources/PEFCodeManager.cxx') diff --git a/dev/ZKA/Sources/PEFCodeManager.cxx b/dev/ZKA/Sources/PEFCodeManager.cxx index 365f01c2..1b4adcfc 100644 --- a/dev/ZKA/Sources/PEFCodeManager.cxx +++ b/dev/ZKA/Sources/PEFCodeManager.cxx @@ -51,44 +51,41 @@ namespace Kernel : fCachedBlob(nullptr), fBad(false), fFatBinary(false) { fFile.New(const_cast(path), cRestrictRB); + fPath = StringBuilder::Construct(path).Leak(); - if (StringBuilder::Equals(fFile->MIME(), this->MIME())) - { - fPath = StringBuilder::Construct(path).Leak(); - - auto cPefHeader = "PEF_CONTAINER"; + auto cPefHeader = "PEF_CONTAINER"; - fCachedBlob = fFile->Read(cPefHeader); + fCachedBlob = fFile->Read(cPefHeader); - PEFContainer* container = reinterpret_cast(fCachedBlob); + PEFContainer* container = reinterpret_cast(fCachedBlob); - if (container->Cpu == Detail::rt_get_pef_platform() && - container->Magic[0] == kPefMagic[0] && - container->Magic[1] == kPefMagic[1] && - container->Magic[2] == kPefMagic[2] && - container->Magic[3] == kPefMagic[3] && - container->Magic[4] == kPefMagic[4] && container->Abi == kPefAbi) - { - return; - } - else if (container->Magic[4] == kPefMagic[0] && - container->Magic[3] == kPefMagic[1] && - container->Magic[2] == kPefMagic[2] && - container->Magic[1] == kPefMagic[3] && - container->Magic[0] == kPefMagic[0] && container->Abi == kPefAbi) - { - /// This is a fat binary. - this->fFatBinary = true; - return; - } + if (container->Cpu == Detail::rt_get_pef_platform() && + container->Magic[0] == kPefMagic[0] && + container->Magic[1] == kPefMagic[1] && + container->Magic[2] == kPefMagic[2] && + container->Magic[3] == kPefMagic[3] && + container->Magic[4] == kPefMagic[4] && container->Abi == kPefAbi) + { + return; + } + else if (container->Magic[4] == kPefMagic[0] && + container->Magic[3] == kPefMagic[1] && + container->Magic[2] == kPefMagic[2] && + container->Magic[1] == kPefMagic[3] && + container->Magic[0] == kPefMagic[0] && container->Abi == kPefAbi) + { + /// This is a fat binary. + this->fFatBinary = true; + return; + } - kcout << "CodeManagerPEF: Warning: Executable format error!\n"; - fBad = true; + kcout << "CodeManagerPEF: Warning: Executable format error!\r"; + fBad = true; + if (fCachedBlob) mm_delete_ke_heap(fCachedBlob); - fCachedBlob = nullptr; - } + fCachedBlob = nullptr; } /// @brief PEF destructor. -- cgit v1.2.3