https://git.reactos.org/?p=reactos.git;a=commitdiff;h=17cf47df447064146d4057b19e2235805df1fd51

commit 17cf47df447064146d4057b19e2235805df1fd51
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Wed Oct 2 09:10:56 2024 +0200
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Tue Feb 4 16:45:48 2025 +0200

    [ROSLOAD] Add rosload.exe target as 2nd stage loader
---
 boot/freeldr/freeldr/CMakeLists.txt |   1 +
 boot/freeldr/freeldr/rosload.cmake  | 105 ++++++++++++++++++++++++++++++++++++
 boot/freeldr/freeldr/rosload.spec   |  47 ++++++++++++++++
 3 files changed, 153 insertions(+)

diff --git a/boot/freeldr/freeldr/CMakeLists.txt 
b/boot/freeldr/freeldr/CMakeLists.txt
index 2a349833b07..ef1426cff19 100644
--- a/boot/freeldr/freeldr/CMakeLists.txt
+++ b/boot/freeldr/freeldr/CMakeLists.txt
@@ -135,6 +135,7 @@ if(ARCH STREQUAL "i386")
 endif()
 
 include(pcat.cmake)
+include(rosload.cmake)
 if(NOT ARCH STREQUAL "i386" OR NOT (SARCH STREQUAL "pc98" OR SARCH STREQUAL 
"xbox"))
     include(uefi.cmake)
 endif()
diff --git a/boot/freeldr/freeldr/rosload.cmake 
b/boot/freeldr/freeldr/rosload.cmake
new file mode 100644
index 00000000000..6af8eccf380
--- /dev/null
+++ b/boot/freeldr/freeldr/rosload.cmake
@@ -0,0 +1,105 @@
+##
+## PROJECT:     FreeLoader
+## LICENSE:     GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
+## PURPOSE:     Build definitions for rosload 2nd stage loader
+## COPYRIGHT:   Copyright 2024 Timo Kreuzer <timo.kreu...@reactos.org>
+##
+
+spec2def(rosload.exe rosload.spec)
+
+list(APPEND ROSLOAD_SOURCE
+    include/freeldr.h
+    bootmgr.c
+    custom.c
+    linuxboot.c
+    miscboot.c
+    options.c
+    oslist.c
+    lib/rtl/libsupp.c
+    ${REACTOS_SOURCE_DIR}/ntoskrnl/config/cmboot.c
+    ntldr/conversion.c
+    ntldr/inffile.c
+    ntldr/registry.c
+    ntldr/setupldr.c
+    ntldr/winldr.c
+    ntldr/wlmemory.c
+    ntldr/wlregistry.c
+)
+
+if(ARCH STREQUAL "i386")
+
+    list(APPEND ROSLOAD_SOURCE
+        arch/i386/halstub.c
+        arch/i386/ntoskrnl.c
+        disk/scsiport.c
+        ntldr/arch/i386/winldr.c
+        ntldr/headless.c)
+
+    if(SARCH STREQUAL "pc98" OR SARCH STREQUAL "xbox")
+        # These machine types require built-in bitmap font
+        list(APPEND ROSLOAD_SOURCE
+            arch/vgafont.c)
+    endif()
+
+    list(APPEND ROSLOAD_ASM_SOURCE
+        arch/i386/drvmap.S
+        arch/i386/linux.S)
+
+elseif(ARCH STREQUAL "amd64")
+
+    list(APPEND ROSLOAD_SOURCE
+        ntldr/arch/amd64/winldr.c)
+
+    list(APPEND ROSLOAD_ASM_SOURCE
+        arch/amd64/misc.S
+        arch/amd64/linux.S
+    )
+
+elseif(ARCH STREQUAL "arm")
+
+    list(APPEND ROSLOAD_SOURCE
+        ntldr/arch/arm/winldr.c)
+
+    list(APPEND ROSLOAD_ASM_SOURCE
+        arch/arm/boot.S)
+
+else()
+    #TBD
+endif()
+
+add_asm_files(rosload_asm ${ROSLOAD_ASM_SOURCE})
+
+add_executable(rosload
+    ${ROSLOAD_SOURCE}
+    ${rosload_asm}
+    ${CMAKE_CURRENT_BINARY_DIR}/rosload.def
+)
+
+set_target_properties(rosload
+    PROPERTIES
+    ENABLE_EXPORTS TRUE
+    DEFINE_SYMBOL "")
+
+set_image_base(rosload 0x10000) # 0x200000
+set_subsystem(rosload native)
+set_entrypoint(rosload RunLoader)
+
+if(ARCH STREQUAL "i386")
+    target_link_libraries(rosload mini_hal)
+endif()
+
+target_link_libraries(rosload blcmlib blrtl libcntpr)
+add_importlibs(rosload freeldr)
+
+# dynamic analysis switches
+if(STACK_PROTECTOR)
+    target_sources(rosload PRIVATE $<TARGET_OBJECTS:gcc_ssp_nt>)
+endif()
+
+if(RUNTIME_CHECKS)
+    target_link_libraries(rosload runtmchk)
+endif()
+
+add_dependencies(rosload bugcodes asm xdk)
+
+add_cd_file(TARGET rosload DESTINATION loader NO_CAB FOR bootcd regtest livecd 
hybridcd)
diff --git a/boot/freeldr/freeldr/rosload.spec 
b/boot/freeldr/freeldr/rosload.spec
new file mode 100644
index 00000000000..04bfebebebe
--- /dev/null
+++ b/boot/freeldr/freeldr/rosload.spec
@@ -0,0 +1,47 @@
+@ stdcall RtlAssert(ptr ptr long ptr)
+@ varargs -arch=i386 ScsiDebugPrint(long str)
+@ stdcall -arch=i386 ScsiPortCompleteRequest(ptr long long long long)
+@ stdcall -arch=i386 ScsiPortConvertPhysicalAddressToUlong(long long)
+@ stdcall -arch=i386 ScsiPortConvertUlongToPhysicalAddress(long)
+#@ stdcall -arch=x86_64 ScsiPortConvertUlongToPhysicalAddress(long)
+@ stdcall -arch=i386 ScsiPortFlushDma(ptr)
+@ stdcall -arch=i386 ScsiPortFreeDeviceBase(ptr ptr)
+@ stdcall -arch=i386 ScsiPortGetBusData(ptr long long long ptr long)
+@ stdcall -arch=i386 ScsiPortGetDeviceBase(ptr long long long long long long)
+@ stdcall -arch=i386 ScsiPortGetLogicalUnit(ptr long long long)
+@ stdcall -arch=i386 ScsiPortGetPhysicalAddress(ptr ptr ptr long)
+@ stdcall -arch=i386 ScsiPortGetSrb(ptr long long long long)
+@ stdcall -arch=i386 ScsiPortGetUncachedExtension(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortGetVirtualAddress(ptr long long)
+@ stdcall -arch=i386 ScsiPortInitialize(ptr ptr ptr ptr)
+@ stdcall -arch=i386 ScsiPortIoMapTransfer(ptr ptr long long)
+@ stdcall -arch=i386 ScsiPortLogError(ptr ptr long long long long long)
+@ stdcall -arch=i386 ScsiPortMoveMemory(ptr ptr long)
+@ cdecl -arch=i386 ScsiPortNotification()
+@ stdcall -arch=i386 ScsiPortReadPortBufferUchar(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortReadPortBufferUshort(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortReadPortBufferUlong(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortReadPortUchar(ptr)
+@ stdcall -arch=i386 ScsiPortReadPortUshort(ptr)
+@ stdcall -arch=i386 ScsiPortReadPortUlong(ptr)
+@ stdcall -arch=i386 ScsiPortReadRegisterBufferUchar(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortReadRegisterBufferUshort(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortReadRegisterBufferUlong(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortReadRegisterUchar(ptr)
+@ stdcall -arch=i386 ScsiPortReadRegisterUshort(ptr)
+@ stdcall -arch=i386 ScsiPortReadRegisterUlong(ptr)
+@ stdcall -arch=i386 ScsiPortSetBusDataByOffset(ptr long long long ptr long 
long)
+@ stdcall -arch=i386 ScsiPortStallExecution(long)
+@ stdcall -arch=i386 ScsiPortValidateRange(ptr long long long long long long)
+@ stdcall -arch=i386 ScsiPortWritePortBufferUchar(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortWritePortBufferUshort(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortWritePortBufferUlong(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortWritePortUchar(ptr long)
+@ stdcall -arch=i386 ScsiPortWritePortUshort(ptr long)
+@ stdcall -arch=i386 ScsiPortWritePortUlong(ptr long)
+@ stdcall -arch=i386 ScsiPortWriteRegisterBufferUchar(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortWriteRegisterBufferUshort(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortWriteRegisterBufferUlong(ptr ptr long)
+@ stdcall -arch=i386 ScsiPortWriteRegisterUchar(ptr long)
+@ stdcall -arch=i386 ScsiPortWriteRegisterUshort(ptr long)
+@ stdcall -arch=i386 ScsiPortWriteRegisterUlong(ptr long)

Reply via email to