diff options
author | andrew <andrew@FreeBSD.org> | 2015-08-24 12:17:15 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-08-24 12:17:15 +0000 |
commit | 6fb9e68f2395309c783f859eda8f71afc70d77aa (patch) | |
tree | 7a479f1697a2e3db0e629fff54417f137b7adbcf /lib/libproc | |
parent | 1100acd920924bf04e54a3ceaddb3e04c240320c (diff) | |
download | FreeBSD-src-6fb9e68f2395309c783f859eda8f71afc70d77aa.zip FreeBSD-src-6fb9e68f2395309c783f859eda8f71afc70d77aa.tar.gz |
Fix libproc on architectures that don't need the program counter to be
adjusted. This seems to be the case on all non-x86 architectures libproc
supports.
Reviewed by: kib
Obtained from: ABT Systems Ltd
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D3465
Diffstat (limited to 'lib/libproc')
-rw-r--r-- | lib/libproc/proc_bkpt.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/libproc/proc_bkpt.c b/lib/libproc/proc_bkpt.c index 50d8a9d..f0ff5c5 100644 --- a/lib/libproc/proc_bkpt.c +++ b/lib/libproc/proc_bkpt.c @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #elif defined(__amd64__) || defined(__i386__) #define BREAKPOINT_INSTR 0xcc /* int 0x3 */ #define BREAKPOINT_INSTR_SZ 1 +#define BREAKPOINT_ADJUST_SZ BREAKPOINT_INSTR_SZ #elif defined(__arm__) #define BREAKPOINT_INSTR 0xe7ffffff /* bkpt */ #define BREAKPOINT_INSTR_SZ 4 @@ -195,11 +196,19 @@ proc_bkptdel(struct proc_handle *phdl, uintptr_t address, /* * Decrement pc so that we delete the breakpoint at the correct * address, i.e. at the BREAKPOINT_INSTR address. + * + * This is only needed on some architectures where the pc value + * when reading registers points at the instruction after the + * breakpoint, e.g. x86. */ void proc_bkptregadj(unsigned long *pc) { - *pc = *pc - BREAKPOINT_INSTR_SZ; + + (void)pc; +#ifdef BREAKPOINT_ADJUST_SZ + *pc = *pc - BREAKPOINT_ADJUST_SZ; +#endif } /* |