From 43981bf8ecacb5f95070fa4ff502941d9e3251b4 Mon Sep 17 00:00:00 2001 From: Amlal Date: Wed, 24 Jul 2024 20:48:25 +0200 Subject: [MHR-36]: Removed HAL directory, replaced with Samples directory. Signed-off-by: Amlal --- Samples/.gitkeep | 0 Samples/SampleHAL/CheckStck.c | 11 ++++++++ Samples/SampleHAL/DriverRsrc.rsrc | 25 ++++++++++++++++++ Samples/SampleHAL/Main.c | 20 +++++++++++++++ Samples/SampleHAL/compile_flags.txt | 3 +++ Samples/SampleHAL/x86_64.mk | 51 +++++++++++++++++++++++++++++++++++++ 6 files changed, 110 insertions(+) create mode 100644 Samples/.gitkeep create mode 100644 Samples/SampleHAL/CheckStck.c create mode 100644 Samples/SampleHAL/DriverRsrc.rsrc create mode 100644 Samples/SampleHAL/Main.c create mode 100644 Samples/SampleHAL/compile_flags.txt create mode 100644 Samples/SampleHAL/x86_64.mk (limited to 'Samples') diff --git a/Samples/.gitkeep b/Samples/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Samples/SampleHAL/CheckStck.c b/Samples/SampleHAL/CheckStck.c new file mode 100644 index 00000000..54b6bc5d --- /dev/null +++ b/Samples/SampleHAL/CheckStck.c @@ -0,0 +1,11 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + +------------------------------------------- */ + +///! @brief Use this to check your stack, if using MinGW/MSVC/CodeTools. +void ___chkstk_ms(void) +{ + (void)0; +} diff --git a/Samples/SampleHAL/DriverRsrc.rsrc b/Samples/SampleHAL/DriverRsrc.rsrc new file mode 100644 index 00000000..c478f7b6 --- /dev/null +++ b/Samples/SampleHAL/DriverRsrc.rsrc @@ -0,0 +1,25 @@ +1 ICON "../../Icons/main.ico" + +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "ZKA Technologies" + VALUE "FileDescription", "ZKA HAL." + VALUE "FileVersion", "1.00" + VALUE "InternalName", "SampleHAL" + VALUE "LegalCopyright", "Copyright ZKA Technologies, all rights reserved." + VALUE "OriginalFilename", "SampleHAL.exe" + VALUE "ProductName", "SampleHAL" + VALUE "ProductVersion", "1.00" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END +END diff --git a/Samples/SampleHAL/Main.c b/Samples/SampleHAL/Main.c new file mode 100644 index 00000000..6b54742f --- /dev/null +++ b/Samples/SampleHAL/Main.c @@ -0,0 +1,20 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + +------------------------------------------- */ + +#include +#include + +int __ImageStart(void) +{ + kernelPrintStr("SampleDriver: Starting up...\r"); + return 0; +} + +int __ImageEnd(void) +{ + kernelPrintStr("SampleDriver: Shutting down...\r"); + return 0; +} diff --git a/Samples/SampleHAL/compile_flags.txt b/Samples/SampleHAL/compile_flags.txt new file mode 100644 index 00000000..10bdb71e --- /dev/null +++ b/Samples/SampleHAL/compile_flags.txt @@ -0,0 +1,3 @@ +-I../../ +-I../../Kernel +-std=c++20 diff --git a/Samples/SampleHAL/x86_64.mk b/Samples/SampleHAL/x86_64.mk new file mode 100644 index 00000000..2fa20d1a --- /dev/null +++ b/Samples/SampleHAL/x86_64.mk @@ -0,0 +1,51 @@ +################################################## +# (C) ZKA Technologies, all rights reserved. +# This is the sample driver makefile. +################################################## + +CC_GNU=x86_64-w64-mingw32-gcc +LD_GNU=x86_64-w64-mingw32-ld + +WINDRES=x86_64-w64-mingw32-windres + +ADD_FILE=touch +COPY=cp +HTTP_GET=wget + +LD_FLAGS=-e __at_enter --subsystem=17 + +OBJ=*.o + + +REM=rm +REM_FLAG=-f + +FLAG_ASM=-f win64 +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -std=c17 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./ + +.PHONY: invalid-recipe +invalid-recipe: + @echo "invalid-recipe: Use make all instead." + +.PHONY: all +all: compile-amd64 + $(LD_GNU) $(OBJ) $(LD_FLAGS) -o SampleHAL.exe + +ifneq ($(DEBUG_SUPPORT), ) +DEBUG = -D__DEBUG__ +endif + +.PHONY: compile-amd64 +compile-amd64: + $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o + $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DDK/*.c) $(wildcard ../../DDK/*.S) + +.PHONY: clean +clean: + $(REM) $(REM_FLAG) $(OBJ) SampleHAL.exe + +.PHONY: help +help: + @echo "=== HELP ===" + @echo "clean: Clean driver." + @echo "compile-amd64: Build driver." -- cgit v1.2.3 From 3feb5cb72e3e422e804098e2fdcb0bd3e7961627 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Sun, 28 Jul 2024 06:15:54 +0200 Subject: [FIX] Kernel\Sources\GUIDWizard.cxx: Fixed and implemented cf_make_sequence correctly. [REFACTOR] Kernel\Sources\PEFSharedObject.cxx Replace rt_library_free with rt_library_fini. [REFACTOR] SimpleHAL\Main.c: Replace SampleDriver with SampleHAL. Signed-off-by: Amlal EL Mahrouss --- Kernel/CFKit/GUIDWizard.hpp | 4 ++-- Kernel/HALKit/AMD64/HalDebugOutput.cxx | 4 ++-- Kernel/HALKit/POWER/HalSerialPort.cxx | 2 +- Kernel/KernelKit/SMPManager.hpp | 3 +-- Kernel/Sources/GUIDWizard.cxx | 19 ++++++++++----- Kernel/Sources/PEFSharedObject.cxx | 42 +++++++++++++++++++--------------- Samples/SampleHAL/Main.c | 8 +++---- 7 files changed, 46 insertions(+), 36 deletions(-) (limited to 'Samples') diff --git a/Kernel/CFKit/GUIDWizard.hpp b/Kernel/CFKit/GUIDWizard.hpp index 59e83153..609b0d46 100644 --- a/Kernel/CFKit/GUIDWizard.hpp +++ b/Kernel/CFKit/GUIDWizard.hpp @@ -17,6 +17,6 @@ namespace Kernel::XRN::Version1 { - Ref make_sequence(const ArrayList& seq); - ErrorOr> try_guid_to_string(Ref& guid); + Ref cf_make_sequence(const ArrayList& seq); + ErrorOr> cf_try_guid_to_string(Ref& guid); } // namespace Kernel::XRN::Version1 diff --git a/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/Kernel/HALKit/AMD64/HalDebugOutput.cxx index c652aa80..9e3dfcd8 100644 --- a/Kernel/HALKit/AMD64/HalDebugOutput.cxx +++ b/Kernel/HALKit/AMD64/HalDebugOutput.cxx @@ -74,10 +74,10 @@ namespace Kernel Detail::kState = kStateTransmit; SizeT index = 0; - SizeT len = rt_string_len(bytes, 256); + SizeT len = rt_string_len(bytes, 0); const auto cColor = "\x1b[1;32m"; - SizeT lenClr = rt_string_len(cColor, 256); + SizeT lenClr = rt_string_len(cColor, 0); while (index < lenClr) { diff --git a/Kernel/HALKit/POWER/HalSerialPort.cxx b/Kernel/HALKit/POWER/HalSerialPort.cxx index 70197256..3c62824b 100644 --- a/Kernel/HALKit/POWER/HalSerialPort.cxx +++ b/Kernel/HALKit/POWER/HalSerialPort.cxx @@ -17,7 +17,7 @@ void ke_io_write(const Char* bytes) return; SizeT index = 0; - SizeT len = rt_string_len(bytes, 256); + SizeT len = rt_string_len(bytes, 0); while (index < len) { diff --git a/Kernel/KernelKit/SMPManager.hpp b/Kernel/KernelKit/SMPManager.hpp index cb6b7884..a7af05d9 100644 --- a/Kernel/KernelKit/SMPManager.hpp +++ b/Kernel/KernelKit/SMPManager.hpp @@ -11,8 +11,7 @@ #include #include -// Last Rev -// Sat Feb 24 CET 2024 +/// @note Last Rev Sun 28 Jul CET 2024 #define kMaxHarts 8 diff --git a/Kernel/Sources/GUIDWizard.cxx b/Kernel/Sources/GUIDWizard.cxx index 71488096..b65c73a8 100644 --- a/Kernel/Sources/GUIDWizard.cxx +++ b/Kernel/Sources/GUIDWizard.cxx @@ -19,24 +19,31 @@ namespace Kernel::XRN::Version1 { - auto make_sequence(const ArrayList& uuidSeq) -> Ref + auto cf_make_sequence(const ArrayList& uuidSeq) -> Ref { GUIDSequence* seq = new GUIDSequence(); MUST_PASS(seq); Ref sequenceReference{seq, true}; - sequenceReference->fMs1 |= uuidSeq[0]; - sequenceReference->fMs2 |= uuidSeq[1]; - sequenceReference->fMs3 |= uuidSeq[2]; - sequenceReference->fMs3 |= uuidSeq[3]; + sequenceReference->fMs1 = uuidSeq[0]; + sequenceReference->fMs2 = uuidSeq[1]; + sequenceReference->fMs3 = uuidSeq[2]; + sequenceReference->fMs4[0] = uuidSeq[3]; + sequenceReference->fMs4[1] = uuidSeq[4]; + sequenceReference->fMs4[2] = uuidSeq[5]; + sequenceReference->fMs4[3] = uuidSeq[6]; + sequenceReference->fMs4[4] = uuidSeq[7]; + sequenceReference->fMs4[5] = uuidSeq[8]; + sequenceReference->fMs4[6] = uuidSeq[9]; + sequenceReference->fMs4[7] = uuidSeq[10]; return sequenceReference; } // @brief Tries to make a guid out of a string. // This function is not complete for now - auto try_guid_to_string(Ref& seq) -> ErrorOr> + auto cf_try_guid_to_string(Ref& seq) -> ErrorOr> { Char buf[kUUIDSize]; diff --git a/Kernel/Sources/PEFSharedObject.cxx b/Kernel/Sources/PEFSharedObject.cxx index a5928f1b..dccb9d12 100644 --- a/Kernel/Sources/PEFSharedObject.cxx +++ b/Kernel/Sources/PEFSharedObject.cxx @@ -18,66 +18,69 @@ Revision History: - 01/02/24: Rework shared library ABI, except a rt_library_init and - rt_library_free (amlel) 15/02/24: Breaking changes, changed the name of the + 01/02/24: Rework shared sharedObj ABI, except a rt_library_init and + rt_library_fini (amlel) 15/02/24: Breaking changes, changed the name of the routines. (amlel) + 07/28/24: Replace rt_library_free with rt_library_fini + ------------------------------------------- */ using namespace Kernel; /***********************************************************************************/ -/// @file SharedObjectRT.cxx -/// @brief Shared Object runtime. +/// @file PEFSharedObjectRT.cxx +/// @brief PEF's shared object runtime. /***********************************************************************************/ /***********************************************************************************/ -/* @brief Library runtime initializer. */ +/** @brief Library initializer. */ /***********************************************************************************/ EXTERN_C SharedObjectPtr rt_library_init(void) { - SharedObjectPtr library = tls_new_class(); + SharedObjectPtr sharedObj = tls_new_class(); - if (!library) + if (!sharedObj) { ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return nullptr; } - library->Mount(tls_new_class()); + sharedObj->Mount(tls_new_class()); - if (!library->Get()) + if (!sharedObj->Get()) { ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return nullptr; } - library->Get()->fImageObject = + sharedObj->Get()->fImageObject = ProcessScheduler::The().Leak().TheCurrent().Leak().Image; - if (!library->Get()->fImageObject) + if (!sharedObj->Get()->fImageObject) { ProcessScheduler::The().Leak().TheCurrent().Leak().Crash(); return nullptr; } - library->Get()->fImageEntrypointOffset = - library->Load(kPefStart, rt_string_len(kPefStart, 0), kPefCode); + sharedObj->Get()->fImageEntrypointOffset = + sharedObj->Load(kPefStart, rt_string_len(kPefStart, 0), kPefCode); - return library; + return sharedObj; } /***********************************************************************************/ -/* @brief Ends the library. */ -/* @note Please check if the lib got freed! */ -/* @param SharedObjectPtr the library to free. */ +/** @brief Frees the sharedObj. */ +/** @note Please check if the lib got freed! */ +/** @param lib The sharedObj to free. */ +/** @param successful Reports if successful or not. */ /***********************************************************************************/ -EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful) +EXTERN_C Void rt_library_fini(SharedObjectPtr lib, bool* successful) { MUST_PASS(successful); @@ -97,9 +100,10 @@ EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful) } /***********************************************************************************/ - /// @brief Unimplemented function (crashes by default) /// @param +/***********************************************************************************/ + EXTERN_C void __mh_purecall(void) { kcout << "newoskrnl: unimplemented symbol!\r"; diff --git a/Samples/SampleHAL/Main.c b/Samples/SampleHAL/Main.c index 6b54742f..9d1510ea 100644 --- a/Samples/SampleHAL/Main.c +++ b/Samples/SampleHAL/Main.c @@ -7,14 +7,14 @@ #include #include -int __ImageStart(void) +int __at_enter(void) { - kernelPrintStr("SampleDriver: Starting up...\r"); + kernelPrintStr("SampleHAL: Starting up...\r"); return 0; } -int __ImageEnd(void) +int __at_exit(void) { - kernelPrintStr("SampleDriver: Shutting down...\r"); + kernelPrintStr("SampleHAL: Shutting down...\r"); return 0; } -- cgit v1.2.3