diff options
author | Mike McLaughlin <mikem@microsoft.com> | 2015-10-15 18:35:55 -0700 |
---|---|---|
committer | Mike McLaughlin <mikem@microsoft.com> | 2015-11-03 18:21:06 -0800 |
commit | a5bcc44a468fab8699633d70a2394d6e565ece23 (patch) | |
tree | cfb4507f57dbe5cf66c9396d5c6e73c2dfac04bd /src/vm/amd64/gmsamd64.cpp | |
parent | 31f2ee6ddb71e6ece2895fb9820c9d2923c4a343 (diff) | |
download | coreclr-a5bcc44a468fab8699633d70a2394d6e565ece23.tar.gz coreclr-a5bcc44a468fab8699633d70a2394d6e565ece23.tar.bz2 coreclr-a5bcc44a468fab8699633d70a2394d6e565ece23.zip |
Fix sos clrstack unwinding for the special HelperMethodFrame.
Add and implement new ICorDebugDataTarget4 unwind interface using lldb stack unwinder ABIs. The implementation
does a linear search of the native frames for the stack pointer provided. It doesn't happen often so the
performance is fine.
Stub out the DBI's ICorDebugDataTarget4 (in ShimDataTarget::VirtualUnwind) for now. Since PAL_VirtualUnwindOutOfProc
is disabled it makes sense to just return E_NOTIMPL.
Fix bpmd command so it doesn't stop in lldb when it isn't a CLRN exception (continues).
Diffstat (limited to 'src/vm/amd64/gmsamd64.cpp')
-rw-r--r-- | src/vm/amd64/gmsamd64.cpp | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/src/vm/amd64/gmsamd64.cpp b/src/vm/amd64/gmsamd64.cpp index 49f45c96e5..ea9fd54734 100644 --- a/src/vm/amd64/gmsamd64.cpp +++ b/src/vm/amd64/gmsamd64.cpp @@ -10,16 +10,9 @@ #include "common.h" #include "gmscpu.h" -#if defined(DACCESS_COMPILE) -static BOOL DacReadAllAdapter(SIZE_T address, SIZE_T *value) -{ - HRESULT hr = DacReadAll((TADDR)address, (PVOID)value, sizeof(*value), false); - return SUCCEEDED(hr); -} -#endif //DACCESS_COMPILE - void LazyMachState::unwindLazyState(LazyMachState* baseState, MachState* unwoundState, + DWORD threadId, int funCallDepth /* = 1 */, HostCallPreference hostCallPreference /* = (HostCallPreference)(-1) */) { @@ -64,16 +57,8 @@ void LazyMachState::unwindLazyState(LazyMachState* baseState, #else // !FEATURE_PAL #if defined(DACCESS_COMPILE) - DWORD pid; - HRESULT hr = DacGetPid(&pid); - if (SUCCEEDED(hr)) - { - if (!PAL_VirtualUnwindOutOfProc(&ctx, &nonVolRegPtrs, pid, DacReadAllAdapter)) - { - DacError(E_FAIL); - } - } - else + HRESULT hr = DacVirtualUnwind(threadId, &ctx, &nonVolRegPtrs); + if (FAILED(hr)) { DacError(hr); } |