Skip to content

Commit f81c191

Browse files
committed
[FREELDR] Export functions for a 2nd stage loader
1 parent 2f9dde0 commit f81c191

File tree

5 files changed

+226
-47
lines changed

5 files changed

+226
-47
lines changed

boot/freeldr/freeldr/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ list(APPEND FREELDR_BASE_SOURCE
131131
if(ARCH STREQUAL "i386")
132132
# Must be included together with disk/scsiport.c
133133
list(APPEND FREELDR_BASE_SOURCE
134-
${CMAKE_CURRENT_BINARY_DIR}/freeldr_pe.def)
134+
${CMAKE_CURRENT_BINARY_DIR}/freeldr.def)
135135
endif()
136136

137137
include(pcat.cmake)

boot/freeldr/freeldr/freeldr.spec

Lines changed: 182 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,184 @@
11
@ stdcall RtlAssert(ptr ptr long ptr)
2-
@ varargs ScsiDebugPrint(long str)
3-
@ stdcall ScsiPortCompleteRequest(ptr long long long long)
4-
@ stdcall ScsiPortConvertPhysicalAddressToUlong(long long)
2+
@ varargs -arch=i386 ScsiDebugPrint(long str)
3+
@ stdcall -arch=i386 ScsiPortCompleteRequest(ptr long long long long)
4+
@ stdcall -arch=i386 ScsiPortConvertPhysicalAddressToUlong(long long)
55
@ stdcall -arch=i386 ScsiPortConvertUlongToPhysicalAddress(long)
6-
@ stdcall -arch=x86_64 ScsiPortConvertUlongToPhysicalAddress(long)
7-
@ stdcall ScsiPortFlushDma(ptr)
8-
@ stdcall ScsiPortFreeDeviceBase(ptr ptr)
9-
@ stdcall ScsiPortGetBusData(ptr long long long ptr long)
10-
@ stdcall ScsiPortGetDeviceBase(ptr long long long long long long)
11-
@ stdcall ScsiPortGetLogicalUnit(ptr long long long)
12-
@ stdcall ScsiPortGetPhysicalAddress(ptr ptr ptr long)
13-
@ stdcall ScsiPortGetSrb(ptr long long long long)
14-
@ stdcall ScsiPortGetUncachedExtension(ptr ptr long)
15-
@ stdcall ScsiPortGetVirtualAddress(ptr long long)
16-
@ stdcall ScsiPortInitialize(ptr ptr ptr ptr)
17-
@ stdcall ScsiPortIoMapTransfer(ptr ptr long long)
18-
@ stdcall ScsiPortLogError(ptr ptr long long long long long)
19-
@ stdcall ScsiPortMoveMemory(ptr ptr long)
20-
@ cdecl ScsiPortNotification()
21-
@ stdcall ScsiPortReadPortBufferUchar(ptr ptr long)
22-
@ stdcall ScsiPortReadPortBufferUshort(ptr ptr long)
23-
@ stdcall ScsiPortReadPortBufferUlong(ptr ptr long)
24-
@ stdcall ScsiPortReadPortUchar(ptr)
25-
@ stdcall ScsiPortReadPortUshort(ptr)
26-
@ stdcall ScsiPortReadPortUlong(ptr)
27-
@ stdcall ScsiPortReadRegisterBufferUchar(ptr ptr long)
28-
@ stdcall ScsiPortReadRegisterBufferUshort(ptr ptr long)
29-
@ stdcall ScsiPortReadRegisterBufferUlong(ptr ptr long)
30-
@ stdcall ScsiPortReadRegisterUchar(ptr)
31-
@ stdcall ScsiPortReadRegisterUshort(ptr)
32-
@ stdcall ScsiPortReadRegisterUlong(ptr)
33-
@ stdcall ScsiPortSetBusDataByOffset(ptr long long long ptr long long)
34-
@ stdcall ScsiPortStallExecution(long)
35-
@ stdcall ScsiPortValidateRange(ptr long long long long long long)
36-
@ stdcall ScsiPortWritePortBufferUchar(ptr ptr long)
37-
@ stdcall ScsiPortWritePortBufferUshort(ptr ptr long)
38-
@ stdcall ScsiPortWritePortBufferUlong(ptr ptr long)
39-
@ stdcall ScsiPortWritePortUchar(ptr long)
40-
@ stdcall ScsiPortWritePortUshort(ptr long)
41-
@ stdcall ScsiPortWritePortUlong(ptr long)
42-
@ stdcall ScsiPortWriteRegisterBufferUchar(ptr ptr long)
43-
@ stdcall ScsiPortWriteRegisterBufferUshort(ptr ptr long)
44-
@ stdcall ScsiPortWriteRegisterBufferUlong(ptr ptr long)
45-
@ stdcall ScsiPortWriteRegisterUchar(ptr long)
46-
@ stdcall ScsiPortWriteRegisterUshort(ptr long)
47-
@ stdcall ScsiPortWriteRegisterUlong(ptr 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)
48+
49+
# ARC
50+
@ cdecl ArcClose()
51+
@ cdecl ArcGetDiskCount()
52+
@ cdecl ArcGetDiskInfo()
53+
@ cdecl ArcGetFileInformation()
54+
@ cdecl ArcGetTime()
55+
@ cdecl ArcOpen()
56+
@ cdecl ArcRead()
57+
@ cdecl ArcSeek()
58+
59+
# Debug
60+
@ cdecl DbgParseDebugChannels()
61+
@ cdecl DbgPrint(str)
62+
@ cdecl DbgPrint2(long long str long str)
63+
@ cdecl DebugDumpBuffer()
64+
@ cdecl DebugInit()
65+
@ cdecl FrLdrBugCheckWithMessage()
66+
@ stdcall KeBugCheckEx(long long long long long)
67+
68+
# Heap
69+
@ cdecl FrLdrHeapAllocateEx()
70+
@ cdecl FrLdrHeapFreeEx()
71+
@ cdecl FrLdrHeapAlloc()
72+
@ cdecl FrLdrHeapFree()
73+
@ cdecl FrLdrTempAlloc()
74+
@ cdecl FrLdrTempFree()
75+
@ cdecl FrLdrHeapCleanupAll()
76+
77+
# INI (check if we can move this to rosload)
78+
@ cdecl IniAddSection()
79+
@ cdecl IniAddSettingValueToSection()
80+
@ cdecl IniCleanup()
81+
@ cdecl IniGetFileSectionListHead()
82+
@ cdecl IniGetNumSectionItems()
83+
@ cdecl IniGetSectionSettingNameSize()
84+
@ cdecl IniGetSectionSettingValueSize()
85+
@ cdecl IniFileInitialize()
86+
@ cdecl IniModifySettingValue()
87+
@ cdecl IniOpenSection()
88+
@ cdecl IniReadSettingByName()
89+
@ cdecl IniReadSettingByNumber()
90+
91+
# Mm
92+
@ cdecl AddMemoryDescriptor()
93+
@ cdecl MmAllocateHighestMemoryBelowAddress()
94+
@ cdecl MmAllocateMemoryAtAddress()
95+
@ cdecl MmAllocateMemoryWithType()
96+
@ cdecl MmFreeMemory()
97+
@ cdecl MmGetBiosMemoryMap()
98+
@ cdecl MmGetHighestPhysicalPage()
99+
@ cdecl MmGetLoaderPagesSpanned()
100+
@ cdecl MmGetMemoryMap()
101+
@ cdecl MmGetSystemMemoryMapTypeString()
102+
@ cdecl MmGetTotalPagesInLookupTable()
103+
104+
# NtLdr options
105+
@ cdecl NtLdrGetNextOption()
106+
@ cdecl NtLdrGetOption()
107+
@ cdecl NtLdrGetOptionEx()
108+
@ cdecl NtLdrGetOptionExN()
109+
@ cdecl NtLdrAddOptions()
110+
111+
# PeLdr
112+
@ cdecl PeLdrAllocateDataTableEntry()
113+
@ cdecl PeLdrCheckForLoadedDll()
114+
@ cdecl PeLdrFreeDataTableEntry()
115+
@ cdecl PeLdrImportDllLoadCallback()
116+
@ cdecl PeLdrInitSecurityCookie()
117+
@ cdecl PeLdrLoadBootImage()
118+
@ cdecl PeLdrLoadImage()
119+
@ cdecl PeLdrLoadImageEx()
120+
@ cdecl PeLdrScanImportDescriptorTable()
121+
122+
# UI
123+
@ cdecl UiDisplayMenu()
124+
@ cdecl UiDrawBackdrop()
125+
@ cdecl UiDrawProgressBarCenter()
126+
@ cdecl UiDrawStatusText()
127+
@ cdecl UiDrawText()
128+
@ cdecl UiEditBox()
129+
@ cdecl UiGetMenuBgColor()
130+
@ cdecl UiGetScreenHeight()
131+
@ cdecl UiIndicateProgress()
132+
@ cdecl UiInitialize()
133+
@ cdecl UiMessageBox()
134+
@ cdecl UiMessageBoxCritical()
135+
@ cdecl UiResetForSOS()
136+
@ cdecl UiSetProgressBarSubset()
137+
@ cdecl UiSetProgressBarText()
138+
@ cdecl UiShowMessageBoxesInArgv()
139+
@ cdecl UiShowMessageBoxesInSection()
140+
@ cdecl UiUnInitialize()
141+
@ cdecl UiUpdateProgressBar()
142+
@ cdecl TuiPrintf()
143+
144+
# Other
145+
@ cdecl ChainLoadBiosBootSectorCode()
146+
@ cdecl ConstructArcPath()
147+
@ cdecl DissectArcPath()
148+
@ cdecl DiskStopFloppyMotor()
149+
@ cdecl DriveMapGetBiosDriveNumber()
150+
@ cdecl FrldrGetBootDrive()
151+
@ cdecl FrldrGetBootPartition()
152+
@ cdecl FrLdrGetBootPath()
153+
@ cdecl FsGetServiceName()
154+
@ cdecl FsOpenFile() # Why not ArcOpen?
155+
@ cdecl GetArgumentValue()
156+
@ cdecl GetBootMgrInfo()
157+
@ cdecl IsAcpiPresent()
158+
@ cdecl LoadSettings()
159+
@ cdecl MachHwDetect()
160+
@ cdecl MachPrepareForReactOS()
161+
@ cdecl MachGetExtendedBIOSData()
162+
@ cdecl MachVideoGetFontsFromFirmware()
163+
@ cdecl PxeCallApi()
164+
@ cdecl RamDiskInitialize()
165+
@ cdecl Reboot()
166+
@ cdecl Relocator16Boot()
167+
@ cdecl StallExecutionProcessor()
168+
169+
# Additional stuff for scsiport
170+
@ stdcall CpDoesPortExist(ptr)
171+
@ stdcall CpEnableFifo(ptr long)
172+
@ stdcall CpGetByte(ptr ptr long long)
173+
@ stdcall CpInitialize(ptr ptr long)
174+
@ stdcall CpPutByte(ptr long)
175+
@ cdecl DissectArcPath2()
176+
@ cdecl -i386 DriveMapMapDrivesInSection()
177+
@ cdecl FsRegisterDevice()
178+
@ cdecl FsGetDeviceSpecific()
179+
@ cdecl FsSetDeviceSpecific()
180+
@ stdcall ExAllocatePool(long long)
181+
@ stdcall ExAllocatePoolWithTag(long long long)
182+
@ stdcall ExFreePool(ptr)
183+
@ stdcall ExFreePoolWithTag(ptr long)
184+
@ cdecl MmSetMemoryType()

boot/freeldr/freeldr/lib/debug.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,12 +424,46 @@ DbgParseDebugChannels(PCHAR Value)
424424

425425
#else
426426

427+
#undef DebugInit
428+
VOID
429+
DebugInit(
430+
_In_ PCSTR DebugString)
431+
{
432+
UNREFERENCED_PARAMETER(DebugString);
433+
}
434+
427435
ULONG
428436
DbgPrint(PCCH Format, ...)
429437
{
438+
UNREFERENCED_PARAMETER(Format);
430439
return 0;
431440
}
432441

442+
VOID
443+
DbgPrint2(ULONG Mask, ULONG Level, const char *File, ULONG Line, char *Format, ...)
444+
{
445+
UNREFERENCED_PARAMETER(Mask);
446+
UNREFERENCED_PARAMETER(Level);
447+
UNREFERENCED_PARAMETER(File);
448+
UNREFERENCED_PARAMETER(Line);
449+
UNREFERENCED_PARAMETER(Format);
450+
}
451+
452+
VOID
453+
DebugDumpBuffer(ULONG Mask, PVOID Buffer, ULONG Length)
454+
{
455+
UNREFERENCED_PARAMETER(Mask);
456+
UNREFERENCED_PARAMETER(Buffer);
457+
UNREFERENCED_PARAMETER(Length);
458+
}
459+
460+
#undef DbgParseDebugChannels
461+
VOID
462+
DbgParseDebugChannels(PCHAR Value)
463+
{
464+
UNREFERENCED_PARAMETER(Value);
465+
}
466+
433467
#endif // DBG
434468

435469
ULONG

boot/freeldr/freeldr/lib/mm/meminit.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,14 @@ DbgDumpMemoryMap(
109109
}
110110
DbgPrint("\n");
111111
}
112+
#else
113+
/* Dummy, so we can export it */
114+
PCSTR
115+
MmGetSystemMemoryMapTypeString(
116+
TYPE_OF_MEMORY Type)
117+
{
118+
return "-";
119+
}
112120
#endif
113121

114122
ULONG

boot/freeldr/freeldr/pcat.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ elseif(ARCH STREQUAL "amd64")
2222
endif()
2323

2424

25-
spec2def(freeldr_pe.exe freeldr.spec)
25+
spec2def(freeldr.sys freeldr.spec ADD_IMPORTLIB)
2626

2727
list(APPEND PCATLDR_ARC_SOURCE
2828
${FREELDR_ARC_SOURCE}

0 commit comments

Comments
 (0)