Skip to content

Conversation

@LagoLunatic
Copy link
Collaborator

A couple of improvements for automatically pairing up functions with weird symbol names. MWCC can output symbols in a different order from their actual address order, so they're now internally sorted to handle the case of a single TU having multiple functions with different discriminators so they don't get swapped during pairing.

Before:
image
After:
image

And discriminators in the middle of anonymous class names like __dt__Q29dCamera_c23@class$3665d_camera_cppFv are now also ignored, in addition to the ones at the end of the symbol which were already ignored.

Fixes #266

The list of symbols is not necessarily sorted by address, so if there are multiple `__arraydtor$1234` functions it's possible that they're in reverse order on the right, which would cause them to be paired up incorrectly.

To fix this we sort by section index and symbol address after filtering down the list of symbols to ones that have matching names.
@LagoLunatic
Copy link
Collaborator Author

Added another fix, this one for the bug where objdiff would pair up two different symbols when their compiler-generated names just happened to be the exact same thing, which was rare but sometimes happens in enormous TUs.

A side effect of how I fixed this means that it no longer pairs up symbols with the same name but wrong section, i.e. if you forget to mark something const and it goes in .data instead of .rodata, it won't automatically pair those two up now. I think this side effect is desirable anyway? Since the TU won't match if you put data in the wrong section, even if it is equivalent. And whether data is const or not can effect function codegen too, so considering them different may be helpful for noticing these errors.

@encounter encounter merged commit 278683f into encounter:main Dec 21, 2025
24 checks passed
@LagoLunatic LagoLunatic deleted the func-pairup branch December 21, 2025 17:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] [Twilight Princess] __arraydtor comparison is broken in d_a_obj_bemos

2 participants