set stubs sections in CodeCache for macOS #1450
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.
Description
While working on #1418, I found that it's possible for the library to have no unwind information (always use FP) or to have some symbols that don't have unwind information.
While checking which symbols don't have unwind information I did observe that it were the stub symbols, which means that implement the unwinding in macOS won't solve all unwinding issues.
For stubs the general recommendation is to recover from the
link()
register (From the resources I managed to find regarding the subject)By setting the
plt
section information inside the code cache, it would result in the FrameDesc being resolved asFrameDesc::empty_frame
for stubs, which emulates the mentioned behavior aboveThis change is safe as it would keep the FP unwinding for all symbols other than the stub symbols,
=> Please note as FP are mandatory in macOS ARM, this should be sufficient for correct unwinding on ARM for macOS
Related issues
#1418
Motivation and context
allow correct unwinding for macOS from stubs
How has this been tested?
manual testing on both ARM & X86 using the
jninativestacks.c
file & testsBy submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.