diff options
author | Jonghyun Park <parjong@gmail.com> | 2017-07-06 15:42:51 +0900 |
---|---|---|
committer | Jonghyun Park <parjong@gmail.com> | 2017-07-07 15:45:27 +0900 |
commit | 8cd27865beb06105789cf52dc4ea472ea30da97d (patch) | |
tree | 63be571a053ffb787baa8c2fd3d46690d355c734 /src/unwinder | |
parent | b7e10aa038dc67fabd18d9f71c83e3edc1a89e4d (diff) | |
download | coreclr-8cd27865beb06105789cf52dc4ea472ea30da97d.tar.gz coreclr-8cd27865beb06105789cf52dc4ea472ea30da97d.tar.bz2 coreclr-8cd27865beb06105789cf52dc4ea472ea30da97d.zip |
[ARM/Linux] Enable DacStackWalk
For ARM/Linux, DacUnwindStackFrame failed to unwind stack frame due to
the mismatch between RUNTIME_FUNCTION and IMAGE_ARM_RUNTIME_FUNCTION_ENTRY.
ClrStack SOS command currently does not work due to this bug.
This commit fixes this mismatch and re-enables ClrStack SOS command.
Diffstat (limited to 'src/unwinder')
-rw-r--r-- | src/unwinder/arm/unwinder_arm.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/unwinder/arm/unwinder_arm.cpp b/src/unwinder/arm/unwinder_arm.cpp index 6b1f6864cc..6228b01727 100644 --- a/src/unwinder/arm/unwinder_arm.cpp +++ b/src/unwinder/arm/unwinder_arm.cpp @@ -647,7 +647,7 @@ Return Value: HRESULT RtlpUnwindFunctionCompact( __in ULONG ControlPcRva, - __in PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY FunctionEntry, + __in PT_RUNTIME_FUNCTION FunctionEntry, __inout PT_CONTEXT ContextRecord, __out PULONG EstablisherFrame, __deref_opt_out_opt PEXCEPTION_ROUTINE *HandlerRoutine, @@ -917,7 +917,7 @@ HRESULT RtlpUnwindFunctionFull( __in ULONG ControlPcRva, __in ULONG ImageBase, - __in PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY FunctionEntry, + __in PT_RUNTIME_FUNCTION FunctionEntry, __inout PT_CONTEXT ContextRecord, __out PULONG EstablisherFrame, __deref_opt_out_opt PEXCEPTION_ROUTINE *HandlerRoutine, @@ -1444,7 +1444,7 @@ BOOL OOPStackUnwinderArm::Unwind(T_CONTEXT * pContext) DWORD startingPc = pContext->Pc; DWORD startingSp = pContext->Sp; - IMAGE_ARM_RUNTIME_FUNCTION_ENTRY Rfe; + T_RUNTIME_FUNCTION Rfe; if (FAILED(GetFunctionEntry(DBS_EXTEND64(pContext->Pc), &Rfe, sizeof(Rfe)))) return FALSE; @@ -1511,17 +1511,13 @@ PEXCEPTION_ROUTINE RtlVirtualUnwind( PEXCEPTION_ROUTINE handlerRoutine; HRESULT res; - IMAGE_ARM_RUNTIME_FUNCTION_ENTRY rfe; - rfe.BeginAddress = FunctionEntry->BeginAddress; - rfe.UnwindData = FunctionEntry->UnwindData; - ARM_UNWIND_PARAMS unwindParams; unwindParams.ContextPointers = ContextPointers; if ((FunctionEntry->UnwindData & 3) != 0) { res = RtlpUnwindFunctionCompact(ControlPc - ImageBase, - &rfe, + FunctionEntry, ContextRecord, EstablisherFrame, &handlerRoutine, @@ -1533,7 +1529,7 @@ PEXCEPTION_ROUTINE RtlVirtualUnwind( { res = RtlpUnwindFunctionFull(ControlPc - ImageBase, ImageBase, - &rfe, + FunctionEntry, ContextRecord, EstablisherFrame, &handlerRoutine, |