summaryrefslogtreecommitdiffhomepage
path: root/Boot
diff options
context:
space:
mode:
Diffstat (limited to 'Boot')
-rw-r--r--Boot/BootKit/Thread.hxx (renamed from Boot/BootKit/KernelLoader.hxx)17
-rw-r--r--Boot/Sources/HEL/AMD64/BootMain.cxx6
-rw-r--r--Boot/Sources/Thread.cxx (renamed from Boot/Sources/KernelLoader.cxx)28
-rw-r--r--Boot/amd64-efi.make4
4 files changed, 30 insertions, 25 deletions
diff --git a/Boot/BootKit/KernelLoader.hxx b/Boot/BootKit/Thread.hxx
index 3c98a238..6303eb35 100644
--- a/Boot/BootKit/KernelLoader.hxx
+++ b/Boot/BootKit/Thread.hxx
@@ -14,20 +14,20 @@ namespace Boot
{
using namespace Kernel;
- class KernelLoader;
+ class Thread;
/// @brief Program loader class
/// @package nl.zeta.boot.api
- class KernelLoader final
+ class Thread final
{
public:
- explicit KernelLoader() = delete;
- ~KernelLoader() = default;
+ explicit Thread() = delete;
+ ~Thread() = default;
- explicit KernelLoader(Kernel::VoidPtr blob);
+ explicit Thread(Kernel::VoidPtr blob);
- KernelLoader& operator=(const KernelLoader&) = default;
- KernelLoader(const KernelLoader&) = default;
+ Thread& operator=(const Thread&) = default;
+ Thread(const Thread&) = default;
void Start(HEL::HandoverInformationHeader* handover);
const char* GetName();
@@ -35,8 +35,7 @@ namespace Boot
bool IsValid();
private:
- Char fBlobName[255];
- Char* fHeapForProgram{nullptr};
+ Char fBlobName[255] = { "Boot Thread" };
VoidPtr fStartAddress{nullptr};
VoidPtr fBlob{nullptr};
};
diff --git a/Boot/Sources/HEL/AMD64/BootMain.cxx b/Boot/Sources/HEL/AMD64/BootMain.cxx
index f35c13ff..ffbab88a 100644
--- a/Boot/Sources/HEL/AMD64/BootMain.cxx
+++ b/Boot/Sources/HEL/AMD64/BootMain.cxx
@@ -16,7 +16,7 @@
#include <KernelKit/PEF.hxx>
#include <NewKit/Macros.hxx>
#include <NewKit/Ref.hxx>
-#include <BootKit/KernelLoader.hxx>
+#include <BootKit/Thread.hxx>
#include <cstring>
// make the compiler shut up.
@@ -223,7 +223,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
readerKernel.ReadAll(0);
- Boot::KernelLoader* loader = nullptr;
+ Boot::Thread* loader = nullptr;
// ------------------------------------------ //
// If we succeed in reading the blob, then execute it.
@@ -231,7 +231,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
if (readerKernel.Blob())
{
- loader = new Boot::KernelLoader(readerKernel.Blob());
+ loader = new Boot::Thread(readerKernel.Blob());
loader->SetName("\"newoskrnl.dll\" (64-bit SMP DLL)");
}
diff --git a/Boot/Sources/KernelLoader.cxx b/Boot/Sources/Thread.cxx
index aaabddc3..51d10fda 100644
--- a/Boot/Sources/KernelLoader.cxx
+++ b/Boot/Sources/Thread.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <BootKit/KernelLoader.hxx>
+#include <BootKit/Thread.hxx>
#include <BootKit/Support.hxx>
#include <BootKit/BootKit.hxx>
#include <FirmwareKit/EFI/API.hxx>
@@ -26,7 +26,7 @@ EXTERN EfiBootServices* BS;
namespace Boot
{
- KernelLoader::KernelLoader(VoidPtr blob)
+ Thread::Thread(VoidPtr blob)
: fBlob(blob), fStartAddress(nullptr)
{
// detect the format.
@@ -43,17 +43,24 @@ namespace Boot
if (firstBytes[0] == kMagMz0 &&
firstBytes[1] == kMagMz1)
{
- writer.Write("newosldr: PE32+ executable detected.\r");
-
ExecHeaderPtr hdrPtr = ldr_find_exec_header(firstBytes);
ExecOptionalHeaderPtr optHdr = ldr_find_opt_exec_header(firstBytes);
- if (hdrPtr->mMachine != 0x8664 &&
- hdrPtr->mSignature != 0x20b)
+ if (hdrPtr->mMachine != kPeMachineAMD64 ||
+ hdrPtr->mSignature != kPeMagic)
{
+ writer.Write("newosldr: Not a PE32+ executable.\r");
return;
}
+ if (optHdr->mSubsystem != kNewOSSubsystem)
+ {
+ writer.Write("newosldr: Not a New OS executable.\r");
+ return;
+ }
+
+ writer.Write("newosldr: PE32+ executable detected (New OS Subsystem).\r");
+
auto numSecs = hdrPtr->mNumberOfSections;
writer.Write("newosldr: Major Linker Ver: ").Write(optHdr->mMajorLinkerVersion).Write("\r");
@@ -92,7 +99,6 @@ namespace Boot
{
UInt64 HandoverMagic;
UInt32 HandoverType;
-
}* structHandover = (struct HANDOVER_INFORMATION_STUB*)((UIntPtr)fBlob + sect->mPointerToRawData);
if (structHandover->HandoverMagic != kHandoverMagic ||
@@ -128,7 +134,7 @@ namespace Boot
}
/// @note handover header has to be valid!
- Void KernelLoader::Start(HEL::HandoverInformationHeader* handover)
+ Void Thread::Start(HEL::HandoverInformationHeader* handover)
{
BTextWriter writer;
@@ -152,17 +158,17 @@ namespace Boot
err_fn(handover);
}
- const Char* KernelLoader::GetName()
+ const Char* Thread::GetName()
{
return fBlobName;
}
- Void KernelLoader::SetName(const Char* name)
+ Void Thread::SetName(const Char* name)
{
CopyMem(fBlobName, name, StrLen(name));
}
- bool KernelLoader::IsValid()
+ bool Thread::IsValid()
{
return fStartAddress != nullptr;
}
diff --git a/Boot/amd64-efi.make b/Boot/amd64-efi.make
index ef2dae46..5bd422c4 100644
--- a/Boot/amd64-efi.make
+++ b/Boot/amd64-efi.make
@@ -45,8 +45,8 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEWOSKRNL__ -D__NEWOSLDR__ \
- -DEFI_FUNCTION_WRAPPER -I./ -I../Vendor -I../Kernel -c -nostdlib -fno-rtti -fno-exceptions \
- -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__NEWOS_AMD64__ -D__MAHROUSS__ -D__BOOTLOADER__ -I../
+ -DEFI_FUNCTION_WRAPPER -I./ -I../Vendor -I../Kernel -I../ -c -nostdlib -fno-rtti -fno-exceptions \
+ -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__NEWOS_AMD64__ -D__MAHROUSS__
BOOT_LOADER=newosldr.exe
KERNEL=newoskrnl.dll