From 33ed8429522f0735b3ee1d3d31e1ff4083e68cc7 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 2 Dec 2023 15:12:29 -0600 Subject: [PATCH] Split DVD, VI, and DEMO --- config/GMPE01_00/config.yml | 3 + config/GMPE01_00/splits.txt | 59 ++++++++++++++ config/GMPE01_00/symbols.txt | 144 ++++++++++++++++++----------------- configure.py | 26 +++++++ 4 files changed, 164 insertions(+), 68 deletions(-) diff --git a/config/GMPE01_00/config.yml b/config/GMPE01_00/config.yml index 63b0b3c4..ff0d6914 100644 --- a/config/GMPE01_00/config.yml +++ b/config/GMPE01_00/config.yml @@ -565,3 +565,6 @@ extract: - symbol: wrongdisc_en binary: wrongdisc_en.bin header: wrongdisc_en.inc +- symbol: DEMOFontBitmap + binary: DEMOFontBitmap.bin + header: DEMOFontBitmap.inc \ No newline at end of file diff --git a/config/GMPE01_00/splits.txt b/config/GMPE01_00/splits.txt index 102e7c88..59286405 100644 --- a/config/GMPE01_00/splits.txt +++ b/config/GMPE01_00/splits.txt @@ -447,6 +447,65 @@ dolphin/mtx/quat.c: dolphin/mtx/psmtx.c: .text start:0x800BC710 end:0x800BC9E8 +dolphin/dvd/dvdlow.c: + .text start:0x800BC9E8 end:0x800BD83C + .bss start:0x801A5E00 end:0x801A5EE0 + .sdata start:0x801D38E0 end:0x801D38E8 + .sbss start:0x801D4368 end:0x801D43B0 + +dolphin/dvd/dvdfs.c: + .text start:0x800BD83C end:0x800BE118 + .data start:0x8013C3E0 end:0x8013C548 + .sdata start:0x801D38E8 end:0x801D38F0 + .sbss start:0x801D43B0 end:0x801D43D0 + +dolphin/dvd/dvd.c: + .text start:0x800BE118 end:0x800C059C + .data start:0x8013C548 end:0x8013C660 + .bss start:0x801A5EE0 end:0x801A5FB8 + .sdata start:0x801D38F0 end:0x801D38F8 + .sbss start:0x801D43D0 end:0x801D4418 + +dolphin/dvd/dvdqueue.c: + .text start:0x800C059C end:0x800C0794 + .bss start:0x801A5FB8 end:0x801A5FD8 + +dolphin/dvd/dvderror.c: + .text start:0x800C0794 end:0x800C092C + .data start:0x8013C660 end:0x8013C6A8 + +dolphin/dvd/fstload.c: + .text start:0x800C092C end:0x800C0B6C + .data start:0x8013C6A8 end:0x8013C718 + .bss start:0x801A5FD8 end:0x801A6048 + .sdata start:0x801D38F8 end:0x801D3908 + .sbss start:0x801D4418 end:0x801D4428 + +dolphin/vi.c: + .text start:0x800C0B6C end:0x800C2980 + .data start:0x8013C718 end:0x8013C9E0 + .bss start:0x801A6048 end:0x801A6190 + .sbss start:0x801D4428 end:0x801D4478 + +dolphin/demo/DEMOFont.c: + .data start:0x8013C9E0 end:0x8013D5E0 + +dolphin/demo/DEMOInit.c: + .text start:0x800C2980 end:0x800C2988 + .sbss start:0x801D4478 end:0x801D4480 + +dolphin/demo/DEMOPuts.c: + .text start:0x800C2988 end:0x800C2F84 + .sbss start:0x801D4480 end:0x801D4488 + .sdata2 start:0x801D63B8 end:0x801D63D8 + +dolphin/demo/DEMOStats.c: + .text start:0x800C2F84 end:0x800C3CDC + .data start:0x8013D5E0 end:0x8013D748 + .sdata start:0x801D3908 end:0x801D3910 + .sbss start:0x801D4488 end:0x801D44E8 + .sdata2 start:0x801D63D8 end:0x801D63E8 + Runtime.PPCEABI.H/global_destructor_chain.c: .text start:0x800E2008 end:0x800E2068 .dtors start:0x8011DCE8 end:0x8011DCEC diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 7b6e4499..cd0f3d05 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5289,11 +5289,18 @@ lbl_8013C514 = .data:0x8013C514; // type:object size:0x34 jumptable_8013C5B4 = .data:0x8013C5B4; // type:object size:0x40 scope:local jumptable_8013C5F4 = .data:0x8013C5F4; // type:object size:0x34 scope:local jumptable_8013C628 = .data:0x8013C628; // type:object size:0x34 scope:local -lbl_8013C660 = .data:0x8013C660; // type:object size:0x48 data:4byte +ErrorTable = .data:0x8013C660; // type:object size:0x48 data:4byte scope:local @36 = .data:0x8013C6A8; // type:object size:0x1A scope:local data:string -lbl_8013C718 = .data:0x8013C718; // type:object size:0x164 +timing = .data:0x8013C718; // type:object size:0x130 scope:local +taps = .data:0x8013C848; // type:object size:0x32 scope:local jumptable_8013C87C = .data:0x8013C87C; // type:object size:0x58 scope:local -lbl_8013C9E0 = .data:0x8013C9E0; // type:object size:0xC00 +lbl_8013C8D4 = .data:0x8013C8D4; // type:object size:0x29 data:string +lbl_8013C900 = .data:0x8013C900; // type:object size:0x29 data:string +lbl_8013C92C = .data:0x8013C92C; // type:object size:0x29 data:string +lbl_8013C958 = .data:0x8013C958; // type:object size:0x29 data:string +lbl_8013C984 = .data:0x8013C984; // type:object size:0x29 data:string +lbl_8013C9B0 = .data:0x8013C9B0; // type:object size:0x29 data:string +DEMOFontBitmap = .data:0x8013C9E0; // type:object size:0xC00 align:32 lbl_8013D5E0 = .data:0x8013D5E0; // type:object size:0xC data:string lbl_8013D5EC = .data:0x8013D5EC; // type:object size:0x28 jumptable_8013D614 = .data:0x8013D614; // type:object size:0x28 scope:local @@ -5539,16 +5546,21 @@ IdleThread = .bss:0x801A5518; // type:object size:0x310 scope:local align:8 data DefaultThread = .bss:0x801A5828; // type:object size:0x310 scope:local align:8 data:4byte IdleContext = .bss:0x801A5B38; // type:object size:0x2C8 scope:local align:8 data:4byte CommandList = .bss:0x801A5E00; // type:object size:0x3C scope:local data:4byte -AlarmForTimeout = .bss:0x801A5E68; // type:object size:0x28 scope:local +AlarmForWA = .bss:0x801A5E40; // type:object size:0x28 scope:local align:8 +AlarmForTimeout = .bss:0x801A5E68; // type:object size:0x28 scope:local align:8 +AlarmForBreak = .bss:0x801A5E90; // type:object size:0x28 scope:local align:8 +Prev = .bss:0x801A5EB8; // type:object size:0xC scope:local +Curr = .bss:0x801A5EC4; // type:object size:0xC scope:local tmpBuffer = .bss:0x801A5EE0; // type:object size:0x80 scope:local align:32 DummyCommandBlock = .bss:0x801A5F60; // type:object size:0x30 scope:local +ResetAlarm = .bss:0x801A5F90; // type:object size:0x28 scope:local align:8 WaitingQueue = .bss:0x801A5FB8; // type:object size:0x20 scope:local data:4byte bb2Buf = .bss:0x801A5FD8; // type:object size:0x3F scope:local block$16 = .bss:0x801A6018; // type:object size:0x30 scope:local -regs = .bss:0x801A6048; // type:object size:0x78 data:2byte -lbl_801A60C0 = .bss:0x801A60C0; // type:object size:0x78 -lbl_801A6138 = .bss:0x801A6138; // type:object size:0x58 data:2byte -lbl_801A6190 = .bss:0x801A6190; // type:object size:0x20 +regs = .bss:0x801A6048; // type:object size:0x78 scope:local data:2byte +shdwRegs = .bss:0x801A60C0; // type:object size:0x78 scope:local +HorVer = .bss:0x801A6138; // type:object size:0x58 scope:local data:2byte +fontTexObj = .bss:0x801A6190; // type:object size:0x20 scope:local lbl_801A61B0 = .bss:0x801A61B0; // type:object size:0x10 lbl_801A61C0 = .bss:0x801A61C0; // type:object size:0x40 gxData = .bss:0x801A6200; // type:object size:0x4F8 scope:local @@ -5882,7 +5894,7 @@ __OSArenaLo = .sdata:0x801D38C0; // type:object size:0x4 scope:local data:4byte @32 = .sdata:0x801D38C8; // type:object size:0x2 scope:local data:string fontEncode$80 = .sdata:0x801D38D0; // type:object size:0x8 scope:local data:2byte Unit01 = .sdata:0x801D38D8; // type:object size:0x8 -lbl_801D38E0 = .sdata:0x801D38E0; // type:object size:0x8 data:4byte +FirstRead = .sdata:0x801D38E0; // type:object size:0x8 scope:local data:4byte lbl_801D38E8 = .sdata:0x801D38E8; // type:object size:0x8 data:string autoInvalidation = .sdata:0x801D38F0; // type:object size:0x4 scope:local data:4byte @35 = .sdata:0x801D38F8; // type:object size:0x2 scope:local data:string @@ -6541,26 +6553,24 @@ Reschedule = .sbss:0x801D4358; // type:object size:0x4 scope:local data:4byte __DBInterface = .sbss:0x801D4360; // type:object size:0x4 scope:global data:4byte DBVerbose = .sbss:0x801D4364; // type:object size:0x4 scope:global data:4byte StopAtNextInt = .sbss:0x801D4368; // type:object size:0x4 scope:local data:4byte -lbl_801D436C = .sbss:0x801D436C; // type:object size:0x4 data:4byte +LastLength = .sbss:0x801D436C; // type:object size:0x4 scope:local data:4byte Callback = .sbss:0x801D4370; // type:object size:0x4 scope:local data:4byte -lbl_801D4374 = .sbss:0x801D4374; // type:object size:0x4 data:4byte +ResetCoverCallback = .sbss:0x801D4374; // type:object size:0x4 scope:local data:4byte LastResetEnd = .sbss:0x801D4378; // type:object size:0x8 scope:local data:4byte ResetOccurred = .sbss:0x801D4380; // type:object size:0x4 scope:local data:4byte WaitingCoverClose = .sbss:0x801D4384; // type:object size:0x4 scope:local data:4byte -lbl_801D4388 = .sbss:0x801D4388; // type:object size:0x4 data:4byte +Breaking = .sbss:0x801D4388; // type:object size:0x4 scope:local data:4byte WorkAroundType = .sbss:0x801D438C; // type:object size:0x4 scope:local data:4byte WorkAroundSeekLocation = .sbss:0x801D4390; // type:object size:0x4 scope:local data:4byte -lbl_801D4398 = .sbss:0x801D4398; // type:object size:0x4 data:4byte -lbl_801D439C = .sbss:0x801D439C; // type:object size:0x4 data:4byte -lbl_801D43A0 = .sbss:0x801D43A0; // type:object size:0x4 data:4byte -lbl_801D43A4 = .sbss:0x801D43A4; // type:object size:0x4 data:4byte -lbl_801D43A8 = .sbss:0x801D43A8; // type:object size:0x4 data:4byte +LastReadFinished = .sbss:0x801D4398; // type:object size:0x8 scope:local data:4byte +LastReadIssued = .sbss:0x801D43A0; // type:object size:0x8 scope:local data:4byte +LastCommandWasRead = .sbss:0x801D43A8; // type:object size:0x4 scope:local data:4byte NextCommandNumber = .sbss:0x801D43AC; // type:object size:0x4 scope:local data:4byte BootInfo = .sbss:0x801D43B0; // type:object size:0x4 scope:local data:4byte FstStart = .sbss:0x801D43B4; // type:object size:0x4 scope:local data:4byte FstStringStart = .sbss:0x801D43B8; // type:object size:0x4 scope:local data:4byte MaxEntryNum = .sbss:0x801D43BC; // type:object size:0x4 scope:local data:4byte -lbl_801D43C0 = .sbss:0x801D43C0; // type:object size:0x4 data:4byte +currentDirectory = .sbss:0x801D43C0; // type:object size:0x4 scope:local data:4byte __DVDLongFileNameFlag = .sbss:0x801D43C4; // type:object size:0x4 scope:global data:4byte __DVDThreadQueue = .sbss:0x801D43C8; // type:object size:0x8 scope:global executing = .sbss:0x801D43D0; // type:object size:0x4 scope:local data:4byte @@ -6568,66 +6578,64 @@ currID = .sbss:0x801D43D4; // type:object size:0x4 scope:local data:4byte bootInfo = .sbss:0x801D43D8; // type:object size:0x4 scope:local data:4byte PauseFlag = .sbss:0x801D43DC; // type:object size:0x4 scope:local data:4byte PausingFlag = .sbss:0x801D43E0; // type:object size:0x4 scope:local data:4byte -lbl_801D43E4 = .sbss:0x801D43E4; // type:object size:0x4 data:4byte +AutoFinishing = .sbss:0x801D43E4; // type:object size:0x4 scope:local data:4byte FatalErrorFlag = .sbss:0x801D43E8; // type:object size:0x4 scope:local data:4byte CurrCommand = .sbss:0x801D43EC; // type:object size:0x4 scope:local data:4byte -lbl_801D43F0 = .sbss:0x801D43F0; // type:object size:0x4 data:4byte -lbl_801D43F4 = .sbss:0x801D43F4; // type:object size:0x4 data:4byte +Canceling = .sbss:0x801D43F0; // type:object size:0x4 scope:local data:4byte +CancelCallback = .sbss:0x801D43F4; // type:object size:0x4 scope:local data:4byte ResumeFromHere = .sbss:0x801D43F8; // type:object size:0x4 scope:local data:4byte CancelLastError = .sbss:0x801D43FC; // type:object size:0x4 scope:local data:4byte -lbl_801D4400 = .sbss:0x801D4400; // type:object size:0x4 data:4byte -lbl_801D4404 = .sbss:0x801D4404; // type:object size:0x4 data:4byte +LastError = .sbss:0x801D4400; // type:object size:0x4 scope:local data:4byte +NumInternalRetry = .sbss:0x801D4404; // type:object size:0x4 scope:local data:4byte ResetRequired = .sbss:0x801D4408; // type:object size:0x4 scope:local data:4byte FirstTimeInBootrom = .sbss:0x801D440C; // type:object size:0x4 scope:local data:4byte DVDInitialized = .sbss:0x801D4410; // type:object size:0x4 scope:local data:4byte -lbl_801D4414 = .sbss:0x801D4414; // type:object size:0x4 data:4byte -lbl_801D4418 = .sbss:0x801D4418; // type:object size:0x4 data:4byte +LastState = .sbss:0x801D4414; // type:object size:0x4 scope:local data:4byte +status = .sbss:0x801D4418; // type:object size:0x4 scope:local data:4byte bb2 = .sbss:0x801D441C; // type:object size:0x4 scope:local data:4byte idTmp = .sbss:0x801D4420; // type:object size:0x4 scope:local data:4byte -lbl_801D4428 = .sbss:0x801D4428; // type:object size:0x4 data:4byte -lbl_801D442C = .sbss:0x801D442C; // type:object size:0x4 data:4byte -lbl_801D4430 = .sbss:0x801D4430; // type:object size:0x8 -lbl_801D4438 = .sbss:0x801D4438; // type:object size:0x4 data:4byte -lbl_801D443C = .sbss:0x801D443C; // type:object size:0x4 data:4byte -lbl_801D4440 = .sbss:0x801D4440; // type:object size:0x4 data:4byte -lbl_801D4444 = .sbss:0x801D4444; // type:object size:0x2 data:2byte -lbl_801D4446 = .sbss:0x801D4446; // type:object size:0x2 data:2byte -lbl_801D4448 = .sbss:0x801D4448; // type:object size:0x8 data:4byte -lbl_801D4450 = .sbss:0x801D4450; // type:object size:0x4 data:4byte -lbl_801D4454 = .sbss:0x801D4454; // type:object size:0x4 data:4byte -lbl_801D4458 = .sbss:0x801D4458; // type:object size:0x8 data:4byte -lbl_801D4460 = .sbss:0x801D4460; // type:object size:0x4 data:4byte -lbl_801D4464 = .sbss:0x801D4464; // type:object size:0x4 data:4byte -lbl_801D4468 = .sbss:0x801D4468; // type:object size:0x4 data:4byte +retraceCount = .sbss:0x801D4428; // type:object size:0x4 scope:local data:4byte +flushFlag = .sbss:0x801D442C; // type:object size:0x4 scope:local data:4byte +retraceQueue = .sbss:0x801D4430; // type:object size:0x8 scope:local +PreCB = .sbss:0x801D4438; // type:object size:0x4 scope:local data:4byte +PostCB = .sbss:0x801D443C; // type:object size:0x4 scope:local data:4byte +encoderType = .sbss:0x801D4440; // type:object size:0x4 scope:local data:4byte +displayOffsetH = .sbss:0x801D4444; // type:object size:0x2 scope:local data:2byte +displayOffsetV = .sbss:0x801D4446; // type:object size:0x2 scope:local data:2byte +changeMode = .sbss:0x801D4448; // type:object size:0x4 scope:local data:4byte +changed = .sbss:0x801D4450; // type:object size:0x8 scope:local align:8 data:4byte +shdwChangeMode = .sbss:0x801D4458; // type:object size:0x4 scope:local data:4byte +shdwChanged = .sbss:0x801D4460; // type:object size:0x8 scope:local align:8 data:4byte +CurrTiming = .sbss:0x801D4468; // type:object size:0x4 scope:local data:4byte CurrTvMode = .sbss:0x801D446C; // type:object size:0x4 scope:local data:4byte -lbl_801D4470 = .sbss:0x801D4470; // type:object size:0x4 data:4byte -lbl_801D4474 = .sbss:0x801D4474; // type:object size:0x4 data:4byte -lbl_801D4478 = .sbss:0x801D4478; // type:object size:0x8 data:4byte -lbl_801D4480 = .sbss:0x801D4480; // type:object size:0x8 data:4byte -lbl_801D4488 = .sbss:0x801D4488; // type:object size:0x4 data:4byte -lbl_801D448C = .sbss:0x801D448C; // type:object size:0x4 data:4byte -lbl_801D4490 = .sbss:0x801D4490; // type:object size:0x4 data:4byte -lbl_801D4494 = .sbss:0x801D4494; // type:object size:0x4 data:4byte -lbl_801D4498 = .sbss:0x801D4498; // type:object size:0x4 data:4byte -lbl_801D449C = .sbss:0x801D449C; // type:object size:0x4 data:4byte -lbl_801D44A0 = .sbss:0x801D44A0; // type:object size:0x4 data:4byte -lbl_801D44A4 = .sbss:0x801D44A4; // type:object size:0x4 data:4byte -lbl_801D44A8 = .sbss:0x801D44A8; // type:object size:0x4 data:4byte -lbl_801D44AC = .sbss:0x801D44AC; // type:object size:0x4 data:4byte -lbl_801D44B0 = .sbss:0x801D44B0; // type:object size:0x4 data:4byte -lbl_801D44B4 = .sbss:0x801D44B4; // type:object size:0x4 data:4byte -lbl_801D44B8 = .sbss:0x801D44B8; // type:object size:0x4 data:4byte -lbl_801D44BC = .sbss:0x801D44BC; // type:object size:0x4 data:4byte -lbl_801D44C0 = .sbss:0x801D44C0; // type:object size:0x4 data:4byte -lbl_801D44C4 = .sbss:0x801D44C4; // type:object size:0x4 data:4byte -lbl_801D44C8 = .sbss:0x801D44C8; // type:object size:0x4 data:4byte -lbl_801D44CC = .sbss:0x801D44CC; // type:object size:0x4 data:4byte -lbl_801D44D0 = .sbss:0x801D44D0; // type:object size:0x4 data:4byte -lbl_801D44D4 = .sbss:0x801D44D4; // type:object size:0x4 data:4byte -lbl_801D44D8 = .sbss:0x801D44D8; // type:object size:0x4 data:4byte -lbl_801D44DC = .sbss:0x801D44DC; // type:object size:0x4 data:4byte -lbl_801D44E0 = .sbss:0x801D44E0; // type:object size:0x4 data:4byte -lbl_801D44E4 = .sbss:0x801D44E4; // type:object size:0x4 data:4byte +FBSet = .sbss:0x801D4470; // type:object size:0x4 scope:local data:4byte +message$343 = .sbss:0x801D4474; // type:object size:0x4 scope:local data:4byte +rmode = .sbss:0x801D4478; // type:object size:0x8 scope:local data:4byte +fontShift = .sbss:0x801D4480; // type:object size:0x8 scope:local data:4byte +DemoStat = .sbss:0x801D4488; // type:object size:0x4 scope:local data:4byte +DemoStatIndx = .sbss:0x801D448C; // type:object size:0x4 scope:local data:4byte +DemoStatMaxIndx = .sbss:0x801D4490; // type:object size:0x4 scope:local data:4byte +DemoStatClocks = .sbss:0x801D4494; // type:object size:0x4 scope:local data:4byte +DemoStatDisp = .sbss:0x801D4498; // type:object size:0x4 scope:local data:4byte +topPixIn = .sbss:0x801D449C; // type:object size:0x4 scope:local data:4byte +topPixOut = .sbss:0x801D44A0; // type:object size:0x4 scope:local data:4byte +botPixIn = .sbss:0x801D44A4; // type:object size:0x4 scope:local data:4byte +botPixOut = .sbss:0x801D44A8; // type:object size:0x4 scope:local data:4byte +clrPixIn = .sbss:0x801D44AC; // type:object size:0x4 scope:local data:4byte +copyClks = .sbss:0x801D44B0; // type:object size:0x4 scope:local data:4byte +vcCheck = .sbss:0x801D44B4; // type:object size:0x4 scope:local data:4byte +vcMiss = .sbss:0x801D44B8; // type:object size:0x4 scope:local data:4byte +vcStall = .sbss:0x801D44BC; // type:object size:0x4 scope:local data:4byte +cpReq = .sbss:0x801D44C0; // type:object size:0x4 scope:local data:4byte +tcReq = .sbss:0x801D44C4; // type:object size:0x4 scope:local data:4byte +cpuRdReq = .sbss:0x801D44C8; // type:object size:0x4 scope:local data:4byte +cpuWrReq = .sbss:0x801D44CC; // type:object size:0x4 scope:local data:4byte +dspReq = .sbss:0x801D44D0; // type:object size:0x4 scope:local data:4byte +ioReq = .sbss:0x801D44D4; // type:object size:0x4 scope:local data:4byte +viReq = .sbss:0x801D44D8; // type:object size:0x4 scope:local data:4byte +peReq = .sbss:0x801D44DC; // type:object size:0x4 scope:local data:4byte +rfReq = .sbss:0x801D44E0; // type:object size:0x4 scope:local data:4byte +fiReq = .sbss:0x801D44E4; // type:object size:0x4 scope:local data:4byte lbl_801D44E8 = .sbss:0x801D44E8; // type:object size:0x4 data:4byte lbl_801D44EC = .sbss:0x801D44EC; // type:object size:0x4 data:4byte lbl_801D44F0 = .sbss:0x801D44F0; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 40f05776..19295e97 100755 --- a/configure.py +++ b/configure.py @@ -334,6 +334,32 @@ config.libs = [ Object(NonMatching, "dolphin/mtx/psmtx.c"), ], ), + DolphinLib( + "dvd", + [ + Object(NonMatching, "dolphin/dvd/dvdlow.c"), + Object(NonMatching, "dolphin/dvd/dvdfs.c"), + Object(NonMatching, "dolphin/dvd/dvd.c"), + Object(NonMatching, "dolphin/dvd/dvdqueue.c"), + Object(NonMatching, "dolphin/dvd/dvderror.c"), + Object(NonMatching, "dolphin/dvd/fstload.c"), + ], + ), + DolphinLib( + "vi", + [ + Object(NonMatching, "dolphin/vi.c"), + ], + ), + DolphinLib( + "demo", + [ + Object(NonMatching, "dolphin/demo/DEMOInit.c"), + Object(NonMatching, "dolphin/demo/DEMOFont.c"), + Object(NonMatching, "dolphin/demo/DEMOPuts.c"), + Object(NonMatching, "dolphin/demo/DEMOStats.c"), + ], + ), { "lib": "Runtime.PPCEABI.H", "mw_version": config.linker_version,