simplify and add more architectures.
This commit is contained in:
parent
e3b61b8356
commit
9512ff2aab
@ -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__)
|
||||
|
Loading…
Reference in New Issue
Block a user