https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f81c1910ee1cc29c01bca03f0e52551eec647dba
commit f81c1910ee1cc29c01bca03f0e52551eec647dba Author: Timo Kreuzer <timo.kreu...@reactos.org> AuthorDate: Wed Oct 2 12:07:09 2024 +0200 Commit: Timo Kreuzer <timo.kreu...@reactos.org> CommitDate: Tue Feb 4 16:45:48 2025 +0200 [FREELDR] Export functions for a 2nd stage loader --- boot/freeldr/freeldr/CMakeLists.txt | 2 +- boot/freeldr/freeldr/freeldr.spec | 227 +++++++++++++++++++++++++++------- boot/freeldr/freeldr/lib/debug.c | 34 +++++ boot/freeldr/freeldr/lib/mm/meminit.c | 8 ++ boot/freeldr/freeldr/pcat.cmake | 2 +- 5 files changed, 226 insertions(+), 47 deletions(-) diff --git a/boot/freeldr/freeldr/CMakeLists.txt b/boot/freeldr/freeldr/CMakeLists.txt index b97b15a1763..2a349833b07 100644 --- a/boot/freeldr/freeldr/CMakeLists.txt +++ b/boot/freeldr/freeldr/CMakeLists.txt @@ -131,7 +131,7 @@ list(APPEND FREELDR_BASE_SOURCE if(ARCH STREQUAL "i386") # Must be included together with disk/scsiport.c list(APPEND FREELDR_BASE_SOURCE - ${CMAKE_CURRENT_BINARY_DIR}/freeldr_pe.def) + ${CMAKE_CURRENT_BINARY_DIR}/freeldr.def) endif() include(pcat.cmake) diff --git a/boot/freeldr/freeldr/freeldr.spec b/boot/freeldr/freeldr/freeldr.spec index 3ffd70aac37..2ea08b1927c 100644 --- a/boot/freeldr/freeldr/freeldr.spec +++ b/boot/freeldr/freeldr/freeldr.spec @@ -1,47 +1,184 @@ @ stdcall RtlAssert(ptr ptr long ptr) -@ varargs ScsiDebugPrint(long str) -@ stdcall ScsiPortCompleteRequest(ptr long long long long) -@ stdcall ScsiPortConvertPhysicalAddressToUlong(long long) +@ 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 ScsiPortFlushDma(ptr) -@ stdcall ScsiPortFreeDeviceBase(ptr ptr) -@ stdcall ScsiPortGetBusData(ptr long long long ptr long) -@ stdcall ScsiPortGetDeviceBase(ptr long long long long long long) -@ stdcall ScsiPortGetLogicalUnit(ptr long long long) -@ stdcall ScsiPortGetPhysicalAddress(ptr ptr ptr long) -@ stdcall ScsiPortGetSrb(ptr long long long long) -@ stdcall ScsiPortGetUncachedExtension(ptr ptr long) -@ stdcall ScsiPortGetVirtualAddress(ptr long long) -@ stdcall ScsiPortInitialize(ptr ptr ptr ptr) -@ stdcall ScsiPortIoMapTransfer(ptr ptr long long) -@ stdcall ScsiPortLogError(ptr ptr long long long long long) -@ stdcall ScsiPortMoveMemory(ptr ptr long) -@ cdecl ScsiPortNotification() -@ stdcall ScsiPortReadPortBufferUchar(ptr ptr long) -@ stdcall ScsiPortReadPortBufferUshort(ptr ptr long) -@ stdcall ScsiPortReadPortBufferUlong(ptr ptr long) -@ stdcall ScsiPortReadPortUchar(ptr) -@ stdcall ScsiPortReadPortUshort(ptr) -@ stdcall ScsiPortReadPortUlong(ptr) -@ stdcall ScsiPortReadRegisterBufferUchar(ptr ptr long) -@ stdcall ScsiPortReadRegisterBufferUshort(ptr ptr long) -@ stdcall ScsiPortReadRegisterBufferUlong(ptr ptr long) -@ stdcall ScsiPortReadRegisterUchar(ptr) -@ stdcall ScsiPortReadRegisterUshort(ptr) -@ stdcall ScsiPortReadRegisterUlong(ptr) -@ stdcall ScsiPortSetBusDataByOffset(ptr long long long ptr long long) -@ stdcall ScsiPortStallExecution(long) -@ stdcall ScsiPortValidateRange(ptr long long long long long long) -@ stdcall ScsiPortWritePortBufferUchar(ptr ptr long) -@ stdcall ScsiPortWritePortBufferUshort(ptr ptr long) -@ stdcall ScsiPortWritePortBufferUlong(ptr ptr long) -@ stdcall ScsiPortWritePortUchar(ptr long) -@ stdcall ScsiPortWritePortUshort(ptr long) -@ stdcall ScsiPortWritePortUlong(ptr long) -@ stdcall ScsiPortWriteRegisterBufferUchar(ptr ptr long) -@ stdcall ScsiPortWriteRegisterBufferUshort(ptr ptr long) -@ stdcall ScsiPortWriteRegisterBufferUlong(ptr ptr long) -@ stdcall ScsiPortWriteRegisterUchar(ptr long) -@ stdcall ScsiPortWriteRegisterUshort(ptr long) -@ stdcall ScsiPortWriteRegisterUlong(ptr 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) + +# ARC +@ cdecl ArcClose() +@ cdecl ArcGetDiskCount() +@ cdecl ArcGetDiskInfo() +@ cdecl ArcGetFileInformation() +@ cdecl ArcGetTime() +@ cdecl ArcOpen() +@ cdecl ArcRead() +@ cdecl ArcSeek() + +# Debug +@ cdecl DbgParseDebugChannels() +@ cdecl DbgPrint(str) +@ cdecl DbgPrint2(long long str long str) +@ cdecl DebugDumpBuffer() +@ cdecl DebugInit() +@ cdecl FrLdrBugCheckWithMessage() +@ stdcall KeBugCheckEx(long long long long long) + +# Heap +@ cdecl FrLdrHeapAllocateEx() +@ cdecl FrLdrHeapFreeEx() +@ cdecl FrLdrHeapAlloc() +@ cdecl FrLdrHeapFree() +@ cdecl FrLdrTempAlloc() +@ cdecl FrLdrTempFree() +@ cdecl FrLdrHeapCleanupAll() + +# INI (check if we can move this to rosload) +@ cdecl IniAddSection() +@ cdecl IniAddSettingValueToSection() +@ cdecl IniCleanup() +@ cdecl IniGetFileSectionListHead() +@ cdecl IniGetNumSectionItems() +@ cdecl IniGetSectionSettingNameSize() +@ cdecl IniGetSectionSettingValueSize() +@ cdecl IniFileInitialize() +@ cdecl IniModifySettingValue() +@ cdecl IniOpenSection() +@ cdecl IniReadSettingByName() +@ cdecl IniReadSettingByNumber() + +# Mm +@ cdecl AddMemoryDescriptor() +@ cdecl MmAllocateHighestMemoryBelowAddress() +@ cdecl MmAllocateMemoryAtAddress() +@ cdecl MmAllocateMemoryWithType() +@ cdecl MmFreeMemory() +@ cdecl MmGetBiosMemoryMap() +@ cdecl MmGetHighestPhysicalPage() +@ cdecl MmGetLoaderPagesSpanned() +@ cdecl MmGetMemoryMap() +@ cdecl MmGetSystemMemoryMapTypeString() +@ cdecl MmGetTotalPagesInLookupTable() + +# NtLdr options +@ cdecl NtLdrGetNextOption() +@ cdecl NtLdrGetOption() +@ cdecl NtLdrGetOptionEx() +@ cdecl NtLdrGetOptionExN() +@ cdecl NtLdrAddOptions() + +# PeLdr +@ cdecl PeLdrAllocateDataTableEntry() +@ cdecl PeLdrCheckForLoadedDll() +@ cdecl PeLdrFreeDataTableEntry() +@ cdecl PeLdrImportDllLoadCallback() +@ cdecl PeLdrInitSecurityCookie() +@ cdecl PeLdrLoadBootImage() +@ cdecl PeLdrLoadImage() +@ cdecl PeLdrLoadImageEx() +@ cdecl PeLdrScanImportDescriptorTable() + +# UI +@ cdecl UiDisplayMenu() +@ cdecl UiDrawBackdrop() +@ cdecl UiDrawProgressBarCenter() +@ cdecl UiDrawStatusText() +@ cdecl UiDrawText() +@ cdecl UiEditBox() +@ cdecl UiGetMenuBgColor() +@ cdecl UiGetScreenHeight() +@ cdecl UiIndicateProgress() +@ cdecl UiInitialize() +@ cdecl UiMessageBox() +@ cdecl UiMessageBoxCritical() +@ cdecl UiResetForSOS() +@ cdecl UiSetProgressBarSubset() +@ cdecl UiSetProgressBarText() +@ cdecl UiShowMessageBoxesInArgv() +@ cdecl UiShowMessageBoxesInSection() +@ cdecl UiUnInitialize() +@ cdecl UiUpdateProgressBar() +@ cdecl TuiPrintf() + +# Other +@ cdecl ChainLoadBiosBootSectorCode() +@ cdecl ConstructArcPath() +@ cdecl DissectArcPath() +@ cdecl DiskStopFloppyMotor() +@ cdecl DriveMapGetBiosDriveNumber() +@ cdecl FrldrGetBootDrive() +@ cdecl FrldrGetBootPartition() +@ cdecl FrLdrGetBootPath() +@ cdecl FsGetServiceName() +@ cdecl FsOpenFile() # Why not ArcOpen? +@ cdecl GetArgumentValue() +@ cdecl GetBootMgrInfo() +@ cdecl IsAcpiPresent() +@ cdecl LoadSettings() +@ cdecl MachHwDetect() +@ cdecl MachPrepareForReactOS() +@ cdecl MachGetExtendedBIOSData() +@ cdecl MachVideoGetFontsFromFirmware() +@ cdecl PxeCallApi() +@ cdecl RamDiskInitialize() +@ cdecl Reboot() +@ cdecl Relocator16Boot() +@ cdecl StallExecutionProcessor() + +# Additional stuff for scsiport +@ stdcall CpDoesPortExist(ptr) +@ stdcall CpEnableFifo(ptr long) +@ stdcall CpGetByte(ptr ptr long long) +@ stdcall CpInitialize(ptr ptr long) +@ stdcall CpPutByte(ptr long) +@ cdecl DissectArcPath2() +@ cdecl -i386 DriveMapMapDrivesInSection() +@ cdecl FsRegisterDevice() +@ cdecl FsGetDeviceSpecific() +@ cdecl FsSetDeviceSpecific() +@ stdcall ExAllocatePool(long long) +@ stdcall ExAllocatePoolWithTag(long long long) +@ stdcall ExFreePool(ptr) +@ stdcall ExFreePoolWithTag(ptr long) +@ cdecl MmSetMemoryType() diff --git a/boot/freeldr/freeldr/lib/debug.c b/boot/freeldr/freeldr/lib/debug.c index c1f9d954cd3..efb059e2740 100644 --- a/boot/freeldr/freeldr/lib/debug.c +++ b/boot/freeldr/freeldr/lib/debug.c @@ -424,12 +424,46 @@ DbgParseDebugChannels(PCHAR Value) #else +#undef DebugInit +VOID +DebugInit( + _In_ PCSTR DebugString) +{ + UNREFERENCED_PARAMETER(DebugString); +} + ULONG DbgPrint(PCCH Format, ...) { + UNREFERENCED_PARAMETER(Format); return 0; } +VOID +DbgPrint2(ULONG Mask, ULONG Level, const char *File, ULONG Line, char *Format, ...) +{ + UNREFERENCED_PARAMETER(Mask); + UNREFERENCED_PARAMETER(Level); + UNREFERENCED_PARAMETER(File); + UNREFERENCED_PARAMETER(Line); + UNREFERENCED_PARAMETER(Format); +} + +VOID +DebugDumpBuffer(ULONG Mask, PVOID Buffer, ULONG Length) +{ + UNREFERENCED_PARAMETER(Mask); + UNREFERENCED_PARAMETER(Buffer); + UNREFERENCED_PARAMETER(Length); +} + +#undef DbgParseDebugChannels +VOID +DbgParseDebugChannels(PCHAR Value) +{ + UNREFERENCED_PARAMETER(Value); +} + #endif // DBG ULONG diff --git a/boot/freeldr/freeldr/lib/mm/meminit.c b/boot/freeldr/freeldr/lib/mm/meminit.c index fe3d29ebb12..b3b8ac3171e 100644 --- a/boot/freeldr/freeldr/lib/mm/meminit.c +++ b/boot/freeldr/freeldr/lib/mm/meminit.c @@ -109,6 +109,14 @@ DbgDumpMemoryMap( } DbgPrint("\n"); } +#else +/* Dummy, so we can export it */ +PCSTR +MmGetSystemMemoryMapTypeString( + TYPE_OF_MEMORY Type) +{ + return "-"; +} #endif ULONG diff --git a/boot/freeldr/freeldr/pcat.cmake b/boot/freeldr/freeldr/pcat.cmake index 020ae7e018a..02c85cf7110 100644 --- a/boot/freeldr/freeldr/pcat.cmake +++ b/boot/freeldr/freeldr/pcat.cmake @@ -22,7 +22,7 @@ elseif(ARCH STREQUAL "amd64") endif() -spec2def(freeldr_pe.exe freeldr.spec) +spec2def(freeldr.sys freeldr.spec ADD_IMPORTLIB) list(APPEND PCATLDR_ARC_SOURCE ${FREELDR_ARC_SOURCE}