Skip to content

Commit c317e8f

Browse files
committed
[ROSLOAD] Add rosload.exe target as 2nd stage loader
1 parent 2810198 commit c317e8f

File tree

3 files changed

+153
-0
lines changed

3 files changed

+153
-0
lines changed

boot/freeldr/freeldr/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ if(ARCH STREQUAL "i386")
135135
endif()
136136

137137
include(pcat.cmake)
138+
include(rosload.cmake)
138139
if(NOT ARCH STREQUAL "i386" OR NOT (SARCH STREQUAL "pc98" OR SARCH STREQUAL "xbox"))
139140
include(uefi.cmake)
140141
endif()

boot/freeldr/freeldr/rosload.cmake

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
##
2+
## PROJECT: FreeLoader
3+
## LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4+
## PURPOSE: Build definitions for rosload 2nd stage loader
5+
## COPYRIGHT: Copyright 2024 Timo Kreuzer <[email protected]>
6+
##
7+
8+
spec2def(rosload.exe rosload.spec)
9+
10+
list(APPEND ROSLOAD_SOURCE
11+
include/freeldr.h
12+
bootmgr.c
13+
custom.c
14+
linuxboot.c
15+
miscboot.c
16+
options.c
17+
oslist.c
18+
lib/rtl/libsupp.c
19+
${REACTOS_SOURCE_DIR}/ntoskrnl/config/cmboot.c
20+
ntldr/conversion.c
21+
ntldr/inffile.c
22+
ntldr/registry.c
23+
ntldr/setupldr.c
24+
ntldr/winldr.c
25+
ntldr/wlmemory.c
26+
ntldr/wlregistry.c
27+
)
28+
29+
if(ARCH STREQUAL "i386")
30+
31+
list(APPEND ROSLOAD_SOURCE
32+
arch/i386/halstub.c
33+
arch/i386/ntoskrnl.c
34+
disk/scsiport.c
35+
ntldr/arch/i386/winldr.c
36+
ntldr/headless.c)
37+
38+
if(SARCH STREQUAL "pc98" OR SARCH STREQUAL "xbox")
39+
# These machine types require built-in bitmap font
40+
list(APPEND ROSLOAD_SOURCE
41+
arch/vgafont.c)
42+
endif()
43+
44+
list(APPEND ROSLOAD_ASM_SOURCE
45+
arch/i386/drvmap.S
46+
arch/i386/linux.S)
47+
48+
elseif(ARCH STREQUAL "amd64")
49+
50+
list(APPEND ROSLOAD_SOURCE
51+
ntldr/arch/amd64/winldr.c)
52+
53+
list(APPEND ROSLOAD_ASM_SOURCE
54+
arch/amd64/misc.S
55+
arch/amd64/linux.S
56+
)
57+
58+
elseif(ARCH STREQUAL "arm")
59+
60+
list(APPEND ROSLOAD_SOURCE
61+
ntldr/arch/arm/winldr.c)
62+
63+
list(APPEND ROSLOAD_ASM_SOURCE
64+
arch/arm/boot.S)
65+
66+
else()
67+
#TBD
68+
endif()
69+
70+
add_asm_files(rosload_asm ${ROSLOAD_ASM_SOURCE})
71+
72+
add_executable(rosload
73+
${ROSLOAD_SOURCE}
74+
${rosload_asm}
75+
${CMAKE_CURRENT_BINARY_DIR}/rosload.def
76+
)
77+
78+
set_target_properties(rosload
79+
PROPERTIES
80+
ENABLE_EXPORTS TRUE
81+
DEFINE_SYMBOL "")
82+
83+
set_image_base(rosload 0x10000) # 0x200000
84+
set_subsystem(rosload native)
85+
set_entrypoint(rosload RunLoader)
86+
87+
if(ARCH STREQUAL "i386")
88+
target_link_libraries(rosload mini_hal)
89+
endif()
90+
91+
target_link_libraries(rosload blcmlib blrtl libcntpr)
92+
add_importlibs(rosload freeldr)
93+
94+
# dynamic analysis switches
95+
if(STACK_PROTECTOR)
96+
target_sources(rosload PRIVATE $<TARGET_OBJECTS:gcc_ssp_nt>)
97+
endif()
98+
99+
if(RUNTIME_CHECKS)
100+
target_link_libraries(rosload runtmchk)
101+
endif()
102+
103+
add_dependencies(rosload bugcodes asm xdk)
104+
105+
add_cd_file(TARGET rosload DESTINATION loader NO_CAB FOR bootcd regtest livecd hybridcd)

boot/freeldr/freeldr/rosload.spec

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
@ stdcall RtlAssert(ptr ptr long ptr)
2+
@ varargs -arch=i386 ScsiDebugPrint(long str)
3+
@ stdcall -arch=i386 ScsiPortCompleteRequest(ptr long long long long)
4+
@ stdcall -arch=i386 ScsiPortConvertPhysicalAddressToUlong(long long)
5+
@ stdcall -arch=i386 ScsiPortConvertUlongToPhysicalAddress(long)
6+
#@ stdcall -arch=x86_64 ScsiPortConvertUlongToPhysicalAddress(long)
7+
@ stdcall -arch=i386 ScsiPortFlushDma(ptr)
8+
@ stdcall -arch=i386 ScsiPortFreeDeviceBase(ptr ptr)
9+
@ stdcall -arch=i386 ScsiPortGetBusData(ptr long long long ptr long)
10+
@ stdcall -arch=i386 ScsiPortGetDeviceBase(ptr long long long long long long)
11+
@ stdcall -arch=i386 ScsiPortGetLogicalUnit(ptr long long long)
12+
@ stdcall -arch=i386 ScsiPortGetPhysicalAddress(ptr ptr ptr long)
13+
@ stdcall -arch=i386 ScsiPortGetSrb(ptr long long long long)
14+
@ stdcall -arch=i386 ScsiPortGetUncachedExtension(ptr ptr long)
15+
@ stdcall -arch=i386 ScsiPortGetVirtualAddress(ptr long long)
16+
@ stdcall -arch=i386 ScsiPortInitialize(ptr ptr ptr ptr)
17+
@ stdcall -arch=i386 ScsiPortIoMapTransfer(ptr ptr long long)
18+
@ stdcall -arch=i386 ScsiPortLogError(ptr ptr long long long long long)
19+
@ stdcall -arch=i386 ScsiPortMoveMemory(ptr ptr long)
20+
@ cdecl -arch=i386 ScsiPortNotification()
21+
@ stdcall -arch=i386 ScsiPortReadPortBufferUchar(ptr ptr long)
22+
@ stdcall -arch=i386 ScsiPortReadPortBufferUshort(ptr ptr long)
23+
@ stdcall -arch=i386 ScsiPortReadPortBufferUlong(ptr ptr long)
24+
@ stdcall -arch=i386 ScsiPortReadPortUchar(ptr)
25+
@ stdcall -arch=i386 ScsiPortReadPortUshort(ptr)
26+
@ stdcall -arch=i386 ScsiPortReadPortUlong(ptr)
27+
@ stdcall -arch=i386 ScsiPortReadRegisterBufferUchar(ptr ptr long)
28+
@ stdcall -arch=i386 ScsiPortReadRegisterBufferUshort(ptr ptr long)
29+
@ stdcall -arch=i386 ScsiPortReadRegisterBufferUlong(ptr ptr long)
30+
@ stdcall -arch=i386 ScsiPortReadRegisterUchar(ptr)
31+
@ stdcall -arch=i386 ScsiPortReadRegisterUshort(ptr)
32+
@ stdcall -arch=i386 ScsiPortReadRegisterUlong(ptr)
33+
@ stdcall -arch=i386 ScsiPortSetBusDataByOffset(ptr long long long ptr long long)
34+
@ stdcall -arch=i386 ScsiPortStallExecution(long)
35+
@ stdcall -arch=i386 ScsiPortValidateRange(ptr long long long long long long)
36+
@ stdcall -arch=i386 ScsiPortWritePortBufferUchar(ptr ptr long)
37+
@ stdcall -arch=i386 ScsiPortWritePortBufferUshort(ptr ptr long)
38+
@ stdcall -arch=i386 ScsiPortWritePortBufferUlong(ptr ptr long)
39+
@ stdcall -arch=i386 ScsiPortWritePortUchar(ptr long)
40+
@ stdcall -arch=i386 ScsiPortWritePortUshort(ptr long)
41+
@ stdcall -arch=i386 ScsiPortWritePortUlong(ptr long)
42+
@ stdcall -arch=i386 ScsiPortWriteRegisterBufferUchar(ptr ptr long)
43+
@ stdcall -arch=i386 ScsiPortWriteRegisterBufferUshort(ptr ptr long)
44+
@ stdcall -arch=i386 ScsiPortWriteRegisterBufferUlong(ptr ptr long)
45+
@ stdcall -arch=i386 ScsiPortWriteRegisterUchar(ptr long)
46+
@ stdcall -arch=i386 ScsiPortWriteRegisterUshort(ptr long)
47+
@ stdcall -arch=i386 ScsiPortWriteRegisterUlong(ptr long)

0 commit comments

Comments
 (0)