Module Name:    src
Committed By:   christos
Date:           Thu Oct 23 00:25:54 UTC 2014

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

Log Message:
simplify and add more architectures.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \
    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.3 src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.4
--- src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.3	Wed Oct 22 12:53:16 2014
+++ src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc	Wed Oct 22 20:25:54 2014
@@ -50,39 +50,38 @@ void *AsanDoesNotSupportStaticLinkage() 
 
 void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
 #ifdef __NetBSD__
-# if defined(__arm__)
-#  define REG_PC _REG_PC
-#  define REG_BP _REG_FP
-#  define REG_SP _REG_SP
+# define __UC_MACHINE_FP(ucontext, r) \
+    (ucontext)->uc_mcontext.__gregs[(r)]
+/*
+ * Unfortunately we don't have a portable frame pointer (yet)
+ */
+# if defined(__alpha__)
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_X15)
+# elif defined(__arm__)
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_FP)
 # elif defined(__x86_64__)
-#  define REG_PC _REG_RIP
-#  define REG_BP _REG_RBP
-#  define REG_SP _REG_RSP
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_RBP)
 # elif defined(__i386__)
-#  define REG_PC _REG_EIP
-#  define REG_BP _REG_EBP
-#  define REG_SP _REG_ESP
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_EBP)
+# elif defined(__m68k__)
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_A6)
+# elif defined(__mips__)
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S8)
 # elif defined(__powerpc__) || defined(__powerpc64__)
-#  define REG_PC _REG_PC
-#  define REG_BP _REG_R1
-#  define REG_SP _REG_R31
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_R1)
 # elif defined(__sparc__)
+#  define _UC_MACHINE_FP(ucontext) sp[15]
+# elif defined(__sh3__)
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_R14)
+# elif defined(__vax__)
+#  define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_FP)
+# else
+#  define _UC_MACHINE_FP(ucontext) 0
+# endif
   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
-
-# 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
+  *bp = _UC_MACHINE_FP(ucontext);
 #elif ASAN_ANDROID
   *pc = *sp = *bp = 0;
 #elif defined(__arm__)

Reply via email to