summaryrefslogtreecommitdiffstats
path: root/lib/libproc
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2015-08-24 12:17:15 +0000
committerandrew <andrew@FreeBSD.org>2015-08-24 12:17:15 +0000
commit6fb9e68f2395309c783f859eda8f71afc70d77aa (patch)
tree7a479f1697a2e3db0e629fff54417f137b7adbcf /lib/libproc
parent1100acd920924bf04e54a3ceaddb3e04c240320c (diff)
downloadFreeBSD-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.c11
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
}
/*
OpenPOWER on IntegriCloud