doc/ChangeLog:
* observer.texi (GDB Observers): New observer "new_objfile". ChangeLog: * observer.sh: Add "struct objfile" forward declaration. * target.h (deprecated_target_new_objfile_hook): Remove. * symfile.c (deprecated_target_new_objfile_hook): Remove. (clear_symtab_users): Call observer_notify_new_objfile. (symbol_file_add_with_addrs_or_offsets): Likewise. * rs6000-nat.c: Include "observer.h". (vmap_ldinfo): Call observer_notify_new_objfile. (xcoff_relocate_core): Likewise. * remote.c (remote_new_objfile_chain): Remove. (remote_new_objfile): Do not call remote_new_objfile_chain. (_initialize_remote): Use observer_attach_new_objfile. * tui/tui-hooks.c (tui_target_new_objfile_chain): Remove. (tui_new_objfile_hook): Do not call tui_target_new_objfile_chain. (_initialize_tui_hooks): Use observer_attach_new_objfile. * aix-thread.c: Include "observer.h". (target_new_objfile_chain): Remove. (new_objfile): Do not call target_new_objfile_chain. (_initialize_aix_thread): Use observer_attach_new_objfile. * hpux-thread.c: Include "observer.h" (target_new_objfile_chain): Remove. (hpux_thread_new_objfile): Make static. Do not call target_new_objfile_chain. (_initialize_hpux_thread): Use observer_attach_new_objfile. * linux-thread-db.c: Include "observer.h". (target_new_objfile_chain): Remove. (thread_db_new_objfile): Do not call target_new_objfile_chain. (_initialize_thread_db): Use observer_attach_new_objfile. * sol-thread.c: Include "observer.h". (target_new_objfile_chain): Remove. (sol_thread_new_objfile): Make static. Do not call target_new_objfile_chain. (_initialize_sol_thread): Use observer_attach_new_objfile. * Makefile.in (aix-thread.o, hpux-thread.o, linux-thread-db.o, rs6000-nat.o, sol-thread.o, tui-hooks.o): Add dependency on $(observer_h).
This commit is contained in:
parent
93ce768456
commit
06d3b283b1
@ -1,3 +1,41 @@
|
||||
2007-05-11 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* observer.sh: Add "struct objfile" forward declaration.
|
||||
* target.h (deprecated_target_new_objfile_hook): Remove.
|
||||
* symfile.c (deprecated_target_new_objfile_hook): Remove.
|
||||
(clear_symtab_users): Call observer_notify_new_objfile.
|
||||
(symbol_file_add_with_addrs_or_offsets): Likewise.
|
||||
* rs6000-nat.c: Include "observer.h".
|
||||
(vmap_ldinfo): Call observer_notify_new_objfile.
|
||||
(xcoff_relocate_core): Likewise.
|
||||
* remote.c (remote_new_objfile_chain): Remove.
|
||||
(remote_new_objfile): Do not call remote_new_objfile_chain.
|
||||
(_initialize_remote): Use observer_attach_new_objfile.
|
||||
* tui/tui-hooks.c (tui_target_new_objfile_chain): Remove.
|
||||
(tui_new_objfile_hook): Do not call tui_target_new_objfile_chain.
|
||||
(_initialize_tui_hooks): Use observer_attach_new_objfile.
|
||||
* aix-thread.c: Include "observer.h".
|
||||
(target_new_objfile_chain): Remove.
|
||||
(new_objfile): Do not call target_new_objfile_chain.
|
||||
(_initialize_aix_thread): Use observer_attach_new_objfile.
|
||||
* hpux-thread.c: Include "observer.h"
|
||||
(target_new_objfile_chain): Remove.
|
||||
(hpux_thread_new_objfile): Make static. Do not call
|
||||
target_new_objfile_chain.
|
||||
(_initialize_hpux_thread): Use observer_attach_new_objfile.
|
||||
* linux-thread-db.c: Include "observer.h".
|
||||
(target_new_objfile_chain): Remove.
|
||||
(thread_db_new_objfile): Do not call target_new_objfile_chain.
|
||||
(_initialize_thread_db): Use observer_attach_new_objfile.
|
||||
* sol-thread.c: Include "observer.h".
|
||||
(target_new_objfile_chain): Remove.
|
||||
(sol_thread_new_objfile): Make static. Do not call
|
||||
target_new_objfile_chain.
|
||||
(_initialize_sol_thread): Use observer_attach_new_objfile.
|
||||
* Makefile.in (aix-thread.o, hpux-thread.o, linux-thread-db.o,
|
||||
rs6000-nat.o, sol-thread.o, tui-hooks.o): Add dependency on
|
||||
$(observer_h).
|
||||
|
||||
2007-05-11 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* gdbarch.sh (remote_translate_xfer_address): Remove.
|
||||
|
@ -1708,7 +1708,7 @@ ada-valprint.o: ada-valprint.c $(defs_h) $(gdb_string_h) $(symtab_h) \
|
||||
$(exceptions_h)
|
||||
aix-thread.o: aix-thread.c $(defs_h) $(gdb_assert_h) $(gdbthread_h) \
|
||||
$(target_h) $(inferior_h) $(regcache_h) $(gdbcmd_h) $(ppc_tdep_h) \
|
||||
$(gdb_string_h)
|
||||
$(gdb_string_h) $(observer_h)
|
||||
alphabsd-nat.o: alphabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
|
||||
$(alpha_tdep_h) $(alphabsd_tdep_h) $(inf_ptrace_h) $(gregset_h) \
|
||||
$(bsd_kvm_h)
|
||||
@ -2080,7 +2080,7 @@ hppa-tdep.o: hppa-tdep.c $(defs_h) $(bfd_h) $(inferior_h) $(regcache_h) \
|
||||
$(hppa_tdep_h) $(gdbtypes_h)
|
||||
hpux-thread.o: hpux-thread.c $(defs_h) $(gdbthread_h) $(target_h) \
|
||||
$(inferior_h) $(regcache_h) $(gdb_stat_h) $(gdbcore_h) \
|
||||
$(hppa_tdep_h)
|
||||
$(hppa_tdep_h) $(observer_h)
|
||||
i386bsd-nat.o: i386bsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
|
||||
$(gdb_assert_h) $(i386_tdep_h) $(i387_tdep_h) $(i386bsd_nat_h) \
|
||||
$(inf_ptrace_h)
|
||||
@ -2226,7 +2226,7 @@ linux-nat.o: linux-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdb_string_h) \
|
||||
linux-thread-db.o: linux-thread-db.c $(defs_h) $(gdb_assert_h) \
|
||||
$(gdb_proc_service_h) $(gdb_thread_db_h) $(bfd_h) $(exceptions_h) \
|
||||
$(gdbthread_h) $(inferior_h) $(symfile_h) $(objfiles_h) $(target_h) \
|
||||
$(regcache_h) $(solib_svr4_h) $(gdbcore_h) $(linux_nat_h)
|
||||
$(regcache_h) $(solib_svr4_h) $(gdbcore_h) $(observer_h) $(linux_nat_h)
|
||||
m2-exp.o: m2-exp.c $(defs_h) $(gdb_string_h) $(expression_h) $(language_h) \
|
||||
$(value_h) $(parser_defs_h) $(m2_lang_h) $(bfd_h) $(symfile_h) \
|
||||
$(objfiles_h) $(block_h)
|
||||
@ -2505,7 +2505,7 @@ rs6000-nat.o: rs6000-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdbcore_h) \
|
||||
$(xcoffsolib_h) $(symfile_h) $(objfiles_h) $(libbfd_h) $(bfd_h) \
|
||||
$(exceptions_h) $(gdb_stabs_h) $(regcache_h) $(arch_utils_h) \
|
||||
$(inf_ptrace_h) $(ppc_tdep_h) $(rs6000_tdep_h) $(exec_h) \
|
||||
$(gdb_stdint_h) $(gdb_stat_h)
|
||||
$(gdb_stdint_h) $(observer_h) $(gdb_stat_h)
|
||||
rs6000-tdep.o: rs6000-tdep.c $(defs_h) $(frame_h) $(inferior_h) $(symtab_h) \
|
||||
$(target_h) $(gdbcore_h) $(gdbcmd_h) $(objfiles_h) $(arch_utils_h) \
|
||||
$(regcache_h) $(regset_h) $(doublest_h) $(value_h) $(parser_defs_h) \
|
||||
@ -2596,7 +2596,7 @@ solib-svr4.o: solib-svr4.c $(defs_h) $(elf_external_h) $(elf_common_h) \
|
||||
$(exec_h)
|
||||
sol-thread.o: sol-thread.c $(defs_h) $(gdbthread_h) $(target_h) \
|
||||
$(inferior_h) $(gdb_stat_h) $(gdbcmd_h) $(gdbcore_h) $(regcache_h) \
|
||||
$(solib_h) $(symfile_h) $(gdb_string_h) $(gregset_h)
|
||||
$(solib_h) $(symfile_h) $(observer_h) $(gdb_string_h) $(gregset_h)
|
||||
somread.o: somread.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \
|
||||
$(objfiles_h) $(buildsym_h) $(stabsread_h) $(gdb_stabs_h) \
|
||||
$(complaints_h) $(gdb_string_h) $(demangle_h) $(som_h) $(libhppa_h) \
|
||||
@ -3126,8 +3126,8 @@ tui-file.o: $(srcdir)/tui/tui-file.c $(defs_h) $(ui_file_h) $(tui_file_h) \
|
||||
tui-hooks.o: $(srcdir)/tui/tui-hooks.c $(defs_h) $(symtab_h) $(inferior_h) \
|
||||
$(command_h) $(bfd_h) $(symfile_h) $(objfiles_h) $(target_h) \
|
||||
$(gdbcore_h) $(event_loop_h) $(event_top_h) $(frame_h) \
|
||||
$(breakpoint_h) $(gdb_events_h) $(ui_out_h) $(top_h) $(tui_h) \
|
||||
$(tui_hooks_h) $(tui_data_h) $(tui_layout_h) $(tui_io_h) \
|
||||
$(breakpoint_h) $(gdb_events_h) $(ui_out_h) $(top_h) $(observer_h) \
|
||||
$(tui_h) $(tui_hooks_h) $(tui_data_h) $(tui_layout_h) $(tui_io_h) \
|
||||
$(tui_regs_h) $(tui_win_h) $(tui_stack_h) $(tui_windata_h) \
|
||||
$(tui_winsource_h) $(gdb_curses_h) $(readline_h)
|
||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-hooks.c
|
||||
|
@ -50,6 +50,7 @@
|
||||
#include "gdbcmd.h"
|
||||
#include "ppc-tdep.h"
|
||||
#include "gdb_string.h"
|
||||
#include "observer.h"
|
||||
|
||||
#include <procinfo.h>
|
||||
#include <sys/types.h>
|
||||
@ -129,11 +130,6 @@ static int pd_active = 0;
|
||||
|
||||
static int arch64;
|
||||
|
||||
/* Saved pointer to previous owner of
|
||||
deprecated_target_new_objfile_hook. */
|
||||
|
||||
static void (*target_new_objfile_chain)(struct objfile *);
|
||||
|
||||
/* Forward declarations for pthdb callbacks. */
|
||||
|
||||
static int pdc_symbol_addrs (pthdb_user_t, pthdb_symbol_t *, int);
|
||||
@ -925,7 +921,7 @@ pd_disable (void)
|
||||
unpush_target (&aix_thread_ops);
|
||||
}
|
||||
|
||||
/* deprecated_target_new_objfile_hook callback.
|
||||
/* new_objfile observer callback.
|
||||
|
||||
If OBJFILE is non-null, check whether a threaded application is
|
||||
being debugged, and if so, prepare for thread debugging.
|
||||
@ -939,9 +935,6 @@ new_objfile (struct objfile *objfile)
|
||||
pd_enable ();
|
||||
else
|
||||
pd_disable ();
|
||||
|
||||
if (target_new_objfile_chain)
|
||||
target_new_objfile_chain (objfile);
|
||||
}
|
||||
|
||||
/* Attach to process specified by ARGS. */
|
||||
@ -1792,8 +1785,7 @@ _initialize_aix_thread (void)
|
||||
add_target (&aix_thread_ops);
|
||||
|
||||
/* Notice when object files get loaded and unloaded. */
|
||||
target_new_objfile_chain = deprecated_target_new_objfile_hook;
|
||||
deprecated_target_new_objfile_hook = new_objfile;
|
||||
observer_attach_new_objfile (new_objfile);
|
||||
|
||||
add_setshow_boolean_cmd ("aix-thread", class_maintenance, &debug_aix_thread,
|
||||
_("Set debugging of AIX thread module."),
|
||||
|
@ -1,3 +1,7 @@
|
||||
2007-05-11 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* observer.texi (GDB Observers): New observer "new_objfile".
|
||||
|
||||
2007-05-08 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* gdbint.texinfo (Native Conditionals): Remove USE_PROC_FS.
|
||||
|
@ -122,3 +122,10 @@ haven't been loaded yet.
|
||||
@deftypefun void solib_unloaded (struct so_list *@var{solib})
|
||||
The shared library specified by @var{solib} has been unloaded.
|
||||
@end deftypefun
|
||||
|
||||
@deftypefun void new_objfile (struct objfile *@var{objfile})
|
||||
The symbol file specified by @var{objfile} has been loaded.
|
||||
Called with @var{objfile} equal to @code{NULL} to indicate
|
||||
previously loaded symbol table data has now been invalidated.
|
||||
@end deftypefun
|
||||
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "gdb_stat.h"
|
||||
#include "gdbcore.h"
|
||||
#include "hppa-tdep.h"
|
||||
#include "observer.h"
|
||||
|
||||
extern int child_suppress_run;
|
||||
|
||||
@ -461,14 +462,7 @@ hpux_thread_create_inferior (char *exec_file, char *allargs, char **env,
|
||||
those variables don't show up until the library gets mapped and the symbol
|
||||
table is read in. */
|
||||
|
||||
/* This new_objfile event is now managed by a chained function pointer.
|
||||
* It is the callee's responsability to call the next client on the chain.
|
||||
*/
|
||||
|
||||
/* Saved pointer to previous owner of the new_objfile event. */
|
||||
static void (*target_new_objfile_chain) (struct objfile *);
|
||||
|
||||
void
|
||||
static void
|
||||
hpux_thread_new_objfile (struct objfile *objfile)
|
||||
{
|
||||
struct minimal_symbol *ms;
|
||||
@ -476,28 +470,24 @@ hpux_thread_new_objfile (struct objfile *objfile)
|
||||
if (!objfile)
|
||||
{
|
||||
hpux_thread_active = 0;
|
||||
goto quit;
|
||||
return;
|
||||
}
|
||||
|
||||
ms = lookup_minimal_symbol ("cma__g_known_threads", NULL, objfile);
|
||||
|
||||
if (!ms)
|
||||
goto quit;
|
||||
return;
|
||||
|
||||
P_cma__g_known_threads = SYMBOL_VALUE_ADDRESS (ms);
|
||||
|
||||
ms = lookup_minimal_symbol ("cma__g_current_thread", NULL, objfile);
|
||||
|
||||
if (!ms)
|
||||
goto quit;
|
||||
return;
|
||||
|
||||
P_cma__g_current_thread = SYMBOL_VALUE_ADDRESS (ms);
|
||||
|
||||
hpux_thread_active = 1;
|
||||
quit:
|
||||
/* Call predecessor on chain, if any. */
|
||||
if (target_new_objfile_chain)
|
||||
target_new_objfile_chain (objfile);
|
||||
}
|
||||
|
||||
/* Clean up after the inferior dies. */
|
||||
@ -589,6 +579,5 @@ _initialize_hpux_thread (void)
|
||||
|
||||
child_suppress_run = 1;
|
||||
/* Hook into new_objfile notification. */
|
||||
target_new_objfile_chain = deprecated_target_new_objfile_hook;
|
||||
deprecated_target_new_objfile_hook = hpux_thread_new_objfile;
|
||||
observer_attach_new_objfile (hpux_thread_new_objfile);
|
||||
}
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "regcache.h"
|
||||
#include "solib-svr4.h"
|
||||
#include "gdbcore.h"
|
||||
#include "observer.h"
|
||||
#include "linux-nat.h"
|
||||
|
||||
#include <signal.h>
|
||||
@ -58,9 +59,6 @@ static struct target_ops thread_db_ops;
|
||||
/* The target vector that we call for things this module can't handle. */
|
||||
static struct target_ops *target_beneath;
|
||||
|
||||
/* Pointer to the next function on the objfile event chain. */
|
||||
static void (*target_new_objfile_chain) (struct objfile * objfile);
|
||||
|
||||
/* Non-zero if we're using this module's target vector. */
|
||||
static int using_thread_db;
|
||||
|
||||
@ -650,9 +648,6 @@ thread_db_new_objfile (struct objfile *objfile)
|
||||
{
|
||||
if (objfile != NULL)
|
||||
check_for_thread_db ();
|
||||
|
||||
if (target_new_objfile_chain)
|
||||
target_new_objfile_chain (objfile);
|
||||
}
|
||||
|
||||
/* Attach to a new thread. This function is called when we receive a
|
||||
@ -1140,7 +1135,6 @@ _initialize_thread_db (void)
|
||||
add_target (&thread_db_ops);
|
||||
|
||||
/* Add ourselves to objfile event chain. */
|
||||
target_new_objfile_chain = deprecated_target_new_objfile_hook;
|
||||
deprecated_target_new_objfile_hook = thread_db_new_objfile;
|
||||
observer_attach_new_objfile (thread_db_new_objfile);
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ case $lang in
|
||||
struct observer;
|
||||
struct bpstats;
|
||||
struct so_list;
|
||||
struct objfile;
|
||||
EOF
|
||||
;;
|
||||
esac
|
||||
|
13
gdb/remote.c
13
gdb/remote.c
@ -6350,20 +6350,12 @@ build_remote_gdbarch_data (void)
|
||||
remote_address_size = TARGET_ADDR_BIT;
|
||||
}
|
||||
|
||||
/* Saved pointer to previous owner of the new_objfile event. */
|
||||
static void (*remote_new_objfile_chain) (struct objfile *);
|
||||
|
||||
/* Function to be called whenever a new objfile (shlib) is detected. */
|
||||
static void
|
||||
remote_new_objfile (struct objfile *objfile)
|
||||
{
|
||||
if (remote_desc != 0) /* Have a remote connection. */
|
||||
{
|
||||
remote_check_symbols (objfile);
|
||||
}
|
||||
/* Call predecessor on chain, if any. */
|
||||
if (remote_new_objfile_chain)
|
||||
remote_new_objfile_chain (objfile);
|
||||
remote_check_symbols (objfile);
|
||||
}
|
||||
|
||||
void
|
||||
@ -6403,8 +6395,7 @@ _initialize_remote (void)
|
||||
add_target (&extended_async_remote_ops);
|
||||
|
||||
/* Hook into new objfile notification. */
|
||||
remote_new_objfile_chain = deprecated_target_new_objfile_hook;
|
||||
deprecated_target_new_objfile_hook = remote_new_objfile;
|
||||
observer_attach_new_objfile (remote_new_objfile);
|
||||
|
||||
#if 0
|
||||
init_remote_threadtests ();
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "rs6000-tdep.h"
|
||||
#include "exec.h"
|
||||
#include "gdb_stdint.h"
|
||||
#include "observer.h"
|
||||
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/reg.h>
|
||||
@ -880,8 +881,8 @@ vmap_ldinfo (LdInfo *ldi)
|
||||
|
||||
/* Announce new object files. Doing this after symbol relocation
|
||||
makes aix-thread.c's job easier. */
|
||||
if (deprecated_target_new_objfile_hook && vp->objfile)
|
||||
deprecated_target_new_objfile_hook (vp->objfile);
|
||||
if (vp->objfile)
|
||||
observer_notify_new_objfile (vp->objfile);
|
||||
|
||||
/* There may be more, so we don't break out of the loop. */
|
||||
}
|
||||
@ -1164,8 +1165,8 @@ xcoff_relocate_core (struct target_ops *target)
|
||||
|
||||
vmap_symtab (vp);
|
||||
|
||||
if (deprecated_target_new_objfile_hook && vp != vmap && vp->objfile)
|
||||
deprecated_target_new_objfile_hook (vp->objfile);
|
||||
if (vp != vmap && vp->objfile)
|
||||
observer_notify_new_objfile (vp->objfile);
|
||||
}
|
||||
while (LDI_NEXT (ldi, arch64) != 0);
|
||||
vmap_exec ();
|
||||
|
@ -66,6 +66,7 @@
|
||||
#include "regcache.h"
|
||||
#include "solib.h"
|
||||
#include "symfile.h"
|
||||
#include "observer.h"
|
||||
|
||||
#include "gdb_string.h"
|
||||
|
||||
@ -777,16 +778,9 @@ sol_thread_create_inferior (char *exec_file, char *allargs, char **env,
|
||||
when all symbol tables are removed. libthread_db can only be
|
||||
initialized when it finds the right variables in libthread.so.
|
||||
Since it's a shared library, those variables don't show up until
|
||||
the library gets mapped and the symbol table is read in.
|
||||
the library gets mapped and the symbol table is read in. */
|
||||
|
||||
This new_objfile event is managed by a chained function pointer.
|
||||
It is the callee's responsability to call the next client on the
|
||||
chain. */
|
||||
|
||||
/* Saved pointer to previous owner of the new_objfile event. */
|
||||
static void (*target_new_objfile_chain) (struct objfile *);
|
||||
|
||||
void
|
||||
static void
|
||||
sol_thread_new_objfile (struct objfile *objfile)
|
||||
{
|
||||
td_err_e val;
|
||||
@ -794,13 +788,13 @@ sol_thread_new_objfile (struct objfile *objfile)
|
||||
if (!objfile)
|
||||
{
|
||||
sol_thread_active = 0;
|
||||
goto quit;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Don't do anything if init failed to resolve the libthread_db
|
||||
library. */
|
||||
if (!procfs_suppress_run)
|
||||
goto quit;
|
||||
return;
|
||||
|
||||
/* Now, initialize libthread_db. This needs to be done after the
|
||||
shared libraries are located because it needs information from
|
||||
@ -810,24 +804,19 @@ sol_thread_new_objfile (struct objfile *objfile)
|
||||
if (val != TD_OK)
|
||||
{
|
||||
warning (_("sol_thread_new_objfile: td_init: %s"), td_err_string (val));
|
||||
goto quit;
|
||||
return;
|
||||
}
|
||||
|
||||
val = p_td_ta_new (&main_ph, &main_ta);
|
||||
if (val == TD_NOLIBTHREAD)
|
||||
goto quit;
|
||||
return;
|
||||
else if (val != TD_OK)
|
||||
{
|
||||
warning (_("sol_thread_new_objfile: td_ta_new: %s"), td_err_string (val));
|
||||
goto quit;
|
||||
return;
|
||||
}
|
||||
|
||||
sol_thread_active = 1;
|
||||
|
||||
quit:
|
||||
/* Call predecessor on chain, if any. */
|
||||
if (target_new_objfile_chain)
|
||||
target_new_objfile_chain (objfile);
|
||||
}
|
||||
|
||||
/* Clean up after the inferior dies. */
|
||||
@ -1667,8 +1656,7 @@ _initialize_sol_thread (void)
|
||||
add_target (&core_ops);
|
||||
|
||||
/* Hook into new_objfile notification. */
|
||||
target_new_objfile_chain = deprecated_target_new_objfile_hook;
|
||||
deprecated_target_new_objfile_hook = sol_thread_new_objfile;
|
||||
observer_attach_new_objfile (sol_thread_new_objfile);
|
||||
return;
|
||||
|
||||
die:
|
||||
|
@ -71,7 +71,6 @@ void (*deprecated_show_load_progress) (const char *section,
|
||||
unsigned long total_size);
|
||||
void (*deprecated_pre_add_symbol_hook) (const char *);
|
||||
void (*deprecated_post_add_symbol_hook) (void);
|
||||
void (*deprecated_target_new_objfile_hook) (struct objfile *);
|
||||
|
||||
static void clear_symtab_users_cleanup (void *ignore);
|
||||
|
||||
@ -1067,8 +1066,7 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd, int from_tty,
|
||||
|
||||
new_symfile_objfile (objfile, mainline, from_tty);
|
||||
|
||||
if (deprecated_target_new_objfile_hook)
|
||||
deprecated_target_new_objfile_hook (objfile);
|
||||
observer_notify_new_objfile (objfile);
|
||||
|
||||
bfd_cache_close_all ();
|
||||
return (objfile);
|
||||
@ -2643,8 +2641,7 @@ clear_symtab_users (void)
|
||||
breakpoint_re_set ();
|
||||
set_default_breakpoint (0, 0, 0, 0);
|
||||
clear_pc_function_cache ();
|
||||
if (deprecated_target_new_objfile_hook)
|
||||
deprecated_target_new_objfile_hook (NULL);
|
||||
observer_notify_new_objfile (NULL);
|
||||
|
||||
/* Clear globals which might have pointed into a removed objfile.
|
||||
FIXME: It's not clear which of these are supposed to persist
|
||||
|
25
gdb/target.h
25
gdb/target.h
@ -1007,31 +1007,6 @@ extern char *normal_pid_to_str (ptid_t ptid);
|
||||
#define target_extra_thread_info(TP) \
|
||||
(current_target.to_extra_thread_info (TP))
|
||||
|
||||
/*
|
||||
* New Objfile Event Hook:
|
||||
*
|
||||
* Sometimes a GDB component wants to get notified whenever a new
|
||||
* objfile is loaded. Mainly this is used by thread-debugging
|
||||
* implementations that need to know when symbols for the target
|
||||
* thread implemenation are available.
|
||||
*
|
||||
* The old way of doing this is to define a macro 'target_new_objfile'
|
||||
* that points to the function that you want to be called on every
|
||||
* objfile/shlib load.
|
||||
|
||||
The new way is to grab the function pointer,
|
||||
'deprecated_target_new_objfile_hook', and point it to the function
|
||||
that you want to be called on every objfile/shlib load.
|
||||
|
||||
If multiple clients are willing to be cooperative, they can each
|
||||
save a pointer to the previous value of
|
||||
deprecated_target_new_objfile_hook before modifying it, and arrange
|
||||
for their function to call the previous function in the chain. In
|
||||
that way, multiple clients can receive this notification (something
|
||||
like with signal handlers). */
|
||||
|
||||
extern void (*deprecated_target_new_objfile_hook) (struct objfile *);
|
||||
|
||||
#ifndef target_pid_or_tid_to_str
|
||||
#define target_pid_or_tid_to_str(ID) \
|
||||
target_pid_to_str (ID)
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "gdb-events.h"
|
||||
#include "ui-out.h"
|
||||
#include "top.h"
|
||||
#include "observer.h"
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
@ -59,16 +60,11 @@
|
||||
|
||||
int tui_target_has_run = 0;
|
||||
|
||||
static void (* tui_target_new_objfile_chain) (struct objfile*);
|
||||
|
||||
static void
|
||||
tui_new_objfile_hook (struct objfile* objfile)
|
||||
{
|
||||
if (tui_active)
|
||||
tui_display_main ();
|
||||
|
||||
if (tui_target_new_objfile_chain)
|
||||
tui_target_new_objfile_chain (objfile);
|
||||
}
|
||||
|
||||
static int ATTR_FORMAT (printf, 1, 0)
|
||||
@ -302,6 +298,5 @@ void
|
||||
_initialize_tui_hooks (void)
|
||||
{
|
||||
/* Install the permanent hooks. */
|
||||
tui_target_new_objfile_chain = deprecated_target_new_objfile_hook;
|
||||
deprecated_target_new_objfile_hook = tui_new_objfile_hook;
|
||||
observer_attach_new_objfile (tui_new_objfile_hook);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user