From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14825 invoked by alias); 1 Nov 2004 19:47:08 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 14790 invoked from network); 1 Nov 2004 19:47:04 -0000 Received: from unknown (HELO takamaka.act-europe.fr) (142.179.108.108) by sourceware.org with SMTP; 1 Nov 2004 19:47:04 -0000 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id 5202047D9F; Mon, 1 Nov 2004 11:47:03 -0800 (PST) Date: Mon, 01 Nov 2004 19:47:00 -0000 From: Joel Brobecker To: gdb-patches@sources.redhat.com Subject: Re: [RFA] Improve "start" command for Ada Message-ID: <20041101194703.GH27334@gnat.com> References: <20041021034759.GP21300@gnat.com> <01c4b72e$Blat.v2.2.2$b14feb80@zahav.net.il> <20041021210951.GZ21300@gnat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20041021210951.GZ21300@gnat.com> User-Agent: Mutt/1.4i X-SW-Source: 2004-11/txt/msg00019.txt.bz2 Ping? (doco already approved by Eli) On Thu, Oct 21, 2004 at 02:09:51PM -0700, Joel Brobecker wrote: > 2004-10-20 Joel Brobecker > > * doc/observer.texi (executable_changed): New observer. > * symtab.c: Include "observer.h". > (find_main_name): New function. > (main_name): If name_of_main is unset, then compute it > using find_main_name. > (symtab_observer_executable_changed): New function. > (_initialize_symtab): Attach executable_changed observer. > * exec.c: Include "observer.h". > (exec_file_attach): Emit executable_changed notification. > * symfile.c: Include "observer.h". > (reread_symbols): Send an executable_changed if appropriate. > * Makefile.in (exec.o): Add dependency on observer.h. > (symfile.o): Likewise. > (symtab.o): Likewise. > > Tested on x86-linux. Still fixes 1 FAIL in gdb.ada/null_record.exp. > > -- > Joel > Index: exec.c > =================================================================== > RCS file: /cvs/src/src/gdb/exec.c,v > retrieving revision 1.43 > diff -u -p -r1.43 exec.c > --- exec.c 8 Oct 2004 20:29:46 -0000 1.43 > +++ exec.c 21 Oct 2004 20:57:08 -0000 > @@ -32,6 +32,7 @@ > #include "completer.h" > #include "value.h" > #include "exec.h" > +#include "observer.h" > > #include > #include "readline/readline.h" > @@ -268,6 +269,7 @@ exec_file_attach (char *filename, int fr > (*deprecated_exec_file_display_hook) (filename); > } > bfd_cache_close_all (); > + observer_notify_executable_changed (NULL); > } > > /* Process the first arg in ARGS as the new exec file. > Index: symfile.c > =================================================================== > RCS file: /cvs/src/src/gdb/symfile.c,v > retrieving revision 1.143 > diff -u -p -r1.143 symfile.c > --- symfile.c 1 Oct 2004 10:23:09 -0000 1.143 > +++ symfile.c 21 Oct 2004 20:59:03 -0000 > @@ -48,6 +48,7 @@ > #include "readline/readline.h" > #include "gdb_assert.h" > #include "block.h" > +#include "observer.h" > > #include > #include > @@ -1990,7 +1991,13 @@ reread_symbols (void) > } > > if (reread_one) > - clear_symtab_users (); > + { > + clear_symtab_users (); > + /* At least one objfile has changed, so we can consider that > + the executable we're debugging has changed too. */ > + observer_notify_executable_changed (NULL); > + } > + > } > > > Index: symtab.c > =================================================================== > RCS file: /cvs/src/src/gdb/symtab.c,v > retrieving revision 1.140 > diff -u -p -r1.140 symtab.c > --- symtab.c 2 Oct 2004 09:55:15 -0000 1.140 > +++ symtab.c 21 Oct 2004 20:59:05 -0000 > @@ -55,6 +55,7 @@ > #include "gdb_stat.h" > #include > #include "cp-abi.h" > +#include "observer.h" > > /* Prototypes for local functions */ > > @@ -4090,15 +4091,44 @@ set_main_name (const char *name) > } > } > > +/* Deduce the name of the main procedure, and set NAME_OF_MAIN > + accordingly. */ > + > +static void > +find_main_name (void) > +{ > + char *new_main_name; > + > + /* Try to see if the main procedure is in Ada. */ > + new_main_name = ada_main_name (); > + if (new_main_name != NULL) > + { > + set_main_name (new_main_name); > + return; > + } > + > + /* The languages above didn't identify the name of the main procedure. > + Fallback to "main". */ > + set_main_name ("main"); > +} > + > char * > main_name (void) > { > - if (name_of_main != NULL) > - return name_of_main; > - else > - return "main"; > + if (name_of_main == NULL) > + find_main_name (); > + > + return name_of_main; > } > > +/* Handle ``executable_changed'' events for the symtab module. */ > + > +static void > +symtab_observer_executable_changed (void *unused) > +{ > + /* NAME_OF_MAIN may no longer be the same, so reset it for now. */ > + set_main_name (NULL); > +} > > void > _initialize_symtab (void) > @@ -4140,4 +4170,6 @@ _initialize_symtab (void) > /* Initialize the one built-in type that isn't language dependent... */ > builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0, > "", (struct objfile *) NULL); > + > + observer_attach_executable_changed (symtab_observer_executable_changed); > } > Index: doc/observer.texi > =================================================================== > RCS file: /cvs/src/src/gdb/doc/observer.texi,v > retrieving revision 1.8 > diff -u -p -r1.8 observer.texi > --- doc/observer.texi 1 Sep 2004 17:59:37 -0000 1.8 > +++ doc/observer.texi 21 Oct 2004 20:59:52 -0000 > @@ -83,6 +83,13 @@ The inferior has stopped for real. > The target's register contents have changed. > @end deftypefun > > +@deftypefun void executable_changed (void *@var{unused_args}) > +The executable being debugged by GDB has changed: The user decided > +to debug a different program, or the program he was debugging has > +been modified since being loaded by the debugger (by being recompiled, > +for instance). > +@end deftypefun > + > @deftypefun void inferior_created (struct target_ops *@var{objfile}, int @var{from_tty}) > @value{GDBN} has just connected to an inferior. For @samp{run}, > @value{GDBN} calls this observer while the inferior is still stopped > Index: Makefile.in > =================================================================== > RCS file: /cvs/src/src/gdb/Makefile.in,v > retrieving revision 1.643 > diff -u -p -r1.643 Makefile.in > --- Makefile.in 15 Oct 2004 16:17:34 -0000 1.643 > +++ Makefile.in 21 Oct 2004 21:08:16 -0000 > @@ -1887,7 +1887,7 @@ event-top.o: event-top.c $(defs_h) $(top > exec.o: exec.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) $(gdbcmd_h) \ > $(language_h) $(symfile_h) $(objfiles_h) $(completer_h) $(value_h) \ > $(exec_h) $(readline_h) $(gdb_string_h) $(gdbcore_h) $(gdb_stat_h) \ > - $(xcoffsolib_h) > + $(xcoffsolib_h) $(observer_h) > expprint.o: expprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ > $(value_h) $(language_h) $(parser_defs_h) $(user_regs_h) $(target_h) \ > $(gdb_string_h) $(block_h) > @@ -2598,7 +2598,7 @@ symfile.o: symfile.c $(defs_h) $(bfdlink > $(complaints_h) $(demangle_h) $(inferior_h) $(filenames_h) \ > $(gdb_stabs_h) $(gdb_obstack_h) $(completer_h) $(bcache_h) \ > $(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \ > - $(gdb_string_h) $(gdb_stat_h) > + $(gdb_string_h) $(gdb_stat_h) $(observer_h) > symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \ > $(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h) > symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \ > @@ -2611,7 +2611,7 @@ symtab.o: symtab.c $(defs_h) $(symtab_h) > $(language_h) $(demangle_h) $(inferior_h) $(linespec_h) $(source_h) \ > $(filenames_h) $(objc_lang_h) $(ada_lang_h) $(hashtab_h) \ > $(gdb_obstack_h) $(block_h) $(dictionary_h) $(gdb_string_h) \ > - $(gdb_stat_h) $(cp_abi_h) > + $(gdb_stat_h) $(cp_abi_h) $(observer_h) > target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \ > $(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ > $(gdb_wait_h) $(dcache_h) $(regcache_h) $(gdb_assert_h) $(gdbcore_h) -- Joel