summaryrefslogtreecommitdiff
path: root/system/gcc/401-libsanitizer-linux.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/gcc/401-libsanitizer-linux.patch')
-rw-r--r--system/gcc/401-libsanitizer-linux.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/system/gcc/401-libsanitizer-linux.patch b/system/gcc/401-libsanitizer-linux.patch
new file mode 100644
index 000000000..8a662a268
--- /dev/null
+++ b/system/gcc/401-libsanitizer-linux.patch
@@ -0,0 +1,100 @@
+--- gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_linux.cc.old 2017-10-19 11:23:59.000000000 +0000
++++ gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_linux.cc 2019-06-27 05:39:48.258332316 +0000
+@@ -752,7 +752,9 @@
+ }
+
+ #if SANITIZER_LINUX
++#ifndef SA_RESTORER
+ #define SA_RESTORER 0x04000000
++#endif
+ // Doesn't set sa_restorer if the caller did not set it, so use with caution
+ //(see below).
+ int internal_sigaction_norestorer(int signum, const void *act, void *oldact) {
+@@ -1687,65 +1689,59 @@
+ }
+
+ static void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
+-#if defined(__arm__)
+ ucontext_t *ucontext = (ucontext_t*)context;
++#if defined(__arm__)
+ *pc = ucontext->uc_mcontext.arm_pc;
+ *bp = ucontext->uc_mcontext.arm_fp;
+ *sp = ucontext->uc_mcontext.arm_sp;
+ #elif defined(__aarch64__)
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.pc;
+ *bp = ucontext->uc_mcontext.regs[29];
+ *sp = ucontext->uc_mcontext.sp;
+ #elif defined(__hppa__)
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.sc_iaoq[0];
+ /* GCC uses %r3 whenever a frame pointer is needed. */
+ *bp = ucontext->uc_mcontext.sc_gr[3];
+ *sp = ucontext->uc_mcontext.sc_gr[30];
+ #elif defined(__x86_64__)
+ # if SANITIZER_FREEBSD
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.mc_rip;
+ *bp = ucontext->uc_mcontext.mc_rbp;
+ *sp = ucontext->uc_mcontext.mc_rsp;
+ #elif SANITIZER_NETBSD
+- ucontext_t *ucontext = (ucontext_t *)context;
+ *pc = ucontext->uc_mcontext.__gregs[_REG_RIP];
+ *bp = ucontext->uc_mcontext.__gregs[_REG_RBP];
+ *sp = ucontext->uc_mcontext.__gregs[_REG_RSP];
+ # else
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.gregs[REG_RIP];
+ *bp = ucontext->uc_mcontext.gregs[REG_RBP];
+ *sp = ucontext->uc_mcontext.gregs[REG_RSP];
+ # endif
+ #elif defined(__i386__)
+ # if SANITIZER_FREEBSD
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.mc_eip;
+ *bp = ucontext->uc_mcontext.mc_ebp;
+ *sp = ucontext->uc_mcontext.mc_esp;
+ #elif SANITIZER_NETBSD
+- ucontext_t *ucontext = (ucontext_t *)context;
+ *pc = ucontext->uc_mcontext.__gregs[_REG_EIP];
+ *bp = ucontext->uc_mcontext.__gregs[_REG_EBP];
+ *sp = ucontext->uc_mcontext.__gregs[_REG_ESP];
+ # else
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.gregs[REG_EIP];
+ *bp = ucontext->uc_mcontext.gregs[REG_EBP];
+ *sp = ucontext->uc_mcontext.gregs[REG_ESP];
+ # endif
+-#elif defined(__powerpc__) || defined(__powerpc64__)
+- ucontext_t *ucontext = (ucontext_t*)context;
+- *pc = ucontext->uc_mcontext.regs->nip;
+- *sp = ucontext->uc_mcontext.regs->gpr[PT_R1];
++#elif defined(__powerpc64__)
++ *pc = ucontext->uc_mcontext.gp_regs[32];
++ *sp = ucontext->uc_mcontext.gp_regs[1];
++ *bp = ucontext->uc_mcontext.gp_regs[31];
++#elif defined(__powerpc__)
++ *pc = ucontext->uc_mcontext.gregs[32];
++ *sp = ucontext->uc_mcontext.gregs[1];
+ // The powerpc{,64}-linux ABIs do not specify r31 as the frame
+ // pointer, but GCC always uses r31 when we need a frame pointer.
+- *bp = ucontext->uc_mcontext.regs->gpr[PT_R31];
++ *bp = ucontext->uc_mcontext.gregs[31];
+ #elif defined(__sparc__)
+- ucontext_t *ucontext = (ucontext_t*)context;
+ uptr *stk_ptr;
+ # if defined (__arch64__)
+ *pc = ucontext->uc_mcontext.mc_gregs[MC_PC];
+@@ -1759,12 +1755,10 @@
+ *bp = stk_ptr[15];
+ # endif
+ #elif defined(__mips__)
+- ucontext_t *ucontext = (ucontext_t*)context;
+ *pc = ucontext->uc_mcontext.pc;
+ *bp = ucontext->uc_mcontext.gregs[30];
+ *sp = ucontext->uc_mcontext.gregs[29];
+ #elif defined(__s390__)
+- ucontext_t *ucontext = (ucontext_t*)context;
+ # if defined(__s390x__)
+ *pc = ucontext->uc_mcontext.psw.addr;
+ # else