summaryrefslogtreecommitdiff
path: root/packaging/0003-ThrowExceptionFromContextInternal-RtlCaptureContext-.patch
blob: 058fe3fe5ef42bb36f7aaf79b266ea4ec8e6d6c3 (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
78
79
80
81
From b71438bf6607d6d35f3cfb1bbfe4a525c06cf656 Mon Sep 17 00:00:00 2001
From: Konstantin Baladurin <k.baladurin@partner.samsung.com>
Date: Tue, 30 Jan 2018 17:05:57 +0300
Subject: [PATCH 3/4] ThrowExceptionFromContextInternal, RtlCaptureContext: fix
 for asan (#16074)

- Save arguments on stack before calling __asan_handle_no_return in
  ThrowExceptionFromContextInternal

- Fix saving arguments on stack before calling __asan_handle_no_return
  in RtlCaptureContext for arm64
---
 src/pal/src/arch/amd64/exceptionhelper.S | 4 ++++
 src/pal/src/arch/arm/exceptionhelper.S   | 2 ++
 src/pal/src/arch/arm64/context2.S        | 4 ++--
 src/pal/src/arch/arm64/exceptionhelper.S | 2 ++
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/pal/src/arch/amd64/exceptionhelper.S b/src/pal/src/arch/amd64/exceptionhelper.S
index 72a1393..cb9a545 100644
--- a/src/pal/src/arch/amd64/exceptionhelper.S
+++ b/src/pal/src/arch/amd64/exceptionhelper.S
@@ -17,7 +17,11 @@ LEAF_ENTRY ThrowExceptionFromContextInternal, _TEXT
 #ifdef HAS_ASAN
         // Need to call __asan_handle_no_return explicitly here because we re-intialize RSP before
         // throwing exception in ThrowExceptionHelper
+        push_nonvol_reg rdi
+        push_nonvol_reg rsi
         call    EXTERNAL_C_FUNC(__asan_handle_no_return)
+        pop_nonvol_reg rsi
+        pop_nonvol_reg rdi
 #endif
 
         // Save the RBP to the stack so that the unwind can work at the instruction after
diff --git a/src/pal/src/arch/arm/exceptionhelper.S b/src/pal/src/arch/arm/exceptionhelper.S
index dad48de..4e324ce 100644
--- a/src/pal/src/arch/arm/exceptionhelper.S
+++ b/src/pal/src/arch/arm/exceptionhelper.S
@@ -14,7 +14,9 @@ LEAF_ENTRY ThrowExceptionFromContextInternal, _TEXT
 #ifdef HAS_ASAN
     // Need to call __asan_handle_no_return explicitly here because we re-intialize SP before
     // throwing exception in ThrowExceptionHelper
+    push_nonvol_reg "{r0, r1}"
     bl  EXTERNAL_C_FUNC(__asan_handle_no_return)
+    pop_nonvol_reg "{r0, r1}"
 #endif
 
     push_nonvol_reg {r7} /* FP. x64-RBP */
diff --git a/src/pal/src/arch/arm64/context2.S b/src/pal/src/arch/arm64/context2.S
index ac3661a..64a19c9 100644
--- a/src/pal/src/arch/arm64/context2.S
+++ b/src/pal/src/arch/arm64/context2.S
@@ -138,9 +138,9 @@ LEAF_ENTRY RtlRestoreContext, _TEXT
     ldr w17, [x0, #(CONTEXT_ContextFlags)]
     tbz w17, #CONTEXT_CONTROL_BIT, LOCAL_LABEL(Restore_CONTEXT_FLOATING_POINT)
 
-    stp x0, x1, [sp]
+    stp x0, x1, [sp, -16]!
     bl EXTERNAL_C_FUNC(__asan_handle_no_return)
-    ldp x0, x1, [sp]
+    ldp x0, x1, [sp], 16
 
 LOCAL_LABEL(Restore_CONTEXT_FLOATING_POINT):
 #endif
diff --git a/src/pal/src/arch/arm64/exceptionhelper.S b/src/pal/src/arch/arm64/exceptionhelper.S
index 7deeee6..c4499fb 100644
--- a/src/pal/src/arch/arm64/exceptionhelper.S
+++ b/src/pal/src/arch/arm64/exceptionhelper.S
@@ -15,7 +15,9 @@ LEAF_ENTRY ThrowExceptionFromContextInternal, _TEXT
 #ifdef HAS_ASAN
         // Need to call __asan_handle_no_return explicitly here because we re-intialize SP before
         // throwing exception in ThrowExceptionHelper
+        stp x0, x1, [sp, -16]!
         bl  EXTERNAL_C_FUNC(__asan_handle_no_return)
+        ldp x0, x1, [sp], 16
 #endif
 
     // Save the FP & LR to the stack so that the unwind can work at the instruction after
-- 
2.7.4