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;