-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Include the thumb bit in symbol definitions for method code nodes in crossgen2 #128235
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
jtschuster
wants to merge
6
commits into
dotnet:main
Choose a base branch
from
jtschuster:ThumbBit
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
ee50cb8
Proof of concept for including thumb bit in R2R symbols
jtschuster a78cfed
Fix compReloc syntax, add subtraction to DelayLoadHelperImport
jtschuster a731125
Add ARM Thumb bit ReadyToRun validation
jtschuster a9486f7
Use little-endian reads in R2R test validation
jtschuster 622f821
Merge branch 'main' into ThumbBit
jtschuster b30a972
Fix ARM Thumb R2R code pointer relocations
jtschuster File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4329,9 +4329,18 @@ private void recordRelocation(void* location, void* locationRW, void* target, Co | |
| break; | ||
| } | ||
|
|
||
| RelocType relocType = GetRelocType(fRelocType); | ||
| relocDelta += addlDelta; | ||
|
|
||
| RelocType relocType = GetRelocType(fRelocType); | ||
| if (_compilation.TypeSystemContext.Target.Architecture == TargetArchitecture.ARM && | ||
| relocType == RelocType.IMAGE_REL_BASED_HIGHLOW && | ||
| targetBlock == BlockType.Code) | ||
| { | ||
| // The ARM JIT reports PCode targets with the Thumb bit set. Method symbols also | ||
| // carry the Thumb bit, so keep the relocation addend as an offset from the code byte. | ||
|
Comment on lines
+4339
to
+4340
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This sounds like there's one more spot in RyuJIT like the one this PR is touching in emitarm.cpp that is adding the thumb bit when it shouldn't. A bit odd we were not running into it with native AOT. |
||
| relocDelta -= _compilation.TypeSystemContext.Target.CodeDelta; | ||
| } | ||
|
|
||
| // relocDelta is stored as the value | ||
| Relocation.WriteValue(relocType, location, relocDelta); | ||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
.../tools/aot/ILCompiler.ReadyToRun.Tests/TestCases/CrossModuleInlining/ExceptionHandling.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,61 @@ | ||
| // Licensed to the .NET Foundation under one or more agreements. | ||
| // The .NET Foundation licenses this file to you under the MIT license. | ||
|
|
||
| using System; | ||
| using System.Runtime.CompilerServices; | ||
|
|
||
| public static class ExceptionHandling | ||
| { | ||
| public static int CallDependency() => InlineableLib.GetValue() + MethodWithSwitchTable(5); | ||
|
|
||
| public static int MethodWithExceptionInfo(int value) | ||
| { | ||
| try | ||
| { | ||
| return 100 / value; | ||
| } | ||
| catch (DivideByZeroException) | ||
| { | ||
| return -1; | ||
| } | ||
| } | ||
|
|
||
| public static int MethodWithSwitchTable(int value) | ||
| { | ||
| return value switch | ||
| { | ||
| 0 => Case0(), | ||
| 1 => Case1(), | ||
| 2 => Case2(), | ||
| 3 => Case3(), | ||
| 4 => Case4(), | ||
| 5 => Case5(), | ||
| 6 => Case6(), | ||
| _ => CaseDefault(), | ||
| }; | ||
| } | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case0() => 10; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case1() => 11; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case2() => 12; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case3() => 13; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case4() => 14; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case5() => 15; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int Case6() => 16; | ||
|
|
||
| [MethodImpl(MethodImplOptions.NoInlining)] | ||
| private static int CaseDefault() => 17; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.