Module Name:    src
Committed By:   christos
Date:           Wed Oct 22 16:53:16 UTC 2014

Modified Files:
        src/external/gpl3/gcc/dist/libsanitizer/asan: asan_linux.cc

Log Message:
Do the mcontext stuff differently so that we don't fail compilation.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc
diff -u src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.2 src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.3
--- src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.2	Wed Oct 15 14:44:49 2014
+++ src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc	Wed Oct 22 12:53:16 2014
@@ -48,15 +48,42 @@ void *AsanDoesNotSupportStaticLinkage() 
   return &_DYNAMIC;  // defined in link.h
 }
 
+void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
 #ifdef __NetBSD__
-#define gregs __gregs
-#define REG_RIP _REG_RIP
-#define REG_RBP _REG_RBP
-#define REG_RSP _REG_RSP
+# if defined(__arm__)
+#  define REG_PC _REG_PC
+#  define REG_BP _REG_FP
+#  define REG_SP _REG_SP
+# elif defined(__x86_64__)
+#  define REG_PC _REG_RIP
+#  define REG_BP _REG_RBP
+#  define REG_SP _REG_RSP
+# elif defined(__i386__)
+#  define REG_PC _REG_EIP
+#  define REG_BP _REG_EBP
+#  define REG_SP _REG_ESP
+# elif defined(__powerpc__) || defined(__powerpc64__)
+#  define REG_PC _REG_PC
+#  define REG_BP _REG_R1
+#  define REG_SP _REG_R31
+# elif defined(__sparc__)
+  ucontext_t *ucontext = (ucontext_t*)context;
+  *pc = _UC_MACHINE_PC(ucontext);
+  *sp = _UC_MACHINE_SP(ucontext);
+  *bp = sp[15]; // XXX: christos
+# else
+  // Lot's are missing, please add more.
 #endif
 
-void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
-#if ASAN_ANDROID
+# ifdef REG_PC
+  ucontext_t *ucontext = (ucontext_t*)context;
+  *pc = ucontext->uc_mcontext.__gregs[REG_PC];
+  *bp = ucontext->uc_mcontext.__gregs[REG_BP];
+  *sp = ucontext->uc_mcontext.__gregs[REG_SP];
+# else
+  *pc = *bp = *sp = 0;
+# endif
+#elif ASAN_ANDROID
   *pc = *sp = *bp = 0;
 #elif defined(__arm__)
   ucontext_t *ucontext = (ucontext_t*)context;

Reply via email to