[release/9.0] linux/arm64: Verify TLS resolver code #108564
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.
Backport of #108419 to release/9.0
/cc @kunalspathak
Customer Impact
With this issue, a simple hello world application containing
ThreadLocal
will not work if it is compiled as a "single-file app" on linux/arm64Regression
In #106052, we added logic to invoke a routine that returns the TLS resolver method's instruction stream which we verify if it is as expected and if not, turn off TLS optimization. However, for Single app case, the code that returns the TLS resolver method was itself returning incorrect result and when we dereferenced it, we hit segfault. The fix was to check if the TLS resolver method itself is accurate.
Testing
We verified this locally with the fix as well as double checking in gdb and it worked. Unfortunately, there is no linux-arm64 testing for single-file apps and @agocke is working on adding it.
Risk
Medium: This gets triggered very early during JITing any method that contains TLS code.
IMPORTANT: If this backport is for a servicing release, please verify that:
The PR target branch is
release/X.0-staging
, notrelease/X.0
.If the change touches code that ships in a NuGet package, you have added the necessary package authoring and gotten it explicitly reviewed.