From 42301b6977bf11f8d5b55c6ca8c08b97a2b4cc3c Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 18 Jun 2025 10:26:27 +0200 Subject: PEF format update `5.0` and codebase refactors. Signed-off-by: Amlal El Mahrouss --- dev/kernel/KernelKit/PEF.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'dev/kernel/KernelKit/PEF.h') diff --git a/dev/kernel/KernelKit/PEF.h b/dev/kernel/KernelKit/PEF.h index c28c8f8c..a357e827 100644 --- a/dev/kernel/KernelKit/PEF.h +++ b/dev/kernel/KernelKit/PEF.h @@ -18,12 +18,12 @@ #include #include -#define kPefMagic "Joy!" -#define kPefMagicFat "yoJ!" +#define kPefMagic "Open" +#define kPefMagicFat "nepO" #define kPefMagicLen (5) -#define kPefVersion (4) +#define kPefVersion (0x0500) #define kPefNameLen (256U) /* not mandatory, only for non fork based filesystems. */ @@ -59,10 +59,10 @@ enum { }; enum { + kPefSubArchGeneric, kPefSubArchAMD = 200, kPefSubArchIntel, kPefSubArchARM, - kPefSubArchGeneric, kPefSubArchIBM, }; @@ -98,15 +98,17 @@ typedef struct PEFCommandHeader final { UInt32 Flags; /* container flags */ UInt16 Kind; /* container kind */ UIntPtr Offset; /* content offset */ - UIntPtr VMAddress; /* VM offset */ - SizeT Size; /* content Size */ + UIntPtr VMAddress; /* Virtual Address */ + SizeT VMSize; /* Virtual Size */ } PACKED PEFCommandHeader; enum { + kPefInvalid = 0x0, kPefCode = 0xC, kPefData = 0xD, kPefZero = 0xE, kPefLinkerID = 0x1, + kPefCount = 4, }; } // namespace Kernel -- cgit v1.2.3 From d432898acdc4cebae81bff06f2c954f7165ebeb5 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 25 Jun 2025 10:03:49 +0200 Subject: fix: PEF format fixes. Signed-off-by: Amlal El Mahrouss --- dev/kernel/KernelKit/PEF.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'dev/kernel/KernelKit/PEF.h') diff --git a/dev/kernel/KernelKit/PEF.h b/dev/kernel/KernelKit/PEF.h index a357e827..ed6fc423 100644 --- a/dev/kernel/KernelKit/PEF.h +++ b/dev/kernel/KernelKit/PEF.h @@ -54,7 +54,7 @@ enum { kPefArch32x0, /* 32x0. ISA */ kPefArchPowerPC, kPefArchARM64, - kPefArchCount = (kPefArchPowerPC - kPefArchIntel86S) + 1, + kPefArchCount = (kPefArchARM64 - kPefArchIntel86S) + 1, kPefArchInvalid = 0xFF, }; -- cgit v1.2.3 From 621310537c26e8ac0fb3c0d2e38aaa12e3945eec Mon Sep 17 00:00:00 2001 From: Amlal Date: Tue, 12 Aug 2025 19:35:27 +0200 Subject: feat! abi! Breaking ABI changes in the PEF format! Signed-off-by: Amlal --- dev/kernel/KernelKit/PEF.h | 1 + dev/kernel/src/PEFCodeMgr.cc | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'dev/kernel/KernelKit/PEF.h') diff --git a/dev/kernel/KernelKit/PEF.h b/dev/kernel/KernelKit/PEF.h index ed6fc423..f306c52e 100644 --- a/dev/kernel/KernelKit/PEF.h +++ b/dev/kernel/KernelKit/PEF.h @@ -98,6 +98,7 @@ typedef struct PEFCommandHeader final { UInt32 Flags; /* container flags */ UInt16 Kind; /* container kind */ UIntPtr Offset; /* content offset */ + SizeT OffsetSize; /* offset size (physical size inside the file) */ UIntPtr VMAddress; /* Virtual Address */ SizeT VMSize; /* Virtual Size */ } PACKED PEFCommandHeader; diff --git a/dev/kernel/src/PEFCodeMgr.cc b/dev/kernel/src/PEFCodeMgr.cc index 3cbc4faa..c0caeb5b 100644 --- a/dev/kernel/src/PEFCodeMgr.cc +++ b/dev/kernel/src/PEFCodeMgr.cc @@ -71,7 +71,9 @@ PEFLoader::PEFLoader(const Char* path) : fCachedBlob(nullptr), fFatBinary(false) PEFContainer* container = reinterpret_cast(fCachedBlob); - if (container->Abi == kPefAbi) { + if (container->Abi == kPefAbi && + container->Count >= + 3) { /* if same ABI, AND: .text, .bss, .data (or at least similar) exists */ if (container->Cpu == Detail::ldr_get_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]) { -- cgit v1.2.3 From b301047903b79560dce69085fc271a653a1eb4b6 Mon Sep 17 00:00:00 2001 From: Amlal Date: Sat, 16 Aug 2025 00:03:56 +0200 Subject: feat: ACPI: Better error handling. Signed-off-by: Amlal --- dev/kernel/KernelKit/PEF.h | 6 +++--- dev/kernel/src/ACPIFactoryInterface.cc | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'dev/kernel/KernelKit/PEF.h') diff --git a/dev/kernel/KernelKit/PEF.h b/dev/kernel/KernelKit/PEF.h index f306c52e..fd39392e 100644 --- a/dev/kernel/KernelKit/PEF.h +++ b/dev/kernel/KernelKit/PEF.h @@ -11,8 +11,8 @@ ------------------------------------------- */ -#ifndef KERNELKIT_PEF_H -#define KERNELKIT_PEF_H +#ifndef __KERNELKIT_PEF_H__ +#define __KERNELKIT_PEF_H__ #include #include @@ -113,4 +113,4 @@ enum { }; } // namespace Kernel -#endif /* ifndef KERNELKIT_PEF_H */ +#endif /* ifndef __KERNELKIT_PEF_H__ */ diff --git a/dev/kernel/src/ACPIFactoryInterface.cc b/dev/kernel/src/ACPIFactoryInterface.cc index 8cc11cad..01f30500 100644 --- a/dev/kernel/src/ACPIFactoryInterface.cc +++ b/dev/kernel/src/ACPIFactoryInterface.cc @@ -10,12 +10,11 @@ #include namespace Kernel { -constexpr STATIC const auto kMinACPIVer = 1; +constexpr STATIC const auto kMinACPIVer = 1U; /// @brief Finds a descriptor table inside ACPI XSDT. ErrorOr ACPIFactoryInterface::Find(const Char* signature) { - MUST_PASS(this->fRsdp); - + if (this->fRsdp) return ErrorOr{kErrorInvalidData}; if (!signature) return ErrorOr{-kErrorInvalidData}; if (*signature == 0) return ErrorOr{-kErrorInvalidData}; @@ -33,7 +32,7 @@ ErrorOr ACPIFactoryInterface::Find(const Char* signature) { if (num < 1) { /// stop here, we should have entries... ke_panic(RUNTIME_CHECK_ACPI); - return ErrorOr{-1}; + return ErrorOr{-kErrorInvalidData}; } this->fEntries = num; @@ -62,7 +61,7 @@ ErrorOr ACPIFactoryInterface::Find(const Char* signature) { } } - return ErrorOr{-1}; + return ErrorOr{-kErrorInvalidData}; } /*** -- cgit v1.2.3