summaryrefslogtreecommitdiff
path: root/packaging/0001-ARM-Linux-Enable-DacStackWalk.patch
blob: 8da163cc23ab63c7ca25b287c8eb8d4162e9ad19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
From 8cd27865beb06105789cf52dc4ea472ea30da97d Mon Sep 17 00:00:00 2001
From: Jonghyun Park <parjong@gmail.com>
Date: Thu, 6 Jul 2017 15:42:51 +0900
Subject: [PATCH] [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.
---
 src/unwinder/arm/unwinder_arm.cpp | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/src/unwinder/arm/unwinder_arm.cpp b/src/unwinder/arm/unwinder_arm.cpp
index 6b1f686..6228b01 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,
-- 
2.7.4