mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
Fix PR gdb/19676: Disable displaced stepping if /proc not mounted
On GNU/Linux archs that support displaced stepping, if /proc is not mounted, GDB gets stuck not able to step past breakpoints: (gdb) c Continuing. dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>, auxv=<optimized out>) at rtld.c:2163 2163 LIBC_PROBE (init_complete, 2, LM_ID_BASE, r); Cannot find AT_ENTRY auxiliary vector entry. (gdb) c Continuing. dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>, auxv=<optimized out>) at rtld.c:2163 2163 LIBC_PROBE (init_complete, 2, LM_ID_BASE, r); Cannot find AT_ENTRY auxiliary vector entry. (gdb) That's because GDB can't figure out where the scratch pad is. This is a regression introduced by the earlier changes to make the Linux native target always work in non-stop mode. This commit makes GDB detect the case and fallback to stepping over breakpoints in-line. gdb/ChangeLog: 2016-03-15 Pedro Alves <palves@redhat.com> PR gdb/19676 * infrun.c (displaced_step_prepare): Also disable displaced stepping on NOT_SUPPORTED_ERROR. * linux-tdep.c (linux_displaced_step_location): If reading auxv fails, throw NOT_SUPPORTED_ERROR instead of generic error.
This commit is contained in:
@@ -1,3 +1,11 @@
|
||||
2016-03-15 Pedro Alves <palves@redhat.com>
|
||||
|
||||
PR gdb/19676
|
||||
* infrun.c (displaced_step_prepare): Also disable displaced
|
||||
stepping on NOT_SUPPORTED_ERROR.
|
||||
* linux-tdep.c (linux_displaced_step_location): If reading auxv
|
||||
fails, throw NOT_SUPPORTED_ERROR instead of generic error.
|
||||
|
||||
2016-02-24 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* version.in: Set GDB version number to 7.11.0.DATE-git.
|
||||
|
||||
@@ -1894,7 +1894,8 @@ displaced_step_prepare (ptid_t ptid)
|
||||
{
|
||||
struct displaced_step_inferior_state *displaced_state;
|
||||
|
||||
if (ex.error != MEMORY_ERROR)
|
||||
if (ex.error != MEMORY_ERROR
|
||||
&& ex.error != NOT_SUPPORTED_ERROR)
|
||||
throw_exception (ex);
|
||||
|
||||
if (debug_infrun)
|
||||
|
||||
@@ -2426,7 +2426,8 @@ linux_displaced_step_location (struct gdbarch *gdbarch)
|
||||
location. The auxiliary vector gets us the PowerPC-side entry
|
||||
point address instead. */
|
||||
if (target_auxv_search (¤t_target, AT_ENTRY, &addr) <= 0)
|
||||
error (_("Cannot find AT_ENTRY auxiliary vector entry."));
|
||||
throw_error (NOT_SUPPORTED_ERROR,
|
||||
_("Cannot find AT_ENTRY auxiliary vector entry."));
|
||||
|
||||
/* Make certain that the address points at real code, and not a
|
||||
function descriptor. */
|
||||
|
||||
Reference in New Issue
Block a user