Skip to content

Commit 75dfe5c

Browse files
AndyAyersMSjanvorli
authored andcommitted
Fix arm32 unwind for large methods (dotnet#22381)
* Fix arm32 unwind for large methods For arm32, the unwinder bails out with an error if the method offset is not within the fragment range. And the jit copies prolog unwind codes to all fragments, so there's no need to walk back and find the root unwind record. Closes #22260. * re-enable test
1 parent cee7a55 commit 75dfe5c

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

src/vm/codeman.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3914,8 +3914,10 @@ PTR_RUNTIME_FUNCTION EEJitManager::LazyGetFunctionEntry(EECodeInfo * pCodeInfo)
39143914
if (RUNTIME_FUNCTION__BeginAddress(pFunctionEntry) <= address && address < RUNTIME_FUNCTION__EndAddress(pFunctionEntry, baseAddress))
39153915
{
39163916

3917-
#if defined(EXCEPTION_DATA_SUPPORTS_FUNCTION_FRAGMENTS)
3918-
// If we may have fragmented unwind make sure we're returning the root record
3917+
#if defined(EXCEPTION_DATA_SUPPORTS_FUNCTION_FRAGMENTS) && defined(_TARGET_ARM64_)
3918+
// If we might have fragmented unwind, and we're on ARM64, make sure
3919+
// to returning the root record, as the trailing records don't have
3920+
// prolog unwind codes.
39193921
pFunctionEntry = FindRootEntry(pFunctionEntry, baseAddress);
39203922
#endif
39213923

tests/issues.targets

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -619,9 +619,6 @@
619619
<ExcludeList Include="$(XunitTestBinBase)/JIT/Methodical/doublearray/dblarray3_cs_r/*">
620620
<Issue>22015</Issue>
621621
</ExcludeList>
622-
<ExcludeList Include="$(XunitTestBinBase)/JIT/jit64/opt/cse/hugeexpr1/*">
623-
<Issue>22260</Issue>
624-
</ExcludeList>
625622
</ItemGroup>
626623

627624

0 commit comments

Comments
 (0)