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
|