summaryrefslogtreecommitdiff
path: root/src/vm/amd64/gmsamd64.cpp
diff options
context:
space:
mode:
authorMike McLaughlin <mikem@microsoft.com>2015-10-15 18:35:55 -0700
committerMike McLaughlin <mikem@microsoft.com>2015-11-03 18:21:06 -0800
commita5bcc44a468fab8699633d70a2394d6e565ece23 (patch)
treecfb4507f57dbe5cf66c9396d5c6e73c2dfac04bd /src/vm/amd64/gmsamd64.cpp
parent31f2ee6ddb71e6ece2895fb9820c9d2923c4a343 (diff)
downloadcoreclr-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.cpp21
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);
}