displaced_step_fixup may access memory from the wrong inferior/thread
authorPedro Alves <palves@redhat.com>
Tue, 10 Feb 2015 19:13:31 +0000 (19:13 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 10 Feb 2015 19:13:31 +0000 (19:13 +0000)
commitb052c4fbf5e64a2e96452642adf433f60b185245
tree3c82670d102425aa50b6b1a2888825c1414aa521
parentb05ec7a53f8a3b0cbcb2b42772ca0e70a319d2ab
displaced_step_fixup may access memory from the wrong inferior/thread

displaced_step_fixup takes an thread to work with, as argument.  OTOH,
gdbarch_displaced_step_fixup fixes up the current thread.  The former
calls the latter without making sure the current thread is the one
that was passed in.  If it is not, then gdbarch_displaced_step_fixup
may e.g., try reading from a running thread, which doesn't work on
some targets, or worse, read memory from the wrong inferior and
succeed.

This is mostly a latent problem currently, as non-stop switches the
current thread to the event thread early in fetch_inferior_event.

Tested on x86_64 Fedora 20.

gdb/
2015-02-10  Pedro Alves  <palves@redhat.com>

* infrun.c (displaced_step_fixup): Switch to the event thread
before calling gdbarch_displaced_step_fixup.
gdb/ChangeLog
gdb/infrun.c