TL;DR: seems there's issues with the jtbl data inside .rodata not being counted after we've matched the code for it (since cc itself won't create jtbl_* syms for the switches?), which tanks the .rodata totals in most files since objdiff won't find a jtbl_* sym to compare against, and seems to end up treating the whole .rodata as unmatched in a lot of files :/
No idea why we're affected by this when other projects seem to have reliable data % though - might be to do with the symbol visibility (jlabel/dlabel/etc?), but haven't had any luck trying to mess with that.
Tried looking into moving over data to C, looks like we do have quite a bit done already but the % tracker isn't counting it for some reason?
eg. bodyprog_800706E4.c is shown at 0% data
https://decomp.dev/Vatuu/silent-hill-decomp?category=engine&unit=bodyprog%2Fbodyprog_800706E4
Says 4.68KB of data there, .rodata of that file comes to 4348 bytes, and .bss is 328, so guess those added together is the count it uses.
But the .rodata is mostly jtbls of funcs we've matched, and a couple small vars we also matched in the .c, a lot of .bss is also matched in the .c too..
Not really sure how objdiff is deciding what data is matched or not, noticed the .rodata.s has some nonmatching D_800C4618 line above each one, seems that inserts a [var name].NON_MATCHING symbol into the .o that's built from it.
Guessing that sym gets added to the expected .o files, then compared against the .o built from our .c, if the builds .o has that symbol then it shows splat config isn't using .rodata from the .c but using the non-matched rodata.s instead - but afaik all our splat splits do pull from the .c, so can't see why they'd still be marked non-matching :/
If anyone has any ideas about it let me know, I'll try looking into it more soon too..
TL;DR: seems there's issues with the
jtbldata inside .rodata not being counted after we've matched the code for it (sinceccitself won't createjtbl_*syms for the switches?), which tanks the .rodata totals in most files since objdiff won't find ajtbl_*sym to compare against, and seems to end up treating the whole .rodata as unmatched in a lot of files :/No idea why we're affected by this when other projects seem to have reliable data % though - might be to do with the symbol visibility (jlabel/dlabel/etc?), but haven't had any luck trying to mess with that.
Tried looking into moving over data to C, looks like we do have quite a bit done already but the % tracker isn't counting it for some reason?
eg. bodyprog_800706E4.c is shown at 0% data
https://decomp.dev/Vatuu/silent-hill-decomp?category=engine&unit=bodyprog%2Fbodyprog_800706E4
Says 4.68KB of data there, .rodata of that file comes to 4348 bytes, and .bss is 328, so guess those added together is the count it uses.
But the .rodata is mostly jtbls of funcs we've matched, and a couple small vars we also matched in the .c, a lot of .bss is also matched in the .c too..
Not really sure how objdiff is deciding what data is matched or not, noticed the .rodata.s has some
nonmatching D_800C4618line above each one, seems that inserts a[var name].NON_MATCHINGsymbol into the .o that's built from it.Guessing that sym gets added to the
expected.o files, then compared against the .o built from our .c, if the builds .o has that symbol then it shows splat config isn't using .rodata from the .c but using the non-matched rodata.s instead - but afaik all our splat splits do pull from the .c, so can't see why they'd still be marked non-matching :/If anyone has any ideas about it let me know, I'll try looking into it more soon too..