mirror of
https://github.com/N64Recomp/N64Recomp.git
synced 2025-05-21 19:04:58 +00:00
Modding Support PR 1 (Instruction tables, modding support, mod symbol format, library conversion) (#89)
* Initial implementation of binary operation table * Initial implementation of unary operation table * More binary op types, moved binary expression string generation into separate function * Added and implemented conditional branch instruction table * Fixed likely swap on bgezal, fixed extra indent branch close and missing indent on branch statement * Add operands for other uses of float registers * Added CHECK_FR generation to binary operation processing, moved float comparison instructions to binary op table * Finished moving float arithmetic instructions to operation tables * Added store instruction operation table * Created Generator interface, separated operation types and tables and C generation code into new files * Fix mov.d using the wrong input operand * Move recompiler core logic into a core library and make the existing CLI consume the core library * Removed unnecessary config input to recompilation functions * Moved parts of recomp_port.h into new internal headers in src folder * Changed recomp port naming to N64Recomp * Remove some unused code and document which Context fields are actually required for recompilation * Implement mod symbol parsing * Restructure mod symbols to make replacements global instead of per-section * Refactor elf parsing into static Context method for reusability * Move elf parsing into a separate library * WIP elf to mod tool, currently working without relocations or API exports/imports * Make mod tool emit relocs and patch binary for non-relocatable symbol references as needed * Implemented writing import and exports in the mod tool * Add dependencies to the mod symbol format, finish exporting and importing of mod symbols * Add first pass offline mod recompiler (generates C from mods that can be compiled and linked into a dynamic library) * Add strict mode and ability to generate exports for normal recompilation (for patches) * Move mod context fields into base context, move import symbols into separate vector, misc cleanup * Some cleanup by making some Context members private * Add events (from dependencies and exported) and callbacks to the mod symbol format and add support to them in elf parsing * Add runtime-driven fields to offline mod recompiler, fix event symbol relocs using the wrong section in the mod tool * Move file header writing outside of function recompilation * Allow cross-section relocations, encode exact target section in mod relocations, add way to tag reference symbol relocations * Add local symbol addresses array to offline mod recompiler output and rename original one to reference section addresses * Add more comments to the offline mod recompiler's output * Fix handling of section load addresses to match objcopy behavior, added event parsing to dependency tomls, minor cleanup * Fixed incorrect size used for finding section segments * Add missing includes for libstdc++ * Rework callbacks and imports to use the section name for identifying the dependency instead of relying on per-dependency tomls
This commit is contained in:
parent
f8d439aeee
commit
5b17bf8bb5
18 changed files with 5121 additions and 2515 deletions
660
src/symbol_lists.cpp
Normal file
660
src/symbol_lists.cpp
Normal file
|
@ -0,0 +1,660 @@
|
|||
#include "n64recomp.h"
|
||||
|
||||
const std::unordered_set<std::string> N64Recomp::reimplemented_funcs{
|
||||
// OS initialize functions
|
||||
"__osInitialize_common",
|
||||
"osInitialize",
|
||||
"osGetMemSize",
|
||||
// Audio interface functions
|
||||
"osAiGetLength",
|
||||
"osAiGetStatus",
|
||||
"osAiSetFrequency",
|
||||
"osAiSetNextBuffer",
|
||||
// Video interface functions
|
||||
"osViSetXScale",
|
||||
"osViSetYScale",
|
||||
"osCreateViManager",
|
||||
"osViBlack",
|
||||
"osViSetSpecialFeatures",
|
||||
"osViGetCurrentFramebuffer",
|
||||
"osViGetNextFramebuffer",
|
||||
"osViSwapBuffer",
|
||||
"osViSetMode",
|
||||
"osViSetEvent",
|
||||
// RDP functions
|
||||
"osDpSetNextBuffer",
|
||||
// RSP functions
|
||||
"osSpTaskLoad",
|
||||
"osSpTaskStartGo",
|
||||
"osSpTaskYield",
|
||||
"osSpTaskYielded",
|
||||
"__osSpSetPc",
|
||||
// Controller functions
|
||||
"osContInit",
|
||||
"osContStartReadData",
|
||||
"osContGetReadData",
|
||||
"osContStartQuery",
|
||||
"osContGetQuery",
|
||||
"osContSetCh",
|
||||
// EEPROM functions
|
||||
"osEepromProbe",
|
||||
"osEepromWrite",
|
||||
"osEepromLongWrite",
|
||||
"osEepromRead",
|
||||
"osEepromLongRead",
|
||||
// Rumble functions
|
||||
"__osMotorAccess",
|
||||
"osMotorInit",
|
||||
"osMotorStart",
|
||||
"osMotorStop",
|
||||
// PFS functions
|
||||
"osPfsInitPak",
|
||||
"osPfsFreeBlocks",
|
||||
"osPfsAllocateFile",
|
||||
"osPfsDeleteFile",
|
||||
"osPfsFileState",
|
||||
"osPfsFindFile",
|
||||
"osPfsReadWriteFile",
|
||||
// Parallel interface (cartridge, DMA, etc.) functions
|
||||
"osCartRomInit",
|
||||
"osCreatePiManager",
|
||||
"osPiStartDma",
|
||||
"osEPiStartDma",
|
||||
"osPiGetStatus",
|
||||
"osEPiRawStartDma",
|
||||
"osEPiReadIo",
|
||||
// Flash saving functions
|
||||
"osFlashInit",
|
||||
"osFlashReadStatus",
|
||||
"osFlashReadId",
|
||||
"osFlashClearStatus",
|
||||
"osFlashAllErase",
|
||||
"osFlashAllEraseThrough",
|
||||
"osFlashSectorErase",
|
||||
"osFlashSectorEraseThrough",
|
||||
"osFlashCheckEraseEnd",
|
||||
"osFlashWriteBuffer",
|
||||
"osFlashWriteArray",
|
||||
"osFlashReadArray",
|
||||
"osFlashChange",
|
||||
// Threading functions
|
||||
"osCreateThread",
|
||||
"osStartThread",
|
||||
"osStopThread",
|
||||
"osDestroyThread",
|
||||
"osSetThreadPri",
|
||||
"osGetThreadPri",
|
||||
"osGetThreadId",
|
||||
// Message Queue functions
|
||||
"osCreateMesgQueue",
|
||||
"osRecvMesg",
|
||||
"osSendMesg",
|
||||
"osJamMesg",
|
||||
"osSetEventMesg",
|
||||
// Timer functions
|
||||
"osGetTime",
|
||||
"osSetTimer",
|
||||
"osStopTimer",
|
||||
// Voice functions
|
||||
"osVoiceSetWord",
|
||||
"osVoiceCheckWord",
|
||||
"osVoiceStopReadData",
|
||||
"osVoiceInit",
|
||||
"osVoiceMaskDictionary",
|
||||
"osVoiceStartReadData",
|
||||
"osVoiceControlGain",
|
||||
"osVoiceGetReadData",
|
||||
"osVoiceClearDictionary",
|
||||
// interrupt functions
|
||||
"osSetIntMask",
|
||||
"__osDisableInt",
|
||||
"__osRestoreInt",
|
||||
// TLB functions
|
||||
"osVirtualToPhysical",
|
||||
// Coprocessor 0/1 functions
|
||||
"osGetCount",
|
||||
"__osSetFpcCsr",
|
||||
// Cache funcs
|
||||
"osInvalDCache",
|
||||
"osInvalICache",
|
||||
"osWritebackDCache",
|
||||
"osWritebackDCacheAll",
|
||||
// Debug functions
|
||||
"is_proutSyncPrintf",
|
||||
"__checkHardware_msp",
|
||||
"__checkHardware_kmc",
|
||||
"__checkHardware_isv",
|
||||
"__osInitialize_msp",
|
||||
"__osInitialize_kmc",
|
||||
"__osInitialize_isv",
|
||||
"__osRdbSend",
|
||||
// ido math routines
|
||||
"__ull_div",
|
||||
"__ll_div",
|
||||
"__ll_mul",
|
||||
"__ull_rem",
|
||||
"__ull_to_d",
|
||||
"__ull_to_f",
|
||||
};
|
||||
|
||||
const std::unordered_set<std::string> N64Recomp::ignored_funcs {
|
||||
// OS initialize functions
|
||||
"__createSpeedParam",
|
||||
"__osInitialize_common",
|
||||
"osInitialize",
|
||||
"osGetMemSize",
|
||||
// Audio interface functions
|
||||
"osAiGetLength",
|
||||
"osAiGetStatus",
|
||||
"osAiSetFrequency",
|
||||
"osAiSetNextBuffer",
|
||||
"__osAiDeviceBusy",
|
||||
// Video interface functions
|
||||
"osViBlack",
|
||||
"osViFade",
|
||||
"osViGetCurrentField",
|
||||
"osViGetCurrentFramebuffer",
|
||||
"osViGetCurrentLine",
|
||||
"osViGetCurrentMode",
|
||||
"osViGetNextFramebuffer",
|
||||
"osViGetStatus",
|
||||
"osViRepeatLine",
|
||||
"osViSetEvent",
|
||||
"osViSetMode",
|
||||
"osViSetSpecialFeatures",
|
||||
"osViSetXScale",
|
||||
"osViSetYScale",
|
||||
"osViSwapBuffer",
|
||||
"osCreateViManager",
|
||||
"viMgrMain",
|
||||
"__osViInit",
|
||||
"__osViSwapContext",
|
||||
"__osViGetCurrentContext",
|
||||
// RDP functions
|
||||
"osDpGetCounters",
|
||||
"osDpSetStatus",
|
||||
"osDpGetStatus",
|
||||
"osDpSetNextBuffer",
|
||||
"__osDpDeviceBusy",
|
||||
// RSP functions
|
||||
"osSpTaskLoad",
|
||||
"osSpTaskStartGo",
|
||||
"osSpTaskYield",
|
||||
"osSpTaskYielded",
|
||||
"__osSpDeviceBusy",
|
||||
"__osSpGetStatus",
|
||||
"__osSpRawStartDma",
|
||||
"__osSpRawReadIo",
|
||||
"__osSpRawWriteIo",
|
||||
"__osSpSetPc",
|
||||
"__osSpSetStatus",
|
||||
// Controller functions
|
||||
"osContGetQuery",
|
||||
"osContGetReadData",
|
||||
"osContInit",
|
||||
"osContReset",
|
||||
"osContSetCh",
|
||||
"osContStartQuery",
|
||||
"osContStartReadData",
|
||||
"__osContAddressCrc",
|
||||
"__osContDataCrc",
|
||||
"__osContGetInitData",
|
||||
"__osContRamRead",
|
||||
"__osContRamWrite",
|
||||
"__osContChannelReset",
|
||||
// EEPROM functions
|
||||
"osEepromLongRead",
|
||||
"osEepromLongWrite",
|
||||
"osEepromProbe",
|
||||
"osEepromRead",
|
||||
"osEepromWrite",
|
||||
"__osEepStatus",
|
||||
// Rumble functions
|
||||
"osMotorInit",
|
||||
"osMotorStart",
|
||||
"osMotorStop",
|
||||
"__osMotorAccess",
|
||||
"_MakeMotorData",
|
||||
// Pack functions
|
||||
"__osCheckId",
|
||||
"__osCheckPackId",
|
||||
"__osGetId",
|
||||
"__osPfsRWInode",
|
||||
"__osRepairPackId",
|
||||
"__osPfsSelectBank",
|
||||
"__osCheckPackId",
|
||||
"ramromMain",
|
||||
// PFS functions
|
||||
"osPfsAllocateFile",
|
||||
"osPfsChecker",
|
||||
"osPfsDeleteFile",
|
||||
"osPfsFileState",
|
||||
"osPfsFindFile",
|
||||
"osPfsFreeBlocks",
|
||||
"osPfsGetLabel",
|
||||
"osPfsInit",
|
||||
"osPfsInitPak",
|
||||
"osPfsIsPlug",
|
||||
"osPfsNumFiles",
|
||||
"osPfsRepairId",
|
||||
"osPfsReadWriteFile",
|
||||
"__osPackEepReadData",
|
||||
"__osPackEepWriteData",
|
||||
"__osPackRamReadData",
|
||||
"__osPackRamWriteData",
|
||||
"__osPackReadData",
|
||||
"__osPackRequestData",
|
||||
"__osPfsGetInitData",
|
||||
"__osPfsGetOneChannelData",
|
||||
"__osPfsGetStatus",
|
||||
"__osPfsRequestData",
|
||||
"__osPfsRequestOneChannel",
|
||||
"__osPfsCreateAccessQueue",
|
||||
"__osPfsCheckRamArea",
|
||||
"__osPfsGetNextPage",
|
||||
// Low level serial interface functions
|
||||
"__osSiDeviceBusy",
|
||||
"__osSiGetStatus",
|
||||
"__osSiRawStartDma",
|
||||
"__osSiRawReadIo",
|
||||
"__osSiRawWriteIo",
|
||||
"__osSiCreateAccessQueue",
|
||||
"__osSiGetAccess",
|
||||
"__osSiRelAccess",
|
||||
// Parallel interface (cartridge, DMA, etc.) functions
|
||||
"osCartRomInit",
|
||||
"osLeoDiskInit",
|
||||
"osCreatePiManager",
|
||||
"__osDevMgrMain",
|
||||
"osPiGetCmdQueue",
|
||||
"osPiGetStatus",
|
||||
"osPiReadIo",
|
||||
"osPiStartDma",
|
||||
"osPiWriteIo",
|
||||
"osEPiGetDeviceType",
|
||||
"osEPiStartDma",
|
||||
"osEPiWriteIo",
|
||||
"osEPiReadIo",
|
||||
"osPiRawStartDma",
|
||||
"osPiRawReadIo",
|
||||
"osPiRawWriteIo",
|
||||
"osEPiRawStartDma",
|
||||
"osEPiRawReadIo",
|
||||
"osEPiRawWriteIo",
|
||||
"__osPiRawStartDma",
|
||||
"__osPiRawReadIo",
|
||||
"__osPiRawWriteIo",
|
||||
"__osEPiRawStartDma",
|
||||
"__osEPiRawReadIo",
|
||||
"__osEPiRawWriteIo",
|
||||
"__osPiDeviceBusy",
|
||||
"__osPiCreateAccessQueue",
|
||||
"__osPiGetAccess",
|
||||
"__osPiRelAccess",
|
||||
"__osLeoAbnormalResume",
|
||||
"__osLeoInterrupt",
|
||||
"__osLeoResume",
|
||||
// Flash saving functions
|
||||
"osFlashInit",
|
||||
"osFlashReadStatus",
|
||||
"osFlashReadId",
|
||||
"osFlashClearStatus",
|
||||
"osFlashAllErase",
|
||||
"osFlashAllEraseThrough",
|
||||
"osFlashSectorErase",
|
||||
"osFlashSectorEraseThrough",
|
||||
"osFlashCheckEraseEnd",
|
||||
"osFlashWriteBuffer",
|
||||
"osFlashWriteArray",
|
||||
"osFlashReadArray",
|
||||
"osFlashChange",
|
||||
// Threading functions
|
||||
"osCreateThread",
|
||||
"osStartThread",
|
||||
"osStopThread",
|
||||
"osDestroyThread",
|
||||
"osYieldThread",
|
||||
"osSetThreadPri",
|
||||
"osGetThreadPri",
|
||||
"osGetThreadId",
|
||||
"__osDequeueThread",
|
||||
// Message Queue functions
|
||||
"osCreateMesgQueue",
|
||||
"osSendMesg",
|
||||
"osJamMesg",
|
||||
"osRecvMesg",
|
||||
"osSetEventMesg",
|
||||
// Timer functions
|
||||
"osStartTimer",
|
||||
"osSetTimer",
|
||||
"osStopTimer",
|
||||
"osGetTime",
|
||||
"__osInsertTimer",
|
||||
"__osTimerInterrupt",
|
||||
"__osTimerServicesInit",
|
||||
"__osSetTimerIntr",
|
||||
// Voice functions
|
||||
"osVoiceSetWord",
|
||||
"osVoiceCheckWord",
|
||||
"osVoiceStopReadData",
|
||||
"osVoiceInit",
|
||||
"osVoiceMaskDictionary",
|
||||
"osVoiceStartReadData",
|
||||
"osVoiceControlGain",
|
||||
"osVoiceGetReadData",
|
||||
"osVoiceClearDictionary",
|
||||
"__osVoiceCheckResult",
|
||||
"__osVoiceContRead36",
|
||||
"__osVoiceContWrite20",
|
||||
"__osVoiceContWrite4",
|
||||
"__osVoiceContRead2",
|
||||
"__osVoiceSetADConverter",
|
||||
"__osVoiceContDataCrc",
|
||||
"__osVoiceGetStatus",
|
||||
"corrupted",
|
||||
"corrupted_init",
|
||||
// exceptasm functions
|
||||
"__osExceptionPreamble",
|
||||
"__osException",
|
||||
"__ptExceptionPreamble",
|
||||
"__ptException",
|
||||
"send_mesg",
|
||||
"handle_CpU",
|
||||
"__osEnqueueAndYield",
|
||||
"__osEnqueueThread",
|
||||
"__osPopThread",
|
||||
"__osNop",
|
||||
"__osDispatchThread",
|
||||
"__osCleanupThread",
|
||||
"osGetCurrFaultedThread",
|
||||
"osGetNextFaultedThread",
|
||||
// interrupt functions
|
||||
"osSetIntMask",
|
||||
"osGetIntMask",
|
||||
"__osDisableInt",
|
||||
"__osRestoreInt",
|
||||
"__osSetGlobalIntMask",
|
||||
"__osResetGlobalIntMask",
|
||||
// TLB functions
|
||||
"osMapTLB",
|
||||
"osUnmapTLB",
|
||||
"osUnmapTLBAll",
|
||||
"osSetTLBASID",
|
||||
"osMapTLBRdb",
|
||||
"osVirtualToPhysical",
|
||||
"__osGetTLBHi",
|
||||
"__osGetTLBLo0",
|
||||
"__osGetTLBLo1",
|
||||
"__osGetTLBPageMask",
|
||||
"__osGetTLBASID",
|
||||
"__osProbeTLB",
|
||||
// Coprocessor 0/1 functions
|
||||
"__osSetCount",
|
||||
"osGetCount",
|
||||
"__osSetSR",
|
||||
"__osGetSR",
|
||||
"__osSetCause",
|
||||
"__osGetCause",
|
||||
"__osSetCompare",
|
||||
"__osGetCompare",
|
||||
"__osSetConfig",
|
||||
"__osGetConfig",
|
||||
"__osSetWatchLo",
|
||||
"__osGetWatchLo",
|
||||
"__osSetFpcCsr",
|
||||
// Cache funcs
|
||||
"osInvalDCache",
|
||||
"osInvalICache",
|
||||
"osWritebackDCache",
|
||||
"osWritebackDCacheAll",
|
||||
// Microcodes
|
||||
"rspbootTextStart",
|
||||
"gspF3DEX2_fifoTextStart",
|
||||
"gspS2DEX2_fifoTextStart",
|
||||
"gspL3DEX2_fifoTextStart",
|
||||
// Debug functions
|
||||
"msp_proutSyncPrintf",
|
||||
"__osInitialize_msp",
|
||||
"__checkHardware_msp",
|
||||
"kmc_proutSyncPrintf",
|
||||
"__osInitialize_kmc",
|
||||
"__checkHardware_kmc",
|
||||
"isPrintfInit",
|
||||
"is_proutSyncPrintf",
|
||||
"__osInitialize_isv",
|
||||
"__checkHardware_isv",
|
||||
"__isExpJP",
|
||||
"__isExp",
|
||||
"__osRdbSend",
|
||||
"__rmonSendData",
|
||||
"__rmonWriteMem",
|
||||
"__rmonReadWordAt",
|
||||
"__rmonWriteWordTo",
|
||||
"__rmonWriteMem",
|
||||
"__rmonSetSRegs",
|
||||
"__rmonSetVRegs",
|
||||
"__rmonStopThread",
|
||||
"__rmonGetThreadStatus",
|
||||
"__rmonGetVRegs",
|
||||
"__rmonHitSpBreak",
|
||||
"__rmonRunThread",
|
||||
"__rmonClearBreak",
|
||||
"__rmonGetBranchTarget",
|
||||
"__rmonGetSRegs",
|
||||
"__rmonSetBreak",
|
||||
"__rmonReadMem",
|
||||
"__rmonRunThread",
|
||||
"__rmonCopyWords",
|
||||
"__rmonExecute",
|
||||
"__rmonGetExceptionStatus",
|
||||
"__rmonGetExeName",
|
||||
"__rmonGetFRegisters",
|
||||
"__rmonGetGRegisters",
|
||||
"__rmonGetRegionCount",
|
||||
"__rmonGetRegions",
|
||||
"__rmonGetRegisterContents",
|
||||
"__rmonGetTCB",
|
||||
"__rmonHitBreak",
|
||||
"__rmonHitCpuFault",
|
||||
"__rmonIdleRCP",
|
||||
"__rmonInit",
|
||||
"__rmonIOflush",
|
||||
"__rmonIOhandler",
|
||||
"__rmonIOputw",
|
||||
"__rmonListBreak",
|
||||
"__rmonListProcesses",
|
||||
"__rmonListThreads",
|
||||
"__rmonLoadProgram",
|
||||
"__rmonMaskIdleThreadInts",
|
||||
"__rmonMemcpy",
|
||||
"__rmonPanic",
|
||||
"__rmonRCPrunning",
|
||||
"__rmonRunRCP",
|
||||
"__rmonSendFault",
|
||||
"__rmonSendHeader",
|
||||
"__rmonSendReply",
|
||||
"__rmonSetComm",
|
||||
"__rmonSetFault",
|
||||
"__rmonSetFRegisters",
|
||||
"__rmonSetGRegisters",
|
||||
"__rmonSetSingleStep",
|
||||
"__rmonStepRCP",
|
||||
"__rmonStopUserThreads",
|
||||
"__rmonThreadStatus",
|
||||
"__rmon",
|
||||
"__rmonRunThread",
|
||||
"rmonFindFaultedThreads",
|
||||
"rmonMain",
|
||||
"rmonPrintf",
|
||||
"rmonGetRcpRegister",
|
||||
"kdebugserver",
|
||||
"send",
|
||||
|
||||
// ido math routines
|
||||
"__ll_div",
|
||||
"__ll_lshift",
|
||||
"__ll_mod",
|
||||
"__ll_mul",
|
||||
"__ll_rem",
|
||||
"__ll_rshift",
|
||||
"__ull_div",
|
||||
"__ull_divremi",
|
||||
"__ull_rem",
|
||||
"__ull_rshift",
|
||||
"__d_to_ll",
|
||||
"__f_to_ll",
|
||||
"__d_to_ull",
|
||||
"__f_to_ull",
|
||||
"__ll_to_d",
|
||||
"__ll_to_f",
|
||||
"__ull_to_d",
|
||||
"__ull_to_f",
|
||||
// Setjmp/longjmp for mario party
|
||||
"setjmp",
|
||||
"longjmp"
|
||||
// 64-bit functions for banjo
|
||||
"func_8025C29C",
|
||||
"func_8025C240",
|
||||
"func_8025C288",
|
||||
|
||||
// rmonregs
|
||||
"LoadStoreSU",
|
||||
"LoadStoreVU",
|
||||
"SetUpForRCPop",
|
||||
"CleanupFromRCPop",
|
||||
"__rmonGetGRegisters",
|
||||
"__rmonSetGRegisters",
|
||||
"__rmonGetFRegisters",
|
||||
"__rmonSetFRegisters",
|
||||
"rmonGetRcpRegister",
|
||||
"__rmonGetSRegs",
|
||||
"__rmonSetSRegs",
|
||||
"__rmonGetVRegs",
|
||||
"__rmonSetVRegs",
|
||||
"__rmonGetRegisterContents",
|
||||
|
||||
// rmonbrk
|
||||
"SetTempBreakpoint",
|
||||
"ClearTempBreakpoint",
|
||||
"__rmonSetBreak",
|
||||
"__rmonListBreak",
|
||||
"__rmonClearBreak",
|
||||
"__rmonGetBranchTarget",
|
||||
"IsJump",
|
||||
"__rmonSetSingleStep",
|
||||
"__rmonGetExceptionStatus",
|
||||
"rmonSendBreakMessage",
|
||||
"__rmonHitBreak",
|
||||
"__rmonHitSpBreak",
|
||||
"__rmonHitCpuFault",
|
||||
"rmonFindFaultedThreads",
|
||||
|
||||
// kdebugserver
|
||||
"string_to_u32",
|
||||
"send_packet",
|
||||
"clear_IP6",
|
||||
"send",
|
||||
"kdebugserver",
|
||||
};
|
||||
|
||||
const std::unordered_set<std::string> N64Recomp::renamed_funcs{
|
||||
// Math
|
||||
"sincosf",
|
||||
"sinf",
|
||||
"cosf",
|
||||
"__sinf",
|
||||
"__cosf",
|
||||
"asinf",
|
||||
"acosf",
|
||||
"atanf",
|
||||
"atan2f",
|
||||
"tanf",
|
||||
"sqrt",
|
||||
"sqrtf",
|
||||
|
||||
// Memory
|
||||
"memcpy",
|
||||
"memset",
|
||||
"memmove",
|
||||
"memcmp",
|
||||
"strcmp",
|
||||
"strcat",
|
||||
"strcpy",
|
||||
"strchr",
|
||||
"strlen",
|
||||
"strtok",
|
||||
"sprintf",
|
||||
"bzero",
|
||||
"bcopy",
|
||||
"bcmp",
|
||||
|
||||
// long jumps
|
||||
"setjmp",
|
||||
"longjmp",
|
||||
|
||||
// Math 2
|
||||
"ldiv",
|
||||
"lldiv",
|
||||
"ceil",
|
||||
"ceilf",
|
||||
"floor",
|
||||
"floorf",
|
||||
"fmodf",
|
||||
"fmod",
|
||||
"modf",
|
||||
"lround",
|
||||
"lroundf",
|
||||
"nearbyint",
|
||||
"nearbyintf",
|
||||
"round",
|
||||
"roundf",
|
||||
"trunc",
|
||||
"truncf",
|
||||
|
||||
// printf family
|
||||
"vsprintf",
|
||||
"gcvt",
|
||||
"fcvt",
|
||||
"ecvt",
|
||||
|
||||
"__assert",
|
||||
|
||||
// allocations
|
||||
"malloc",
|
||||
"free",
|
||||
"realloc",
|
||||
"calloc",
|
||||
|
||||
// rand
|
||||
"rand",
|
||||
"srand",
|
||||
"random",
|
||||
|
||||
// gzip
|
||||
"huft_build",
|
||||
"huft_free",
|
||||
"inflate_codes",
|
||||
"inflate_stored",
|
||||
"inflate_fixed",
|
||||
"inflate_dynamic",
|
||||
"inflate_block",
|
||||
"inflate",
|
||||
"expand_gzip",
|
||||
"auRomDataRead"
|
||||
"data_write",
|
||||
"unzip",
|
||||
"updcrc",
|
||||
"clear_bufs",
|
||||
"fill_inbuf",
|
||||
"flush_window",
|
||||
|
||||
// libgcc math routines
|
||||
"__muldi3",
|
||||
"__divdi3",
|
||||
"__udivdi3",
|
||||
"__umoddi3",
|
||||
"div64_64",
|
||||
"div64_32",
|
||||
"__moddi3",
|
||||
"_matherr",
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue