diff options
author | Pedro Alves <palves@redhat.com> | 2015-08-06 18:23:00 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2015-08-07 17:26:21 +0100 |
commit | 7f03bd92e389a32da490bb55037881cf374d0f69 (patch) | |
tree | 606d5caefa48369c6193bc6c4e568ae74cd9adf7 /gdb/gdbarch.h | |
parent | 3fc8eb30a95df3fd07a63e9bd0a9d309b86a0357 (diff) | |
download | gdb-7f03bd92e389a32da490bb55037881cf374d0f69.zip gdb-7f03bd92e389a32da490bb55037881cf374d0f69.tar.gz gdb-7f03bd92e389a32da490bb55037881cf374d0f69.tar.bz2 |
PPC64: Fix gdb.arch/ppc64-atomic-inst.exp with displaced stepping
The ppc64 displaced step code can't handle atomic sequences. Fallback
to stepping over the breakpoint in-line if we detect one.
gdb/ChangeLog:
2015-08-07 Pedro Alves <palves@redhat.com>
* infrun.c (displaced_step_prepare_throw): Return -1 if
gdbarch_displaced_step_copy_insn returns NULL. Update intro
comment.
* rs6000-tdep.c (LWARX_MASK, LWARX_INSTRUCTION, LDARX_INSTRUCTION)
(STWCX_MASK, STWCX_INSTRUCTION, STDCX_INSTRUCTION): Move higher up
in file.
(ppc_displaced_step_copy_insn): New function.
(ppc_displaced_step_fixup): Update comment.
(rs6000_gdbarch_init): Install ppc_displaced_step_copy_insn as
gdbarch_displaced_step_copy_insn hook.
* gdbarch.sh (displaced_step_copy_insn): Document what happens on
NULL return.
* gdbarch.h: Regenerate.
gdb/testsuite/ChangeLog:
2015-08-07 Pedro Alves <palves@redhat.com>
* gdb.arch/ppc64-atomic-inst.exp (do_test): New procedure, move
tests here.
(top level): Run do_test with and without displaced stepping.
Diffstat (limited to 'gdb/gdbarch.h')
-rw-r--r-- | gdb/gdbarch.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index d714281..c1e2c1a 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -923,7 +923,11 @@ extern void set_gdbarch_max_insn_length (struct gdbarch *gdbarch, ULONGEST max_i If your architecture doesn't need to adjust instructions before single-stepping them, consider using simple_displaced_step_copy_insn - here. */ + here. + + If the instruction cannot execute out of line, return NULL. The + core falls back to stepping past the instruction in-line instead in + that case. */ extern int gdbarch_displaced_step_copy_insn_p (struct gdbarch *gdbarch); |