[FREELDR] Export functions for a 2nd stage loader

This commit is contained in:
Timo Kreuzer 2024-10-02 12:07:09 +02:00
parent 2f9dde09e1
commit f81c1910ee
5 changed files with 226 additions and 47 deletions

View file

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

View file

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

View file

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

View file

@ -109,6 +109,14 @@ DbgDumpMemoryMap(
}
DbgPrint("\n");
}
#else
/* Dummy, so we can export it */
PCSTR
MmGetSystemMemoryMapTypeString(
TYPE_OF_MEMORY Type)
{
return "-";
}
#endif
ULONG

View file

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