Skip to content

Commit 9dc05ee

Browse files
github-actions[bot]Mike McLaughlin
andauthored
Fix gcroot SOS command on arm/arm64 (#90658)
Faulted in DAC because the HelperMethodFrame's REGDISPLAY CurrentContextPointers were not initialized correctly. Fixes issue dotnet/diagnostics#3726 Co-authored-by: Mike McLaughlin <mikem@microsoft.com>
1 parent 5b056da commit 9dc05ee

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

src/coreclr/vm/arm/stubs.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,16 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
671671
pRD->pCurrentContext->R10 = (DWORD)(pUnwoundState->captureR4_R11[6]);
672672
pRD->pCurrentContext->R11 = (DWORD)(pUnwoundState->captureR4_R11[7]);
673673

674+
pRD->pCurrentContextPointers->R4 = &pRD->pCurrentContext->R4;
675+
pRD->pCurrentContextPointers->R5 = &pRD->pCurrentContext->R5;
676+
pRD->pCurrentContextPointers->R6 = &pRD->pCurrentContext->R6;
677+
pRD->pCurrentContextPointers->R7 = &pRD->pCurrentContext->R7;
678+
pRD->pCurrentContextPointers->R8 = &pRD->pCurrentContext->R8;
679+
pRD->pCurrentContextPointers->R9 = &pRD->pCurrentContext->R9;
680+
pRD->pCurrentContextPointers->R10 = &pRD->pCurrentContext->R10;
681+
pRD->pCurrentContextPointers->R11 = &pRD->pCurrentContext->R11;
682+
pRD->pCurrentContextPointers->Lr = &pRD->pCurrentContext->Lr;
683+
674684
return;
675685
}
676686
#endif // DACCESS_COMPILE

src/coreclr/vm/arm64/stubs.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -472,18 +472,18 @@ void HelperMethodFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
472472
pRD->pCurrentContext->Fp = (DWORD64)(pUnwoundState->captureX19_X29[10]);
473473
pRD->pCurrentContext->Lr = NULL; // Unwind again to get Caller's PC
474474

475-
pRD->pCurrentContextPointers->X19 = pUnwoundState->ptrX19_X29[0];
476-
pRD->pCurrentContextPointers->X20 = pUnwoundState->ptrX19_X29[1];
477-
pRD->pCurrentContextPointers->X21 = pUnwoundState->ptrX19_X29[2];
478-
pRD->pCurrentContextPointers->X22 = pUnwoundState->ptrX19_X29[3];
479-
pRD->pCurrentContextPointers->X23 = pUnwoundState->ptrX19_X29[4];
480-
pRD->pCurrentContextPointers->X24 = pUnwoundState->ptrX19_X29[5];
481-
pRD->pCurrentContextPointers->X25 = pUnwoundState->ptrX19_X29[6];
482-
pRD->pCurrentContextPointers->X26 = pUnwoundState->ptrX19_X29[7];
483-
pRD->pCurrentContextPointers->X27 = pUnwoundState->ptrX19_X29[8];
484-
pRD->pCurrentContextPointers->X28 = pUnwoundState->ptrX19_X29[9];
485-
pRD->pCurrentContextPointers->Fp = pUnwoundState->ptrX19_X29[10];
486-
pRD->pCurrentContextPointers->Lr = NULL;
475+
pRD->pCurrentContextPointers->X19 = &pRD->pCurrentContext->X19;
476+
pRD->pCurrentContextPointers->X20 = &pRD->pCurrentContext->X20;
477+
pRD->pCurrentContextPointers->X21 = &pRD->pCurrentContext->X21;
478+
pRD->pCurrentContextPointers->X22 = &pRD->pCurrentContext->X22;
479+
pRD->pCurrentContextPointers->X23 = &pRD->pCurrentContext->X23;
480+
pRD->pCurrentContextPointers->X24 = &pRD->pCurrentContext->X24;
481+
pRD->pCurrentContextPointers->X25 = &pRD->pCurrentContext->X25;
482+
pRD->pCurrentContextPointers->X26 = &pRD->pCurrentContext->X26;
483+
pRD->pCurrentContextPointers->X27 = &pRD->pCurrentContext->X27;
484+
pRD->pCurrentContextPointers->X28 = &pRD->pCurrentContext->X28;
485+
pRD->pCurrentContextPointers->Fp = &pRD->pCurrentContext->Fp;
486+
pRD->pCurrentContextPointers->Lr = &pRD->pCurrentContext->Lr;
487487

488488
return;
489489
}

0 commit comments

Comments
 (0)