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)