summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Private/HALKit/AMD64/CPUID.hxx78
-rw-r--r--Private/HALKit/AMD64/CoreInterruptHandlerAMD64.cpp11
-rw-r--r--Private/HALKit/AMD64/CoreSyscallHandlerAMD64.cpp2
-rw-r--r--Private/HALKit/AMD64/HalHardwareInit.cpp15
-rw-r--r--Private/HALKit/AMD64/HalInterruptRouting.asm114
-rw-r--r--Private/HALKit/AMD64/Processor.hpp3
-rw-r--r--Private/HALKit/AMD64/SMPCoreManager.asm20
-rw-r--r--Private/KernelKit/CodeManager.hpp76
-rw-r--r--Private/KernelKit/DriveManager.hpp5
-rw-r--r--Private/KernelKit/PE.hpp49
-rw-r--r--Private/KernelKit/PEF.hpp2
-rw-r--r--Private/KernelKit/PEFCodeManager.hxx72
-rw-r--r--Private/KernelKit/PEFSharedObject.hxx (renamed from Private/KernelKit/SharedObjectCore.hxx)16
-rw-r--r--Private/Source/PEFCodeManager.cxx (renamed from Private/Source/CodeManager.cxx)0
-rw-r--r--Private/Source/PEFSharedObjectMain.cxx (renamed from Private/Source/SharedObjectEntry.cxx)2
-rw-r--r--Private/makefile1
16 files changed, 381 insertions, 85 deletions
diff --git a/Private/HALKit/AMD64/CPUID.hxx b/Private/HALKit/AMD64/CPUID.hxx
new file mode 100644
index 00000000..16e73eb6
--- /dev/null
+++ b/Private/HALKit/AMD64/CPUID.hxx
@@ -0,0 +1,78 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+ File: CPUID.hpp
+ Purpose: CPUID flags.
+
+ Revision History:
+
+ 30/01/24: Added file (amlel)
+
+------------------------------------------- */
+
+#pragma once
+
+typedef enum {
+ CPU_FEATURE_ECX_SSE3 = 1 << 0,
+ CPU_FEATURE_ECX_PCLMUL = 1 << 1,
+ CPU_FEATURE_ECX_DTES64 = 1 << 2,
+ CPU_FEATURE_ECX_MONITOR = 1 << 3,
+ CPU_FEATURE_ECX_DS_CPL = 1 << 4,
+ CPU_FEATURE_ECX_VMX = 1 << 5,
+ CPU_FEATURE_ECX_SMX = 1 << 6,
+ CPU_FEATURE_ECX_EST = 1 << 7,
+ CPU_FEATURE_ECX_TM2 = 1 << 8,
+ CPU_FEATURE_ECX_SSSE3 = 1 << 9,
+ CPU_FEATURE_ECX_CID = 1 << 10,
+ CPU_FEATURE_ECX_SDBG = 1 << 11,
+ CPU_FEATURE_ECX_FMA = 1 << 12,
+ CPU_FEATURE_ECX_CX16 = 1 << 13,
+ CPU_FEATURE_ECX_XTPR = 1 << 14,
+ CPU_FEATURE_ECX_PDCM = 1 << 15,
+ CPU_FEATURE_ECX_PCID = 1 << 17,
+ CPU_FEATURE_ECX_DCA = 1 << 18,
+ CPU_FEATURE_ECX_SSE4_1 = 1 << 19,
+ CPU_FEATURE_ECX_SSE4_2 = 1 << 20,
+ CPU_FEATURE_ECX_X2APIC = 1 << 21,
+ CPU_FEATURE_ECX_MOVBE = 1 << 22,
+ CPU_FEATURE_ECX_POP3C = 1 << 23,
+ CPU_FEATURE_ECX_TSC = 1 << 24,
+ CPU_FEATURE_ECX_AES = 1 << 25,
+ CPU_FEATURE_ECX_XSAVE = 1 << 26,
+ CPU_FEATURE_ECX_OSXSAVE = 1 << 27,
+ CPU_FEATURE_ECX_AVX = 1 << 28,
+ CPU_FEATURE_ECX_F16C = 1 << 29,
+ CPU_FEATURE_ECX_RDRAND = 1 << 30,
+ CPU_FEATURE_ECX_HYPERVISOR = 1 << 31,
+ CPU_FEATURE_EDX_FPU = 1 << 0,
+ CPU_FEATURE_EDX_VME = 1 << 1,
+ CPU_FEATURE_EDX_DE = 1 << 2,
+ CPU_FEATURE_EDX_PSE = 1 << 3,
+ CPU_FEATURE_EDX_TSC = 1 << 4,
+ CPU_FEATURE_EDX_MSR = 1 << 5,
+ CPU_FEATURE_EDX_PAE = 1 << 6,
+ CPU_FEATURE_EDX_MCE = 1 << 7,
+ CPU_FEATURE_EDX_CX8 = 1 << 8,
+ CPU_FEATURE_EDX_APIC = 1 << 9,
+ CPU_FEATURE_EDX_SEP = 1 << 11,
+ CPU_FEATURE_EDX_MTRR = 1 << 12,
+ CPU_FEATURE_EDX_PGE = 1 << 13,
+ CPU_FEATURE_EDX_MCA = 1 << 14,
+ CPU_FEATURE_EDX_CMOV = 1 << 15,
+ CPU_FEATURE_EDX_PAT = 1 << 16,
+ CPU_FEATURE_EDX_PSE36 = 1 << 17,
+ CPU_FEATURE_EDX_PSN = 1 << 18,
+ CPU_FEATURE_EDX_CLFLUSH = 1 << 19,
+ CPU_FEATURE_EDX_DS = 1 << 21,
+ CPU_FEATURE_EDX_ACPI = 1 << 22,
+ CPU_FEATURE_EDX_MMX = 1 << 23,
+ CPU_FEATURE_EDX_FXSR = 1 << 24,
+ CPU_FEATURE_EDX_SSE = 1 << 25,
+ CPU_FEATURE_EDX_SSE2 = 1 << 26,
+ CPU_FEATURE_EDX_SS = 1 << 27,
+ CPU_FEATURE_EDX_HTT = 1 << 28,
+ CPU_FEATURE_EDX_TM = 1 << 29,
+ CPU_FEATURE_EDX_IA64 = 1 << 30,
+ CPU_FEATURE_EDX_PBE = 1 << 31
+} CPU_FEATURE;
diff --git a/Private/HALKit/AMD64/CoreInterruptHandlerAMD64.cpp b/Private/HALKit/AMD64/CoreInterruptHandlerAMD64.cpp
index e49e9c1e..8399d9ce 100644
--- a/Private/HALKit/AMD64/CoreInterruptHandlerAMD64.cpp
+++ b/Private/HALKit/AMD64/CoreInterruptHandlerAMD64.cpp
@@ -16,7 +16,7 @@ extern "C" void idt_handle_system_call(HCore::UIntPtr rsp) {
rt_syscall_handle(sf);
HCore::kcout << "System Call with ID: "
- << HCore::StringBuilder::FromInt("syscall{%}", sf->SID);
+ << HCore::StringBuilder::FromInt("syscall{%}", sf->R15);
}
extern "C" void idt_handle_gpf(HCore::UIntPtr rsp) {
@@ -79,3 +79,12 @@ extern "C" void idt_handle_generic(HCore::UIntPtr rsp) {
HCore::ProcessManager::Shared().Leak().GetCurrent().Leak().Crash();
}
+
+extern "C" HCore::UIntPtr rt_handle_interrupts(HCore::UIntPtr &rsp) {
+ HCore::HAL::rt_cli();
+
+ HCore::HAL::StackFramePtr sf = (HCore::HAL::StackFramePtr)rsp;
+
+ HCore::HAL::rt_sti();
+ return rsp;
+}
diff --git a/Private/HALKit/AMD64/CoreSyscallHandlerAMD64.cpp b/Private/HALKit/AMD64/CoreSyscallHandlerAMD64.cpp
index 119fe1b5..b41b8285 100644
--- a/Private/HALKit/AMD64/CoreSyscallHandlerAMD64.cpp
+++ b/Private/HALKit/AMD64/CoreSyscallHandlerAMD64.cpp
@@ -18,6 +18,6 @@ HCore::Array<void (*)(HCore::Int32 id, HCore::HAL::StackFrame *), kMaxSyscalls>
// NOTE: don't trust the user.
extern "C" void rt_syscall_handle(HCore::HAL::StackFrame *stack) {
for (HCore::SizeT index = 0UL; index < kMaxSyscalls; ++index) {
- (kSyscalls[index].Leak().Leak())(stack->SID, stack);
+ (kSyscalls[index].Leak().Leak())(stack->R15, stack);
}
}
diff --git a/Private/HALKit/AMD64/HalHardwareInit.cpp b/Private/HALKit/AMD64/HalHardwareInit.cpp
index b509b284..bc002e3d 100644
--- a/Private/HALKit/AMD64/HalHardwareInit.cpp
+++ b/Private/HALKit/AMD64/HalHardwareInit.cpp
@@ -11,9 +11,22 @@
// bugs = 0
+extern "C" HCore::VoidPtr __EXEC_IVT;
+
+static HCore::HAL::Register64* kIdtRegister;
+static HCore::HAL::Register64* kGdtRegister;
+
namespace HCore {
bool ke_init_hal() {
- // TODO: Hardware Specific stuff.
+ kIdtRegister = nullptr;
+ kGdtRegister = nullptr;
+
+ kIdtRegister = new HCore::HAL::Register64();
+ kIdtRegister->Base = (UIntPtr)__EXEC_IVT;
+ kIdtRegister->Limit = sizeof(HAL::Register64) * 256;
+
+ HAL::IDTLoader idt;
+ idt.Load(*kIdtRegister);
return true;
}
diff --git a/Private/HALKit/AMD64/HalInterruptRouting.asm b/Private/HALKit/AMD64/HalInterruptRouting.asm
index 417f9f59..36be9de4 100644
--- a/Private/HALKit/AMD64/HalInterruptRouting.asm
+++ b/Private/HALKit/AMD64/HalInterruptRouting.asm
@@ -10,3 +10,117 @@
;; */
[bits 64]
+
+%macro IntDecl 1
+ dq HCoreInterrupt%1
+%endmacro
+
+%macro IntExp 1
+HCoreInterrupt%1:
+ push %1
+ jmp ke_handle_irq
+%endmacro
+
+%macro IntNormal 1
+HCoreInterrupt%1:
+ push 0
+ push %1
+ jmp ke_handle_irq
+%endmacro
+
+; This file handles the core interrupt table
+; Last edited 31/01/24
+
+extern rt_handle_interrupts
+global rt_install_idt
+global __EXEC_IVT
+
+section .text
+
+ke_handle_irq:
+ cld
+
+ push rax
+ push rbx
+ push rcx
+ push rdx
+ push rsi
+ push rdi
+ push rbp
+ push r8
+ push r9
+ push r10
+ push r11
+ push r12
+ push r13
+ push r14
+ push r15
+
+ mov rdi, rsp
+ call rt_handle_interrupts
+
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop r11
+ pop r10
+ pop r9
+ pop r8
+ pop rbp
+ pop rdi
+ pop rsi
+ pop rdx
+ pop rcx
+ pop rbx
+ pop rax
+
+ ret
+
+section .data
+
+ IntNormal 0
+ IntNormal 1
+ IntNormal 2
+ IntNormal 3
+ IntNormal 4
+ IntNormal 5
+ IntNormal 6
+ IntNormal 7
+ IntExp 8
+ IntNormal 9
+ IntExp 10
+ IntExp 11
+ IntExp 12
+ IntExp 13
+ IntExp 14
+ IntNormal 15
+ IntNormal 16
+ IntExp 17
+ IntNormal 18
+ IntNormal 19
+ IntNormal 20
+ IntNormal 21
+ IntNormal 22
+ IntNormal 23
+ IntNormal 24
+ IntNormal 25
+ IntNormal 26
+ IntNormal 27
+ IntNormal 28
+ IntNormal 29
+ IntExp 30
+ IntNormal 31
+
+ %assign i 32
+ %rep 224
+ IntNormal i
+ %assign i i+1
+ %endrep
+
+__EXEC_IVT:
+ %assign i 0
+ %rep 256
+ IntDecl i
+ %assign i i+1
+ %endrep
diff --git a/Private/HALKit/AMD64/Processor.hpp b/Private/HALKit/AMD64/Processor.hpp
index 5d841e32..9b73216b 100644
--- a/Private/HALKit/AMD64/Processor.hpp
+++ b/Private/HALKit/AMD64/Processor.hpp
@@ -62,8 +62,7 @@ struct __attribute__((packed)) StackFrame {
Reg R12;
Reg R13;
Reg R14;
- Reg R15; // Reserved: Multi Processor manager (Hal)
- Reg SID; // Reserved: system call id (Hal)
+ Reg R15;
};
typedef StackFrame *StackFramePtr;
diff --git a/Private/HALKit/AMD64/SMPCoreManager.asm b/Private/HALKit/AMD64/SMPCoreManager.asm
index 2560df98..de7d8356 100644
--- a/Private/HALKit/AMD64/SMPCoreManager.asm
+++ b/Private/HALKit/AMD64/SMPCoreManager.asm
@@ -10,16 +10,22 @@
[bits 64]
[global rt_do_context_switch]
-[extern rt_debug_fence]
rt_do_context_switch:
- mov rsi, [rt_do_context_switch_unprotected]
- call rt_debug_fence
-
- iret
-
-rt_do_context_switch_unprotected:
mov [rdi+0], rax
mov [rdi+8], rbx
mov [rdi+16], rcx
+ mov [rdi+24], rdx
+ mov [rdi+32], rsi
+ mov [rdi+40], rdi
+ mov [rdi+48], rbp
+ mov [rdi+56], rsp
+ mov [rdi+64], r8
+ mov [rdi+72], r9
+ mov [rdi+80], r10
+ mov [rdi+88], r11
+ mov [rdi+96], r12
+ mov [rdi+104], r13
+ mov [rdi+112], r14
+ mov [rdi+120], r15
ret
diff --git a/Private/KernelKit/CodeManager.hpp b/Private/KernelKit/CodeManager.hpp
index afb1a33e..fcb0d46b 100644
--- a/Private/KernelKit/CodeManager.hpp
+++ b/Private/KernelKit/CodeManager.hpp
@@ -1,72 +1,18 @@
-/*
- * ========================================================
- *
- * HCore
- * Copyright Mahrouss Logic, all rights reserved.
- *
- * ========================================================
- */
+/* -------------------------------------------
-#ifndef _INC_CODE_MANAGER_
-#define _INC_CODE_MANAGER_
+ Copyright Mahrouss Logic
-#include <KernelKit/PEF.hpp>
-#include <NewKit/ErrorOr.hpp>
-#include <NewKit/String.hpp>
+ File: CodeManager.hpp
+ Purpose: Code Manager and Shared Objects.
-#include "NewKit/Defines.hpp"
+ Revision History:
-namespace HCore {
-///
-/// \name PEFLoader
-/// \brief PEF loader class.
-///
-class PEFLoader : public Loader {
- private:
- explicit PEFLoader() = delete;
+ 30/01/24: Added file (amlel)
- public:
- explicit PEFLoader(const VoidPtr blob);
- explicit PEFLoader(const char *path);
- ~PEFLoader() override;
+------------------------------------------- */
- public:
- HCORE_COPY_DEFAULT(PEFLoader);
+#pragma once
- public:
- typedef void (*MainKind)(void);
-
- public:
- const char *Path() override;
- const char *Format() override;
- const char *MIME() override;
-
- public:
- ErrorOr<VoidPtr> LoadStart() override;
- VoidPtr FindSymbol(const char *name, Int32 kind) override;
-
- public:
- bool IsLoaded() noexcept;
-
- private:
- Ref<StringView> fPath;
- VoidPtr fCachedBlob;
- bool fBad;
-};
-
-namespace Utils {
-/// \brief Much like Mac OS's UPP.
-/// This is read-only by design.
-/// It handles different kind of code.
-/// ARM <-> AMD64 for example.
-typedef struct UniversalProcedureTable final {
- const Char NAME[kPefNameLen];
- const VoidPtr TRAP;
- const SizeT ARCH;
-} __attribute__((packed)) UniversalProcedureTableType;
-
-bool execute_from_image(PEFLoader &exec) noexcept;
-} // namespace Utils
-} // namespace HCore
-
-#endif // ifndef _INC_CODE_MANAGER_
+#include <KernelKit/PEFCodeManager.hxx>
+// #include <KernelKit/PECodeManager.hpp>
+#include <KernelKit/PEFSharedObject.hxx>
diff --git a/Private/KernelKit/DriveManager.hpp b/Private/KernelKit/DriveManager.hpp
index 3c960d07..da478a45 100644
--- a/Private/KernelKit/DriveManager.hpp
+++ b/Private/KernelKit/DriveManager.hpp
@@ -7,7 +7,8 @@
* ========================================================
*/
-#pragma once
+#ifndef __DRIVE_MANAGER__
+#define __DRIVE_MANAGER__
#include <CompilerKit/CompilerKit.hpp>
#include <KernelKit/Device.hpp>
@@ -78,3 +79,5 @@ class DriveSelector final {
DriveTraits *fDrive;
};
} // namespace HCore
+
+#endif /* ifndef __DRIVE_MANAGER__ */
diff --git a/Private/KernelKit/PE.hpp b/Private/KernelKit/PE.hpp
index 5bb5d831..5d8ac9f8 100644
--- a/Private/KernelKit/PE.hpp
+++ b/Private/KernelKit/PE.hpp
@@ -11,7 +11,7 @@
------------------------------------------- */
-#ifdef __PE__
+#ifndef __PE__
#define __PE__
#include <NewKit/Defines.hpp>
@@ -19,6 +19,7 @@
typedef HCore::UInt32 U32;
typedef HCore::UInt16 U16;
typedef HCore::UInt8 U8;
+typedef char CHAR;
#define kPeMagic 0x00004550
@@ -36,7 +37,7 @@ struct ExecHeader final {
#define kMagPE32 0x010b
#define kMagPE64 0x020b
-struct ExecOptionalHeader final {
+typedef struct ExecOptionalHeader final {
U16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit)
U8 mMajorLinkerVersion;
U8 mMinorLinkerVersion;
@@ -67,6 +68,50 @@ struct ExecOptionalHeader final {
U32 mSizeOfHeapCommit;
U32 mLoaderFlags;
U32 mNumberOfRvaAndSizes;
+} ExecOptionalHeader, *ExecOptionalHeaderPtr;
+
+typedef struct ExecSectionHeader final {
+ CHAR mName[8];
+ U32 mVirtualSize;
+ U32 mVirtualAddress;
+ U32 mSizeOfRawData;
+ U32 mPointerToRawData;
+ U32 mPointerToRelocations;
+ U32 mPointerToLinenumbers;
+ U16 mNumberOfRelocations;
+ U16 mNumberOfLinenumbers;
+ U32 mCharacteristics;
+} ExecSectionHeader, *ExecSectionHeaderPtr;
+
+enum kExecDataDirParams {
+ kExecExport,
+ kExecImport,
+ kExecCnt,
};
+typedef struct ExecExportDirectory {
+ U32 mCharacteristics;
+ U32 mTimeDateStamp;
+ U16 mMajorVersion;
+ U16 mMinorVersion;
+ U32 mName;
+ U32 mBase;
+ U32 mNumberOfFunctions;
+ U32 mNumberOfNames;
+ U32 mAddressOfFunctions; // export table rva
+ U32 mAddressOfNames;
+ U32 mAddressOfNameOrdinal; // ordinal table rva
+} ExecExportDirectory, *ExecExportDirectoryPtr;
+
+typedef struct ExecImportDirectory {
+ union {
+ U32 mCharacteristics;
+ U32 mOriginalFirstThunk;
+ };
+ U32 mTimeDateStamp;
+ U32 mForwarderChain;
+ U32 mNameRva;
+ U32 mThunkTableRva;
+} ExecImportDirectory, *ExecImportDirectoryPtr;
+
#endif /* ifndef __PE__ */
diff --git a/Private/KernelKit/PEF.hpp b/Private/KernelKit/PEF.hpp
index 3d15a3aa..afa43968 100644
--- a/Private/KernelKit/PEF.hpp
+++ b/Private/KernelKit/PEF.hpp
@@ -39,6 +39,8 @@ enum {
kPefKindSharedObject = 2, /* .lib */
kPefKindObject = 4, /* .obj */
kPefKindDebug = 5, /* .debug */
+ kPefKindDriver = 6,
+ kPefKindCount,
};
typedef struct PEFContainer final {
diff --git a/Private/KernelKit/PEFCodeManager.hxx b/Private/KernelKit/PEFCodeManager.hxx
new file mode 100644
index 00000000..3541d11b
--- /dev/null
+++ b/Private/KernelKit/PEFCodeManager.hxx
@@ -0,0 +1,72 @@
+/*
+ * ========================================================
+ *
+ * HCore
+ * Copyright Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#ifndef _INC_CODE_MANAGER_PEF_
+#define _INC_CODE_MANAGER_PEF_
+
+#include <KernelKit/PEF.hpp>
+#include <NewKit/ErrorOr.hpp>
+#include <NewKit/String.hpp>
+
+#include "NewKit/Defines.hpp"
+
+namespace HCore {
+///
+/// \name PEFLoader
+/// \brief PEF loader class.
+///
+class PEFLoader : public Loader {
+ private:
+ explicit PEFLoader() = delete;
+
+ public:
+ explicit PEFLoader(const VoidPtr blob);
+ explicit PEFLoader(const char *path);
+ ~PEFLoader() override;
+
+ public:
+ HCORE_COPY_DEFAULT(PEFLoader);
+
+ public:
+ typedef void (*MainKind)(void);
+
+ public:
+ const char *Path() override;
+ const char *Format() override;
+ const char *MIME() override;
+
+ public:
+ ErrorOr<VoidPtr> LoadStart() override;
+ VoidPtr FindSymbol(const char *name, Int32 kind) override;
+
+ public:
+ bool IsLoaded() noexcept;
+
+ private:
+ Ref<StringView> fPath;
+ VoidPtr fCachedBlob;
+ bool fBad;
+};
+
+namespace Utils {
+/// \brief Much like Mac OS's UPP.
+/// This is read-only by design.
+/// It handles different kind of code.
+/// ARM <-> AMD64 for example.
+typedef struct UniversalProcedureTable final {
+ const Char NAME[kPefNameLen];
+ const VoidPtr TRAP;
+ const SizeT ARCH;
+} __attribute__((packed)) UniversalProcedureTableType;
+
+bool execute_from_image(PEFLoader &exec) noexcept;
+} // namespace Utils
+} // namespace HCore
+
+#endif // ifndef _INC_CODE_MANAGER_PEF_
diff --git a/Private/KernelKit/SharedObjectCore.hxx b/Private/KernelKit/PEFSharedObject.hxx
index aea3c0cb..af90858e 100644
--- a/Private/KernelKit/SharedObjectCore.hxx
+++ b/Private/KernelKit/PEFSharedObject.hxx
@@ -7,15 +7,19 @@
* ========================================================
*/
-#ifndef __KERNELKIT_SHARED_OBJECT_CORE_HXX__
-#define __KERNELKIT_SHARED_OBJECT_CORE_HXX__
+#ifndef __KERNELKIT_SHARED_OBJECT_HXX__
+#define __KERNELKIT_SHARED_OBJECT_HXX__
-#include <KernelKit/CodeManager.hpp>
#include <KernelKit/Loader.hpp>
#include <KernelKit/PEF.hpp>
+#include <KernelKit/PEFCodeManager.hxx>
#include <NewKit/Defines.hpp>
namespace HCore {
+ /**
+ * @brief Shared Library class
+ * Load library from this class
+ */
class SharedObject final {
public:
struct SharedObjectTraits final {
@@ -40,6 +44,10 @@ class SharedObject final {
public:
void Mount(SharedObjectTraits *to_mount) {
+ if (!to_mount ||
+ !to_mount->fImageObject)
+ return;
+
fMounted = to_mount;
if (fLoader && to_mount) {
@@ -82,4 +90,4 @@ inline void hcore_pure_call(void) {
}
} // namespace HCore
-#endif /* ifndef __KERNELKIT_SHARED_OBJECT_CORE_HXX__ */
+#endif /* ifndef __KERNELKIT_SHARED_OBJECT_HXX__ */
diff --git a/Private/Source/CodeManager.cxx b/Private/Source/PEFCodeManager.cxx
index 8804d1ca..8804d1ca 100644
--- a/Private/Source/CodeManager.cxx
+++ b/Private/Source/PEFCodeManager.cxx
diff --git a/Private/Source/SharedObjectEntry.cxx b/Private/Source/PEFSharedObjectMain.cxx
index df2a9a43..c1803312 100644
--- a/Private/Source/SharedObjectEntry.cxx
+++ b/Private/Source/PEFSharedObjectMain.cxx
@@ -10,7 +10,7 @@
#include <KernelKit/DebugOutput.hpp>
#include <KernelKit/PEF.hpp>
#include <KernelKit/ProcessManager.hpp>
-#include <KernelKit/SharedObjectCore.hxx>
+#include <KernelKit/PEFSharedObject.hxx>
#include <KernelKit/ThreadLocalStorage.hxx>
#include <NewKit/Defines.hpp>
diff --git a/Private/makefile b/Private/makefile
index 5ec3e277..ad851165 100644
--- a/Private/makefile
+++ b/Private/makefile
@@ -27,6 +27,7 @@ h-core:
$(CC) $(CCFLAGS) Source/*.cxx HALKit/AMD64/PCI/*.cpp Source/Network/*.cpp\
Source/Storage/*.cxx HALKit/AMD64/*.cxx HALKit/AMD64/*.cpp HALKit/AMD64/*.s
$(ASM) -f elf64 HALKit/AMD64/DebugManager.asm
+ $(ASM) -f elf64 HALKit/AMD64/HalInterruptRouting.asm
$(ASM) -f elf64 HALKit/AMD64/SMPCoreManager.asm
$(ASM) -f elf64 HALKit/AMD64/StartSequence.asm
mv *.o HALKit/AMD64/*.o Obj/