[Mach-O] Refactor fix-up chain parsing #7506
Open
+679
−418
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
MachoView
and into its own class. It deals purely in terms of offsets into the Mach-O slice.MachoView
translates 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
#define
to enable it to produce debug output in the same format asdyld_info -fixup_chain_details
to make it easy to cross-check parsing against Apple's implementation.Fixes #7421.