summaryrefslogtreecommitdiff
path: root/packaging/0016-callsignalhandlerwrapper-patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/0016-callsignalhandlerwrapper-patch.patch')
-rw-r--r--packaging/0016-callsignalhandlerwrapper-patch.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/packaging/0016-callsignalhandlerwrapper-patch.patch b/packaging/0016-callsignalhandlerwrapper-patch.patch
new file mode 100644
index 0000000000..8fb92abda4
--- /dev/null
+++ b/packaging/0016-callsignalhandlerwrapper-patch.patch
@@ -0,0 +1,51 @@
+From 8e38cfbaf45147c4361123a306d5b50c667a899e Mon Sep 17 00:00:00 2001
+From: CHUNSEOK LEE <chunseok.lee@samsung.com>
+Date: Wed, 2 Aug 2017 09:02:14 +0900
+Subject: [PATCH 16/23] callsignalhandlerwrapper patch
+
+Change-Id: I38630f9d02733aab5890b46afda39fd6e45461db
+---
+ src/pal/src/arch/arm/callsignalhandlerwrapper.S | 10 ++++++----
+ src/pal/src/arch/arm/signalhandlerhelper.cpp | 2 ++
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/pal/src/arch/arm/callsignalhandlerwrapper.S b/src/pal/src/arch/arm/callsignalhandlerwrapper.S
+index 266e4fd..b6288c4 100644
+--- a/src/pal/src/arch/arm/callsignalhandlerwrapper.S
++++ b/src/pal/src/arch/arm/callsignalhandlerwrapper.S
+@@ -18,12 +18,14 @@ C_FUNC(SignalHandlerWorkerReturnOffset\Alignment):
+ // address set to SignalHandlerWorkerReturn during SIGSEGV handling.
+ // It enables the unwinder to unwind stack from the handling code to the actual failure site.
+ NESTED_ENTRY CallSignalHandlerWrapper\Alignment, _TEXT, NoHandler
+- sub sp, sp, #(8 + \Alignment) // red zone + alignment
+- stmfd sp!, {r7, lr}
++ alloc_stack (8 + \Alignment)
++// PROLOG_PUSH "{r7, lr}"
++ .save {r7, r11, lr, pc}
+ bl EXTERNAL_C_FUNC(signal_handler_worker)
+ LOCAL_LABEL(SignalHandlerWorkerReturn\Alignment):
+- ldmfd sp!, {r7, lr}
+- bx lr
++// EPILOG_POP "{r7, lr}"
++// free_stack (8 + \Alignment)
++// bx lr
+ NESTED_END CallSignalHandlerWrapper\Alignment, _TEXT
+
+ .endm
+diff --git a/src/pal/src/arch/arm/signalhandlerhelper.cpp b/src/pal/src/arch/arm/signalhandlerhelper.cpp
+index e1ad460..3936204 100644
+--- a/src/pal/src/arch/arm/signalhandlerhelper.cpp
++++ b/src/pal/src/arch/arm/signalhandlerhelper.cpp
+@@ -48,7 +48,9 @@ void ExecuteHandlerOnOriginalStack(int code, siginfo_t *siginfo, void *context,
+ // Build fake stack frame to enable the stack unwinder to unwind from signal_handler_worker to the faulting instruction
+ // pushed LR
+ *--sp = (size_t)MCREG_Pc(ucontext->uc_mcontext);
++ *--sp = (size_t)MCREG_Lr(ucontext->uc_mcontext);
+ // pushed frame pointer
++ *--sp = (size_t)MCREG_R11(ucontext->uc_mcontext);
+ *--sp = (size_t)MCREG_R7(ucontext->uc_mcontext);
+
+ // Switch the current context to the signal_handler_worker and the original stack
+--
+1.9.1
+