[Mach-O] Refactor fix-up chain parsing #7506
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The parsing of fix-up chains is moved out of
MachoViewand into its own class. It deals purely in terms of offsets into the Mach-O slice.MachoViewtranslates those offsets to mapped addresses when needed.This is primarily aimed at fixing incorrect handling of pointer formats that use offsets where in some cases the relocations would be applied at incorrect addresses due to confusion between file offsets, Mach-O slice offsets, and VM offsets.
It incidentally fixes addends from bind operations not being respected. These show up most frequently in C++ RTTI information.
The chained fix-up parser contains a
#defineto enable it to produce debug output in the same format asdyld_info -fixup_chain_detailsto make it easy to cross-check parsing against Apple's implementation.Fixes #7421.