[ROSLOAD] Add rosload.exe target as 2nd stage loader

This commit is contained in:
Timo Kreuzer 2024-10-02 09:10:56 +02:00
parent ebcf3f23aa
commit 17cf47df44
3 changed files with 153 additions and 0 deletions

View file

@ -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()

View file

@ -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@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)

View file

@ -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)