summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-08-12 19:35:27 +0200
committerAmlal <amlal@nekernel.org>2025-08-12 19:35:27 +0200
commit621310537c26e8ac0fb3c0d2e38aaa12e3945eec (patch)
treec3d3767846c7e6436168866ddb9db257ff51c054
parentf3c12b72db9e6983741c0d79fd7f8903c23d93d4 (diff)
feat! abi! Breaking ABI changes in the PEF format!
Signed-off-by: Amlal <amlal@nekernel.org>
-rw-r--r--dev/kernel/KernelKit/PEF.h1
-rw-r--r--dev/kernel/src/PEFCodeMgr.cc4
2 files changed, 4 insertions, 1 deletions
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<PEFContainer*>(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]) {