summaryrefslogtreecommitdiffhomepage
path: root/Kernel
diff options
context:
space:
mode:
authorAmlal <amlal@zka.com>2024-07-18 09:43:27 +0200
committerAmlal <amlal@zka.com>2024-07-18 09:43:27 +0200
commit384300904e6cf9187e5e4c4d9a8fad740592cacb (patch)
treef0a0f196f32f5a224ca529ad7d4e99dd6a95586e /Kernel
parente9b8d8f68bdd79907feeed9e87572ba562c213e9 (diff)
[IMP] BootJump has been fixed, LoaderUtils API for CFKit. (Kernel's CoreFoundation like API)
[IMP] Add Write for UChar* types. (BTextWriter) Signed-off-by: Amlal <amlal@zka.com>
Diffstat (limited to 'Kernel')
-rw-r--r--Kernel/CFKit/LoaderUtils.hxx54
-rw-r--r--Kernel/FirmwareKit/Handover.hxx2
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx6
-rw-r--r--Kernel/HALKit/ARM64/HalKernelMain.cxx4
-rw-r--r--Kernel/KernelKit/MSDOS.hxx18
-rw-r--r--Kernel/KernelKit/PE.hxx24
-rw-r--r--Kernel/KernelKit/PEF.hxx (renamed from Kernel/KernelKit/PEF.hpp)8
-rw-r--r--Kernel/KernelKit/PEFCodeManager.hxx2
-rw-r--r--Kernel/KernelKit/PEFSharedObject.hxx2
-rw-r--r--Kernel/Sources/Main.cxx2
-rw-r--r--Kernel/Sources/PEFSharedObject.cxx2
-rw-r--r--Kernel/Sources/Storage/NVMEDeviceInterface.cxx2
-rw-r--r--Kernel/StorageKit/NVME.hxx (renamed from Kernel/StorageKit/NVME.hpp)0
-rw-r--r--Kernel/StorageKit/Storage.hpp2
14 files changed, 82 insertions, 46 deletions
diff --git a/Kernel/CFKit/LoaderUtils.hxx b/Kernel/CFKit/LoaderUtils.hxx
new file mode 100644
index 00000000..3edacc67
--- /dev/null
+++ b/Kernel/CFKit/LoaderUtils.hxx
@@ -0,0 +1,54 @@
+#ifndef __CFKIT_LOADER_UTILS_HXX__
+#define __CFKIT_LOADER_UTILS_HXX__
+
+#include <KernelKit/PE.hxx>
+#include <KernelKit/MSDOS.hxx>
+
+namespace Kernel
+{
+ /// @brief Find the PE header inside the blob.
+ inline auto ldr_find_exec_header(DosHeaderPtr ptrDos) -> ExecHeaderPtr
+ {
+ if (!ptrDos)
+ return nullptr;
+
+ if (ptrDos->eMagic[0] != kMagMz0)
+ return nullptr;
+
+ if (ptrDos->eMagic[1] != kMagMz1)
+ return nullptr;
+
+ return (ExecHeaderPtr)(VoidPtr)(&ptrDos->eLfanew + 1);
+ }
+
+ /// @brief Find the PE optional header inside the blob.
+ inline auto ldr_find_opt_exec_header(DosHeaderPtr ptrDos) -> ExecOptionalHeaderPtr
+ {
+ if (!ptrDos)
+ return nullptr;
+
+ auto exec = ldr_find_exec_header(ptrDos);
+
+ if (!exec)
+ return nullptr;
+
+ return (ExecOptionalHeaderPtr)(VoidPtr)(&exec->mCharacteristics + 1);
+ }
+
+ /// @brief Find the PE header inside the blob.
+ /// @note overloaded function.
+ inline auto ldr_find_exec_header(const Char* ptrDos) -> ExecHeaderPtr
+ {
+ return ldr_find_exec_header((DosHeaderPtr)ptrDos);
+ }
+
+
+ /// @brief Find the PE header inside the blob.
+ /// @note overloaded function.
+ inline auto ldr_find_opt_exec_header(const Char* ptrDos) -> ExecOptionalHeaderPtr
+ {
+ return ldr_find_opt_exec_header((DosHeaderPtr)ptrDos);
+ }
+} // namespace Kernel
+
+#endif // ifndef __CFKIT_LOADER_UTILS_HXX__
diff --git a/Kernel/FirmwareKit/Handover.hxx b/Kernel/FirmwareKit/Handover.hxx
index d6c3a1a2..01f2be2c 100644
--- a/Kernel/FirmwareKit/Handover.hxx
+++ b/Kernel/FirmwareKit/Handover.hxx
@@ -76,7 +76,7 @@ it tells us more about it and IS format independent.
struct
{
VoidPtr f_SmBios;
- VoidPtr f_RsdPtr;
+ VoidPtr f_VendorPtr;
} f_HardwareTables;
struct
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 9c7f571e..ad031b8b 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -196,12 +196,12 @@ EXTERN_C void hal_init_platform(
};
kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
- Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
acpi.Reboot();
};
kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
- Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
acpi.Shutdown();
};
@@ -229,7 +229,7 @@ EXTERN_C void hal_init_platform(
cAutoFormatDisk.GetKey() = strAutoMount;
cAutoFormatDisk.GetValue() = Yes;
- Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::HAL::hal_system_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
mInitKernel(KeMain());
}
diff --git a/Kernel/HALKit/ARM64/HalKernelMain.cxx b/Kernel/HALKit/ARM64/HalKernelMain.cxx
index 5e66a3d8..a2d215f6 100644
--- a/Kernel/HALKit/ARM64/HalKernelMain.cxx
+++ b/Kernel/HALKit/ARM64/HalKernelMain.cxx
@@ -154,12 +154,12 @@ EXTERN_C void hal_init_platform(
};
kSyscalls[cRebootInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
- Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
acpi.Reboot();
};
kSyscalls[cShutdownInterrupt].Leak().Leak()->fProc = [](Kernel::VoidPtr rdx) -> void {
- Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_RsdPtr);
+ Kernel::ACPIFactoryInterface acpi(kHandoverHeader->f_HardwareTables.f_VendorPtr);
acpi.Shutdown();
};
diff --git a/Kernel/KernelKit/MSDOS.hxx b/Kernel/KernelKit/MSDOS.hxx
index a7da9e86..62fc1c64 100644
--- a/Kernel/KernelKit/MSDOS.hxx
+++ b/Kernel/KernelKit/MSDOS.hxx
@@ -49,22 +49,4 @@ typedef struct _DosHeader
DosLong eLfanew;
} DosHeader, *DosHeaderPtr;
-namespace Kernel
-{
- /// @brief Find the PE header inside the the blob.
- inline auto rt_find_exec_header(DosHeaderPtr ptrDos) -> VoidPtr
- {
- if (!ptrDos)
- return nullptr;
-
- if (ptrDos->eMagic[0] != kMagMz0)
- return nullptr;
-
- if (ptrDos->eMagic[1] != kMagMz1)
- return nullptr;
-
- return (VoidPtr)(&ptrDos->eLfanew + 1);
- }
-} // namespace Kernel
-
#endif /* ifndef __MSDOS_EXEC__ */
diff --git a/Kernel/KernelKit/PE.hxx b/Kernel/KernelKit/PE.hxx
index d494c5aa..debd6aba 100644
--- a/Kernel/KernelKit/PE.hxx
+++ b/Kernel/KernelKit/PE.hxx
@@ -11,13 +11,19 @@
------------------------------------------- */
-#ifndef __PE__
-#define __PE__
+#ifndef __KERNELKIT_INC_PE_HXX__
+#define __KERNELKIT_INC_PE_HXX__
#include <NewKit/Defines.hpp>
#define kPeMagic 0x00004550
+#define kMagPE32 0x010b
+#define kMagPE64 0x020b
+
+#define kPEMachineAMD64 0x8664
+#define kPEMachineARM64 0xaa64
+
typedef struct ExecHeader final
{
Kernel::UInt32 mMagic; // PE\0\0 or 0x00004550
@@ -30,12 +36,6 @@ typedef struct ExecHeader final
Kernel::UInt16 mCharacteristics;
} PACKED ExecHeader, *ExecHeaderPtr;
-#define kMagPE32 0x010b
-#define kMagPE64 0x020b
-
-#define kPEMachineAMD64 0x8664
-#define kPEMachineARM64 0xaa64
-
typedef struct ExecOptionalHeader final
{
Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
@@ -71,17 +71,17 @@ typedef struct ExecOptionalHeader final
typedef struct ExecSectionHeader final
{
- CONST Kernel::UChar mName[8];
+ Kernel::UChar mName[8];
Kernel::UInt32 mVirtualSize;
Kernel::UInt32 mVirtualAddress;
Kernel::UInt32 mSizeOfRawData;
Kernel::UInt32 mPointerToRawData;
Kernel::UInt32 mPointerToRelocations;
- Kernel::UInt32 mPointerToLinenumbers;
+ Kernel::UInt32 mPointerToLineNumbers;
Kernel::UInt16 mNumberOfRelocations;
Kernel::UInt16 mNumberOfLinenumbers;
Kernel::UInt32 mCharacteristics;
-} PACKED ExecSectionHeader, *ExecSectionHeaderPtr;
+} ExecSectionHeader, *ExecSectionHeaderPtr;
enum kExecDataDirParams
{
@@ -120,4 +120,4 @@ typedef struct ExecImportDirectory
#define kPeStart "__ImageStart"
-#endif /* ifndef __PE__ */
+#endif /* ifndef __KERNELKIT_INC_PE_HXX__ */
diff --git a/Kernel/KernelKit/PEF.hpp b/Kernel/KernelKit/PEF.hxx
index da8d7aa0..c3b1b94b 100644
--- a/Kernel/KernelKit/PEF.hpp
+++ b/Kernel/KernelKit/PEF.hxx
@@ -2,7 +2,7 @@
Copyright ZKA Technologies
- File: PEF.hpp
+ File: PEF.hxx
Purpose: Preferred Executable Format for Kernel.
Revision History:
@@ -11,8 +11,8 @@
------------------------------------------- */
-#ifndef __INC_PEF_HPP__
-#define __INC_PEF_HPP__
+#ifndef __KERNELKIT_INC_PEF_HXX__
+#define __KERNELKIT_INC_PEF_HXX__
#include <CompilerKit/CompilerKit.hxx>
#include <KernelKit/LoaderInterface.hpp>
@@ -110,4 +110,4 @@ namespace Kernel
#define kPefForkKind kPefMagic
#define kPefForkKindFAT kPefMagicFat
-#endif /* ifndef __INC_PEF_HPP__ */
+#endif /* ifndef __KERNELKIT_INC_PEF_HXX__ */
diff --git a/Kernel/KernelKit/PEFCodeManager.hxx b/Kernel/KernelKit/PEFCodeManager.hxx
index 79c9d0ab..5e48331a 100644
--- a/Kernel/KernelKit/PEFCodeManager.hxx
+++ b/Kernel/KernelKit/PEFCodeManager.hxx
@@ -7,7 +7,7 @@
#ifndef _INC_CODE_MANAGER_PEF_HXX_
#define _INC_CODE_MANAGER_PEF_HXX_
-#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEF.hxx>
#include <NewKit/ErrorOr.hpp>
#include <NewKit/String.hpp>
#include <KernelKit/FileManager.hpp>
diff --git a/Kernel/KernelKit/PEFSharedObject.hxx b/Kernel/KernelKit/PEFSharedObject.hxx
index a583ad70..f8119971 100644
--- a/Kernel/KernelKit/PEFSharedObject.hxx
+++ b/Kernel/KernelKit/PEFSharedObject.hxx
@@ -11,7 +11,7 @@
#define __KERNELKIT_SHARED_OBJECT_HXX__
#include <KernelKit/LoaderInterface.hpp>
-#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEF.hxx>
#include <KernelKit/PEFCodeManager.hxx>
#include <NewKit/Defines.hpp>
diff --git a/Kernel/Sources/Main.cxx b/Kernel/Sources/Main.cxx
index b4751110..92dac251 100644
--- a/Kernel/Sources/Main.cxx
+++ b/Kernel/Sources/Main.cxx
@@ -14,7 +14,7 @@
#include <KernelKit/FileManager.hpp>
#include <KernelKit/Framebuffer.hpp>
#include <KernelKit/Heap.hxx>
-#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEF.hxx>
#include <KernelKit/PEFCodeManager.hxx>
#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/ProcessHeap.hxx>
diff --git a/Kernel/Sources/PEFSharedObject.cxx b/Kernel/Sources/PEFSharedObject.cxx
index e131f7ce..a5928f1b 100644
--- a/Kernel/Sources/PEFSharedObject.cxx
+++ b/Kernel/Sources/PEFSharedObject.cxx
@@ -8,7 +8,7 @@
*/
#include <KernelKit/DebugOutput.hpp>
-#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEF.hxx>
#include <KernelKit/PEFSharedObject.hxx>
#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/ThreadLocalStorage.hxx>
diff --git a/Kernel/Sources/Storage/NVMEDeviceInterface.cxx b/Kernel/Sources/Storage/NVMEDeviceInterface.cxx
index e1d4ed30..f4f0f667 100644
--- a/Kernel/Sources/Storage/NVMEDeviceInterface.cxx
+++ b/Kernel/Sources/Storage/NVMEDeviceInterface.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <StorageKit/NVME.hpp>
+#include <StorageKit/NVME.hxx>
namespace Kernel
{
diff --git a/Kernel/StorageKit/NVME.hpp b/Kernel/StorageKit/NVME.hxx
index f1601149..f1601149 100644
--- a/Kernel/StorageKit/NVME.hpp
+++ b/Kernel/StorageKit/NVME.hxx
diff --git a/Kernel/StorageKit/Storage.hpp b/Kernel/StorageKit/Storage.hpp
index 4c38d89d..981463ab 100644
--- a/Kernel/StorageKit/Storage.hpp
+++ b/Kernel/StorageKit/Storage.hpp
@@ -7,7 +7,7 @@
#pragma once
#include <NewKit/Defines.hpp>
-#include <StorageKit/NVME.hpp>
+#include <StorageKit/NVME.hxx>
#include <StorageKit/AHCI.hpp>
#include <StorageKit/SCSI.hxx>