mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-15 05:01:13 +08:00
Fix PR gdb/19858: GDB doesn't register the JIT libraries on attach
Ref: https://sourceware.org/ml/gdb/2016-03/msg00023.html GDB currently fails to fetch the list of already-registered JIT modules on attach. Nothing is calling jit_inferior_init, which is what is responsible for walking the JIT object list at init time. Despite the misleading naming, jit_inferior_created_hook -> jit_inferior_init is only called when the inferior execs. This regressed with the fix for PR gdb/13431 (03bef283c2d3): https://sourceware.org/ml/gdb-patches/2012-02/msg00023.html which removed the inferior_created (jit_inferior_created_observer) observer. Adding an inferior_created observer back fixes the issue. In turn, this exposes a bug in jit_breakpoint_re_set_internal as well, which is returning the wrong result when we already have the breakpoint at the right address. gdb/ChangeLog: 2016-03-31 Yichao Yu <yyc1992@gmail.com> PR gdb/19858 * jit.c (jit_breakpoint_re_set_internal): Return 0 if we already got the breakpoint at the right address. (jit_inferior_created): New function. (_initialize_jit): Install jit_inferior_created as inferior_created observer. Signed-off-by: Pedro Alves <palves@redhat.com>
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2016-03-31 Yichao Yu <yyc1992@gmail.com>
|
||||||
|
|
||||||
|
PR gdb/19858
|
||||||
|
* jit.c (jit_breakpoint_re_set_internal): Return 0 if we already
|
||||||
|
got the breakpoint at the right address.
|
||||||
|
(jit_inferior_created): New function.
|
||||||
|
(_initialize_jit): Install jit_inferior_created as
|
||||||
|
inferior_created observer.
|
||||||
|
|
||||||
2016-03-31 Marcin Kościelnicki <koriakin@0x04.net>
|
2016-03-31 Marcin Kościelnicki <koriakin@0x04.net>
|
||||||
|
|
||||||
* NEWS: Mention support for tracepoints on powerpc*-linux.
|
* NEWS: Mention support for tracepoints on powerpc*-linux.
|
||||||
|
13
gdb/jit.c
13
gdb/jit.c
@ -1026,7 +1026,7 @@ jit_breakpoint_deleted (struct breakpoint *b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (Re-)Initialize the jit breakpoint if necessary.
|
/* (Re-)Initialize the jit breakpoint if necessary.
|
||||||
Return 0 on success. */
|
Return 0 if the jit breakpoint has been successfully initialized. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
|
jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
|
||||||
@ -1070,7 +1070,7 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
|
|||||||
paddress (gdbarch, addr));
|
paddress (gdbarch, addr));
|
||||||
|
|
||||||
if (ps_data->cached_code_address == addr)
|
if (ps_data->cached_code_address == addr)
|
||||||
return 1;
|
return 0;
|
||||||
|
|
||||||
/* Delete the old breakpoint. */
|
/* Delete the old breakpoint. */
|
||||||
if (ps_data->jit_breakpoint != NULL)
|
if (ps_data->jit_breakpoint != NULL)
|
||||||
@ -1367,6 +1367,14 @@ jit_inferior_init (struct gdbarch *gdbarch)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* inferior_created observer. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
jit_inferior_created (struct target_ops *ops, int from_tty)
|
||||||
|
{
|
||||||
|
jit_inferior_created_hook ();
|
||||||
|
}
|
||||||
|
|
||||||
/* Exported routine to call when an inferior has been created. */
|
/* Exported routine to call when an inferior has been created. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1496,6 +1504,7 @@ _initialize_jit (void)
|
|||||||
show_jit_debug,
|
show_jit_debug,
|
||||||
&setdebuglist, &showdebuglist);
|
&setdebuglist, &showdebuglist);
|
||||||
|
|
||||||
|
observer_attach_inferior_created (jit_inferior_created);
|
||||||
observer_attach_inferior_exit (jit_inferior_exit_hook);
|
observer_attach_inferior_exit (jit_inferior_exit_hook);
|
||||||
observer_attach_breakpoint_deleted (jit_breakpoint_deleted);
|
observer_attach_breakpoint_deleted (jit_breakpoint_deleted);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user