https://git.reactos.org/?p=reactos.git;a=commitdiff;h=17cf47df447064146d405…
commit 17cf47df447064146d4057b19e2235805df1fd51
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Wed Oct 2 09:10:56 2024 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)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.kreuzer(a)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)