From b71438bf6607d6d35f3cfb1bbfe4a525c06cf656 Mon Sep 17 00:00:00 2001 From: Konstantin Baladurin 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