summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-04-07 21:51:07 +0200
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-04-07 21:51:07 +0200
commitf21456cae169f9d911cefe39f1b99615f3c39e5d (patch)
treea913189ff3ecdb40e308d5960219af4db326f4fe
parent0e1b114840bab254eec9f253095e3aed6d64b048 (diff)
Kernel: Add XCOFF header, update PE.hpp to PE.hxx.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
-rw-r--r--Private/FirmwareKit/EFI/API.hxx2
-rw-r--r--Private/KernelKit/MSDOS.hpp2
-rw-r--r--Private/KernelKit/PE.hpp126
-rw-r--r--Private/KernelKit/PE.hxx117
-rw-r--r--Private/KernelKit/PECodeManager.hxx2
-rw-r--r--Private/KernelKit/PEF.hpp4
-rw-r--r--Private/KernelKit/XCOFF.hxx38
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootMain.cxx2
8 files changed, 161 insertions, 132 deletions
diff --git a/Private/FirmwareKit/EFI/API.hxx b/Private/FirmwareKit/EFI/API.hxx
index 90503384..cfb3f425 100644
--- a/Private/FirmwareKit/EFI/API.hxx
+++ b/Private/FirmwareKit/EFI/API.hxx
@@ -9,7 +9,7 @@
#include <FirmwareKit/EFI/EFI.hxx>
#include <KernelKit/MSDOS.hpp>
-#include <KernelKit/PE.hpp>
+#include <KernelKit/PE.hxx>
inline EfiSystemTable *ST = nullptr;
inline EfiBootServices *BS = nullptr;
diff --git a/Private/KernelKit/MSDOS.hpp b/Private/KernelKit/MSDOS.hpp
index 1fe99a60..8826c2c7 100644
--- a/Private/KernelKit/MSDOS.hpp
+++ b/Private/KernelKit/MSDOS.hpp
@@ -14,7 +14,7 @@
#ifndef __MSDOS_EXEC__
#define __MSDOS_EXEC__
-#include <KernelKit/PE.hpp>
+#include <KernelKit/PE.hxx>
#include <NewKit/Defines.hpp>
// Last Rev
diff --git a/Private/KernelKit/PE.hpp b/Private/KernelKit/PE.hpp
deleted file mode 100644
index f397ff48..00000000
--- a/Private/KernelKit/PE.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
- File: PE.hpp
- Purpose: Portable Executable for NewOS.
-
- Revision History:
-
- 30/01/24: Added file (amlel)
-
-------------------------------------------- */
-
-#ifndef __PE__
-#define __PE__
-
-#include <NewKit/Defines.hpp>
-#include <KernelKit/PE.hpp>
-
-namespace Detail
-{
- typedef NewOS::UIntPtr PE_QWORD;
- typedef NewOS::UInt32 PE_DWORD;
- typedef NewOS::UInt16 PE_WORD;
- typedef NewOS::UChar PE_BYTE;
-} // namespace Detail
-
-#define kPeMagic 0x00004550
-
-typedef struct ExecHeader final {
- Detail::PE_DWORD mMagic; // PE\0\0 or 0x00004550
- Detail::PE_WORD mMachine;
- Detail::PE_WORD mNumberOfSections;
- Detail::PE_DWORD mTimeDateStamp;
- Detail::PE_DWORD mPointerToSymbolTable;
- Detail::PE_DWORD mNumberOfSymbols;
- Detail::PE_WORD mSizeOfOptionalHeader;
- Detail::PE_WORD mCharacteristics;
-} ALIGN(8) ExecHeader, *ExecHeaderPtr;
-
-#define kMagPE32 0x010b
-#define kMagPE64 0x020b
-
-#define kPEMachineAMD64 0x8664
-#define kPEMachineARM64 0xaa64
-
-typedef struct ExecOptionalHeader final {
- Detail::PE_WORD mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
- Detail::PE_BYTE mMajorLinkerVersion;
- Detail::PE_BYTE mMinorLinkerVersion;
- Detail::PE_QWORD mSizeOfCode;
- Detail::PE_QWORD mSizeOfInitializedData;
- Detail::PE_QWORD mSizeOfUninitializedData;
- Detail::PE_DWORD mAddressOfEntryPoint;
- Detail::PE_DWORD mBaseOfCode;
- Detail::PE_QWORD mImageBase;
- Detail::PE_DWORD mSectionAlignment;
- Detail::PE_DWORD mFileAlignment;
- Detail::PE_WORD mMajorOperatingSystemVersion;
- Detail::PE_WORD mMinorOperatingSystemVersion;
- Detail::PE_WORD mMajorImageVersion;
- Detail::PE_WORD mMinorImageVersion;
- Detail::PE_WORD mMajorSubsystemVersion;
- Detail::PE_WORD mMinorSubsystemVersion;
- Detail::PE_DWORD mWin32VersionValue;
- Detail::PE_QWORD mSizeOfImage;
- Detail::PE_QWORD mSizeOfHeaders;
- Detail::PE_DWORD mCheckSum;
- Detail::PE_WORD mSubsystem;
- Detail::PE_WORD mDllCharacteristics;
- Detail::PE_QWORD mSizeOfStackReserve;
- Detail::PE_QWORD mSizeOfStackCommit;
- Detail::PE_QWORD mSizeOfHeapReserve;
- Detail::PE_QWORD mSizeOfHeapCommit;
- Detail::PE_DWORD mLoaderFlags;
- Detail::PE_DWORD mNumberOfRvaAndSizes;
-} ExecOptionalHeader, *ExecOptionalHeaderPtr;
-
-typedef struct ExecSectionHeader final {
- CONST Detail::PE_BYTE mName[8];
- Detail::PE_DWORD mVirtualSize;
- Detail::PE_DWORD mVirtualAddress;
- Detail::PE_DWORD mSizeOfRawData;
- Detail::PE_DWORD mPointerToRawData;
- Detail::PE_DWORD mPointerToRelocations;
- Detail::PE_DWORD mPointerToLinenumbers;
- Detail::PE_WORD mNumberOfRelocations;
- Detail::PE_WORD mNumberOfLinenumbers;
- Detail::PE_DWORD mCharacteristics;
-} ExecSectionHeader, *ExecSectionHeaderPtr;
-
-enum kExecDataDirParams {
- kExecExport,
- kExecImport,
- kExecInvalid,
- kExecCount,
-};
-
-typedef struct ExecExportDirectory {
- Detail::PE_DWORD mCharacteristics;
- Detail::PE_DWORD mTimeDateStamp;
- Detail::PE_WORD mMajorVersion;
- Detail::PE_WORD mMinorVersion;
- Detail::PE_DWORD mName;
- Detail::PE_DWORD mBase;
- Detail::PE_DWORD mNumberOfFunctions;
- Detail::PE_DWORD mNumberOfNames;
- Detail::PE_DWORD mAddressOfFunctions; // export table rva
- Detail::PE_DWORD mAddressOfNames;
- Detail::PE_DWORD mAddressOfNameOrdinal; // ordinal table rva
-} ExecExportDirectory, *ExecExportDirectoryPtr;
-
-typedef struct ExecImportDirectory {
- union {
- Detail::PE_DWORD mCharacteristics;
- Detail::PE_DWORD mOriginalFirstThunk;
- };
- Detail::PE_DWORD mTimeDateStamp;
- Detail::PE_DWORD mForwarderChain;
- Detail::PE_DWORD mNameRva;
- Detail::PE_DWORD mThunkTableRva;
-} ExecImportDirectory, *ExecImportDirectoryPtr;
-
-#define kPeStart "__hcore_subsys_start"
-
-#endif /* ifndef __PE__ */
diff --git a/Private/KernelKit/PE.hxx b/Private/KernelKit/PE.hxx
new file mode 100644
index 00000000..57e224ca
--- /dev/null
+++ b/Private/KernelKit/PE.hxx
@@ -0,0 +1,117 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: PE.hxx
+ Purpose: Portable Executable for NewOS.
+
+ Revision History:
+
+ 30/01/24: Added file (amlel)
+
+------------------------------------------- */
+
+#ifndef __PE__
+#define __PE__
+
+#include <NewKit/Defines.hpp>
+
+#define kPeMagic 0x00004550
+
+typedef struct ExecHeader final {
+ NewOS::UInt32 mMagic; // PE\0\0 or 0x00004550
+ NewOS::UInt16 mMachine;
+ NewOS::UInt16 mNumberOfSections;
+ NewOS::UInt32 mTimeDateStamp;
+ NewOS::UInt32 mPointerToSymbolTable;
+ NewOS::UInt32 mNumberOfSymbols;
+ NewOS::UInt16 mSizeOfOptionalHeader;
+ NewOS::UInt16 mCharacteristics;
+} ALIGN(8) ExecHeader, *ExecHeaderPtr;
+
+#define kMagPE32 0x010b
+#define kMagPE64 0x020b
+
+#define kPEMachineAMD64 0x8664
+#define kPEMachineARM64 0xaa64
+
+typedef struct ExecOptionalHeader final {
+ NewOS::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
+ NewOS::UChar mMajorLinkerVersion;
+ NewOS::UChar mMinorLinkerVersion;
+ NewOS::UIntPtr mSizeOfCode;
+ NewOS::UIntPtr mSizeOfInitializedData;
+ NewOS::UIntPtr mSizeOfUninitializedData;
+ NewOS::UInt32 mAddressOfEntryPoint;
+ NewOS::UInt32 mBaseOfCode;
+ NewOS::UIntPtr mImageBase;
+ NewOS::UInt32 mSectionAlignment;
+ NewOS::UInt32 mFileAlignment;
+ NewOS::UInt16 mMajorOperatingSystemVersion;
+ NewOS::UInt16 mMinorOperatingSystemVersion;
+ NewOS::UInt16 mMajorImageVersion;
+ NewOS::UInt16 mMinorImageVersion;
+ NewOS::UInt16 mMajorSubsystemVersion;
+ NewOS::UInt16 mMinorSubsystemVersion;
+ NewOS::UInt32 mWin32VersionValue;
+ NewOS::UIntPtr mSizeOfImage;
+ NewOS::UIntPtr mSizeOfHeaders;
+ NewOS::UInt32 mCheckSum;
+ NewOS::UInt16 mSubsystem;
+ NewOS::UInt16 mDllCharacteristics;
+ NewOS::UIntPtr mSizeOfStackReserve;
+ NewOS::UIntPtr mSizeOfStackCommit;
+ NewOS::UIntPtr mSizeOfHeapReserve;
+ NewOS::UIntPtr mSizeOfHeapCommit;
+ NewOS::UInt32 mLoaderFlags;
+ NewOS::UInt32 mNumberOfRvaAndSizes;
+} ExecOptionalHeader, *ExecOptionalHeaderPtr;
+
+typedef struct ExecSectionHeader final {
+ CONST NewOS::UChar mName[8];
+ NewOS::UInt32 mVirtualSize;
+ NewOS::UInt32 mVirtualAddress;
+ NewOS::UInt32 mSizeOfRawData;
+ NewOS::UInt32 mPointerToRawData;
+ NewOS::UInt32 mPointerToRelocations;
+ NewOS::UInt32 mPointerToLinenumbers;
+ NewOS::UInt16 mNumberOfRelocations;
+ NewOS::UInt16 mNumberOfLinenumbers;
+ NewOS::UInt32 mCharacteristics;
+} ExecSectionHeader, *ExecSectionHeaderPtr;
+
+enum kExecDataDirParams {
+ kExecExport,
+ kExecImport,
+ kExecInvalid,
+ kExecCount,
+};
+
+typedef struct ExecExportDirectory {
+ NewOS::UInt32 mCharacteristics;
+ NewOS::UInt32 mTimeDateStamp;
+ NewOS::UInt16 mMajorVersion;
+ NewOS::UInt16 mMinorVersion;
+ NewOS::UInt32 mName;
+ NewOS::UInt32 mBase;
+ NewOS::UInt32 mNumberOfFunctions;
+ NewOS::UInt32 mNumberOfNames;
+ NewOS::UInt32 mAddressOfFunctions; // export table rva
+ NewOS::UInt32 mAddressOfNames;
+ NewOS::UInt32 mAddressOfNameOrdinal; // ordinal table rva
+} ExecExportDirectory, *ExecExportDirectoryPtr;
+
+typedef struct ExecImportDirectory {
+ union {
+ NewOS::UInt32 mCharacteristics;
+ NewOS::UInt32 mOriginalFirstThunk;
+ };
+ NewOS::UInt32 mTimeDateStamp;
+ NewOS::UInt32 mForwarderChain;
+ NewOS::UInt32 mNameRva;
+ NewOS::UInt32 mThunkTableRva;
+} ExecImportDirectory, *ExecImportDirectoryPtr;
+
+#define kPeStart "__hcore_subsys_start"
+
+#endif /* ifndef __PE__ */
diff --git a/Private/KernelKit/PECodeManager.hxx b/Private/KernelKit/PECodeManager.hxx
index 1f15a742..47db2d04 100644
--- a/Private/KernelKit/PECodeManager.hxx
+++ b/Private/KernelKit/PECodeManager.hxx
@@ -19,6 +19,6 @@
////////////////////////////////////////////////////
-#include <KernelKit/PE.hpp>
+#include <KernelKit/PE.hxx>
#include <NewKit/ErrorOr.hpp>
#include <NewKit/String.hpp>
diff --git a/Private/KernelKit/PEF.hpp b/Private/KernelKit/PEF.hpp
index 7009d5d8..c6883f0a 100644
--- a/Private/KernelKit/PEF.hpp
+++ b/Private/KernelKit/PEF.hpp
@@ -84,8 +84,8 @@ enum {
} // namespace NewOS
#define kPefExt ".exe"
-#define kPefDylibExt ".dll"
-#define kPefLibExt ".lib"
+#define kPefDylibExt ".lib"
+#define kPefLibExt ".slib"
#define kPefObjectExt ".obj"
#define kPefDebugExt ".dbg"
diff --git a/Private/KernelKit/XCOFF.hxx b/Private/KernelKit/XCOFF.hxx
new file mode 100644
index 00000000..35ca9896
--- /dev/null
+++ b/Private/KernelKit/XCOFF.hxx
@@ -0,0 +1,38 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: XCOFF.hpp
+ Purpose: XCOFF for NewOS.
+
+ Revision History:
+
+ 04/07/24: Added file (amlel)
+
+------------------------------------------- */
+
+#ifndef __XCOFF__
+#define __XCOFF__
+
+#include <NewKit/Defines.hpp>
+
+#define kXCOFF64Magic 0x01F7
+
+#define kXCOFFRelFlg 0x0001
+#define kXCOFFExecutable 0x0002
+#define kXCOFFLnno 0x0004
+#define kXCOFFLSyms 0x0008
+
+/// @brief XCoff file header, meant for PowerPC programs.
+typedef struct XCoffFileHeader
+{
+ NewOS::UInt16 fMagic;
+ NewOS::UInt16 fTarget;
+ NewOS::UInt16 fNumSecs;
+ NewOS::UInt32 fTimeDat;
+ NewOS::UIntPtr fSymPtr;
+ NewOS::UInt32 fNumSyms;
+ NewOS::UInt16 fOptHdr; // ?: Number of bytes in optional header
+} XCoffFileHeader;
+
+#endif // ifndef __XCOFF__ \ No newline at end of file
diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
index 8b10503a..f9ebcbbc 100644
--- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
@@ -6,7 +6,7 @@
#include <BootKit/BootKit.hxx>
#include <KernelKit/MSDOS.hpp>
-#include <KernelKit/PE.hpp>
+#include <KernelKit/PE.hxx>
#include <NewKit/Ref.hpp>
#ifdef __x86_64__