[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() endif()
include(pcat.cmake) include(pcat.cmake)
include(rosload.cmake)
if(NOT ARCH STREQUAL "i386" OR NOT (SARCH STREQUAL "pc98" OR SARCH STREQUAL "xbox")) if(NOT ARCH STREQUAL "i386" OR NOT (SARCH STREQUAL "pc98" OR SARCH STREQUAL "xbox"))
include(uefi.cmake) include(uefi.cmake)
endif() 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)