diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1ca03b4e17a..6e5e88f9231 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2021-06-01 John Baldwin + + * infrun.c (handle_inferior_event): Only call + gdbarch_displaced_step_restore_all_in_ptid if + gdbarch_supports_displaced_stepping is true. + 2021-06-01 Tom Tromey * Makefile.in (all-data-directory): Remove. diff --git a/gdb/infrun.c b/gdb/infrun.c index e9624d2a9b6..488bcc1e10b 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -5493,10 +5493,18 @@ handle_inferior_event (struct execution_control_state *ecs) struct gdbarch *gdbarch = regcache->arch (); inferior *parent_inf = find_inferior_ptid (ecs->target, ecs->ptid); - /* If this is a fork (child gets its own address space copy) and some - displaced step buffers were in use at the time of the fork, restore - the displaced step buffer bytes in the child process. */ - if (ecs->ws.kind == TARGET_WAITKIND_FORKED) + /* If this is a fork (child gets its own address space copy) + and some displaced step buffers were in use at the time of + the fork, restore the displaced step buffer bytes in the + child process. + + Architectures which support displaced stepping and fork + events must supply an implementation of + gdbarch_displaced_step_restore_all_in_ptid. This is not + enforced during gdbarch validation to support architectures + which support displaced stepping but not forks. */ + if (ecs->ws.kind == TARGET_WAITKIND_FORKED + && gdbarch_supports_displaced_stepping (gdbarch)) gdbarch_displaced_step_restore_all_in_ptid (gdbarch, parent_inf, ecs->ws.value.related_pid);