-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Fix finding entry point unwind record for a method with fragmented un… #22202
Fix finding entry point unwind record for a method with fragmented un… #22202
Conversation
…wind On Arm and Arm64 unwind records can only cover a limited range of code (512K and 1MB respectively). So for methods larger than this the jit will emit multiple "fragment" unwind records to cover the full method code range. Only the first of these describes the behavior of the method prolog. When mapping an offset back to a method's entry point unwind, make sure to find this "root" unwind record instead of one of the internal fragments. Fixes #19209.
@janvorli PTAL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
Might be useful to add a header comment to EEJitManager::LazyGetFunctionEntry
documenting that it will return the "root" RUNTIME_FUNCTION entry (containing the prolog).
Also, I guess it's ok you removed the comment above the --pFunctionEntry
line, but I think it would be useful to leave it, also.
@dotnet-bot test Ubuntu16.04 arm64 Cross Checked gcstress0xc Build and Test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thank you!
@dotnet-bot test Ubuntu16.04 arm64 Cross Checked gcstress0xc Build and Test |
1 similar comment
@dotnet-bot test Ubuntu16.04 arm64 Cross Checked gcstress0xc Build and Test |
Looking at GC stress failures
|
Latest push should fix the null issue and adds (restores) some comments. @dotnet-bot test Ubuntu16.04 arm64 Cross Checked gcstress0xc Build and Test |
Sigh. Need to actually return the entry instead of always returning null. Will push a fix shortly. |
@dotnet-bot test Ubuntu16.04 arm64 Cross Checked gcstress0xc Build and Test |
Hmm, build issues for the GC stress legs... did not realize test legs can share a build leg like this.
@dotnet-bot test Ubuntu16.04 arm64 Cross Checked gcstress0xc Build and Test |
Remaining stress failures are all known issues
|
@janvorli want to take one more look? |
@AndyAyersMS it looks good to me. |
dotnet/coreclr#22202) On Arm and Arm64 unwind records can only cover a limited range of code (512K and 1MB respectively). So for methods larger than this the jit will emit multiple "fragment" unwind records to cover the full method code range. Only the first of these describes the behavior of the method prolog. When mapping an offset back to a method's entry point unwind, make sure to find this "root" unwind record instead of one of the internal fragments. Fixes dotnet/coreclr#19209. Commit migrated from dotnet/coreclr@1b8df83
…wind
On Arm and Arm64 unwind records can only cover a limited range of code
(512K and 1MB respectively). So for methods larger than this the jit
will emit multiple "fragment" unwind records to cover the full method code
range. Only the first of these describes the behavior of the method prolog.
When mapping an offset back to a method's entry point unwind, make sure to
find this "root" unwind record instead of one of the internal fragments.
Fixes #19209.