summaryrefslogtreecommitdiffhomepage
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
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>
-rw-r--r--Boot/BootKit/BootKit.hxx1
-rw-r--r--Boot/BootKit/ProgramLoader.hxx3
-rw-r--r--Boot/Sources/HEL/AMD64/BootJump.S11
-rw-r--r--Boot/Sources/HEL/AMD64/BootMain.cxx14
-rw-r--r--Boot/Sources/HEL/AMD64/BootTextWriter.cxx30
-rw-r--r--Boot/Sources/ProgramLoader.cxx49
-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
-rw-r--r--newoskrnl.files4
21 files changed, 171 insertions, 69 deletions
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx
index 16f81696..1b93bd30 100644
--- a/Boot/BootKit/BootKit.hxx
+++ b/Boot/BootKit/BootKit.hxx
@@ -66,6 +66,7 @@ public:
BTextWriter& Write(const Char* str);
BTextWriter& Write(const CharacterTypeUTF16* str);
BTextWriter& WriteCharacter(CharacterTypeUTF16 c);
+ BTextWriter& Write(const UChar* str);
public:
explicit BTextWriter() = default;
diff --git a/Boot/BootKit/ProgramLoader.hxx b/Boot/BootKit/ProgramLoader.hxx
index 6f789d37..90f8996f 100644
--- a/Boot/BootKit/ProgramLoader.hxx
+++ b/Boot/BootKit/ProgramLoader.hxx
@@ -35,7 +35,8 @@ namespace Boot
private:
Char fBlobName[255];
+ Char* fStackPtr{nullptr};
VoidPtr fStartAddress{nullptr};
VoidPtr fBlob{nullptr};
};
-} // namespace Boot \ No newline at end of file
+} // namespace Boot
diff --git a/Boot/Sources/HEL/AMD64/BootJump.S b/Boot/Sources/HEL/AMD64/BootJump.S
index e807ab52..fc7b3c68 100644
--- a/Boot/Sources/HEL/AMD64/BootJump.S
+++ b/Boot/Sources/HEL/AMD64/BootJump.S
@@ -8,11 +8,12 @@
@brief this function setups a stack and then jumps to
a function */
rt_jump_to_address:
- mov rdx, rsp
- mov rdi, rcx
- mov rdx, rbp
+ mov r8, rsp
+
push rax
- mov r8, rcx
- call rdi
+ push rdx
+ jmp rcx
+ pop rdx
pop rax
+
ret
diff --git a/Boot/Sources/HEL/AMD64/BootMain.cxx b/Boot/Sources/HEL/AMD64/BootMain.cxx
index 51f8e8cf..8946aadc 100644
--- a/Boot/Sources/HEL/AMD64/BootMain.cxx
+++ b/Boot/Sources/HEL/AMD64/BootMain.cxx
@@ -13,7 +13,7 @@
#include <FirmwareKit/Handover.hxx>
#include <KernelKit/MSDOS.hxx>
#include <KernelKit/PE.hxx>
-#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEF.hxx>
#include <NewKit/Macros.hpp>
#include <NewKit/Ref.hpp>
#include <BootKit/ProgramLoader.hxx>
@@ -121,8 +121,8 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
vendorTable[4] == 'P' && vendorTable[5] == 'T' &&
vendorTable[6] == 'R' && vendorTable[7] == ' ')
{
- writer.Write(L"newosldr: filling rsdptr...\r");
- handoverHdrPtr->f_HardwareTables.f_RsdPtr = (VoidPtr)vendorTable;
+ writer.Write(L"newosldr: Filling rsdptr...\r");
+ handoverHdrPtr->f_HardwareTables.f_VendorPtr = (VoidPtr)vendorTable;
break;
}
@@ -149,8 +149,8 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
kHandoverHeader = handoverHdrPtr;
- // check if we are in AMD64
-#if defined(__NEWOS_AMD64__)
+ // check if we are running in the PC platform. If so abort.
+#if defined(__NEWOS_AMD64__) && !defined(__DEBUG__)
writer.Write(L"\rnewosldr: AMD64 support is not official.\r");
EFI::ThrowError(L"Beta-Software", L"Beta Software.");
#endif
@@ -244,10 +244,10 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
#ifdef __NEWOS_OTA__
if (loader)
loader->Start(handoverHdrPtr);
+#else
+ hal_init_platform(handoverHdrPtr);
#endif // ifdef __NEWOS_OTA__
- hal_init_platform(handoverHdrPtr);
-
EFI::Stop();
CANT_REACH();
diff --git a/Boot/Sources/HEL/AMD64/BootTextWriter.cxx b/Boot/Sources/HEL/AMD64/BootTextWriter.cxx
index 18f32bd8..7b0ab50c 100644
--- a/Boot/Sources/HEL/AMD64/BootTextWriter.cxx
+++ b/Boot/Sources/HEL/AMD64/BootTextWriter.cxx
@@ -85,6 +85,36 @@ BTextWriter& BTextWriter::Write(const Char* str)
return *this;
}
+BTextWriter& BTextWriter::Write(const UChar* str)
+{
+#ifdef __DEBUG__
+ if (!str || *str == 0)
+ return *this;
+
+ CharacterTypeUTF16 strTmp[2];
+ strTmp[1] = 0;
+
+ for (size_t i = 0; str[i] != 0; i++)
+ {
+ if (str[i] == '\r')
+ {
+ strTmp[0] = str[i];
+ ST->ConOut->OutputString(ST->ConOut, strTmp);
+
+ strTmp[0] = '\n';
+ ST->ConOut->OutputString(ST->ConOut, strTmp);
+ }
+ else
+ {
+ strTmp[0] = str[i];
+ ST->ConOut->OutputString(ST->ConOut, strTmp);
+ }
+ }
+#endif // ifdef __DEBUG__
+
+ return *this;
+}
+
/**
@brief putc wrapper over EFI ConOut.
*/
diff --git a/Boot/Sources/ProgramLoader.cxx b/Boot/Sources/ProgramLoader.cxx
index 88e2f14a..5938c2a0 100644
--- a/Boot/Sources/ProgramLoader.cxx
+++ b/Boot/Sources/ProgramLoader.cxx
@@ -8,7 +8,10 @@
#include <BootKit/Support.hxx>
#include <BootKit/BootKit.hxx>
-#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEF.hxx>
+#include <KernelKit/PE.hxx>
+#include <KernelKit/MSDOS.hxx>
+#include <CFKit/LoaderUtils.hxx>
EXTERN_C
{
@@ -17,6 +20,8 @@ EXTERN_C
namespace Boot
{
+ EXTERN_C Int32 rt_jump_to_address(HEL::HandoverProc baseCode, HEL::HandoverInformationHeader* handover, Char* stackPointer);
+
ProgramLoader::ProgramLoader(VoidPtr blob)
: fBlob(blob), fStartAddress(nullptr)
{
@@ -34,9 +39,21 @@ namespace Boot
if (firstBytes[0] == kMagMz0 &&
firstBytes[1] == kMagMz1)
{
+ writer.Write("newosldr: MZ executable detected.\r");
+
+ ExecHeaderPtr hdrPtr = (ldr_find_exec_header(firstBytes));
+ ExecOptionalHeaderPtr optHdr = (ldr_find_opt_exec_header(firstBytes));
+
// Parse PE32+
- fStartAddress = nullptr;
- writer.Write("newosldr: MZ executable detected.\r");
+ fStartAddress = (VoidPtr)((UIntPtr)optHdr->mImageBase + optHdr->mBaseOfCode + optHdr->mAddressOfEntryPoint);
+ fStackPtr = new Char[optHdr->mSizeOfStackReserve];
+
+ writer.Write("newosldr: Major Linker: ").Write(optHdr->mMajorLinkerVersion).Write("\r");
+ writer.Write("newosldr: Minor Linker: ").Write(optHdr->mMinorLinkerVersion).Write("\r");
+ writer.Write("newosldr: Major Subsystem: ").Write(optHdr->mMajorSubsystemVersion).Write("\r");
+ writer.Write("newosldr: Minor Subsystem: ").Write(optHdr->mMinorSubsystemVersion).Write("\r");
+ writer.Write("newosldr: Magic: ").Write(optHdr->mMagic).Write("\r");
+ writer.Write("newosldr: StartAddress: ").Write((UIntPtr)optHdr->mImageBase + optHdr->mBaseOfCode + optHdr->mAddressOfEntryPoint).Write("\r");
}
else if (firstBytes[0] == kPefMagic[0] &&
firstBytes[1] == kPefMagic[1] &&
@@ -56,18 +73,34 @@ namespace Boot
/// @note handover header has to be valid!
Void ProgramLoader::Start(HEL::HandoverInformationHeader* handover)
{
- MUST_PASS(handover);
+ BTextWriter writer;
+
+ if (!handover)
+ {
+ writer.Write("newosldr: Exec format error.\r");
+ return;
+ }
- BTextWriter writer;
writer.Write("newosldr: Trying to run: ").Write(fBlobName).Write("\r");
- if (!fStartAddress)
+ if (!fStartAddress ||
+ ((Char*)fStartAddress)[0] == 0x0)
{
- writer.Write("newosldr: Exec format error.\r");
+ HEL::HandoverProc fn = [](HEL::HandoverInformationHeader* rcx) -> void {
+ BTextWriter writer;
+ writer.Write("newosldr: Exec format error, Thread has been aborted.\r");
+
+ EFI::ThrowError(L"Exec-Format-Error", L"Format doesn't match (Thread aborted.)");
+ };
+
+ rt_jump_to_address(fn, handover, fStackPtr);
+
return;
}
- ((HEL::HandoverProc)fStartAddress)(handover);
+ HEL::HandoverProc start = reinterpret_cast<HEL::HandoverProc>((UIntPtr)fStartAddress);
+
+ rt_jump_to_address(start, handover, fStackPtr);
}
const Char* ProgramLoader::GetName()
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>
diff --git a/newoskrnl.files b/newoskrnl.files
index 92e48082..43039950 100644
--- a/newoskrnl.files
+++ b/newoskrnl.files
@@ -171,7 +171,7 @@ Kernel/KernelKit/PCI/Iterator.hpp
Kernel/KernelKit/PCI/PCI.hpp
Kernel/KernelKit/PE.hxx
Kernel/KernelKit/PECodeManager.hxx
-Kernel/KernelKit/PEF.hpp
+Kernel/KernelKit/PEF.hxx
Kernel/KernelKit/PEFCodeManager.hxx
Kernel/KernelKit/PEFSharedObject.hxx
Kernel/KernelKit/PermissionSelector.hxx
@@ -300,7 +300,7 @@ Kernel/Sources/Variant.cxx
Kernel/Sources/compile_flags.txt
Kernel/StorageKit/AHCI.hpp
Kernel/StorageKit/ATA.hpp
-Kernel/StorageKit/NVME.hpp
+Kernel/StorageKit/NVME.hxx
Kernel/StorageKit/PRDT.hpp
Kernel/StorageKit/SCSI.hxx
Kernel/StorageKit/Storage.hpp