* breakpoint.h (ALL_BREAKPOINTS_SAFE): Add.
* breakpoint.c (breakpoint_re_set): Use ALL_BREAKPOINTS_SAFE. * symtab.c (find_pc_symtab): Handle having no objfiles. * infcmd.c: Fix comment. * objfiles.c (free_all_objfiles): Add. * symfile.h (ALL_OBJFILES, ALL_OBJFILES_SAFE): Add. * symfile.c (symbol_file_command): free all objfiles when specifying a new symbol file. (reread_symbols): Stat the file name, don't fstat the descriptor.
This commit is contained in:
parent
5c83e859b9
commit
cba0d141fb
|
@ -1,3 +1,21 @@
|
|||
Thu Feb 27 06:11:05 1992 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* breakpoint.h (ALL_BREAKPOINTS_SAFE): Add.
|
||||
* breakpoint.c (breakpoint_re_set): Use ALL_BREAKPOINTS_SAFE.
|
||||
* symtab.c (find_pc_symtab): Handle having no objfiles.
|
||||
* infcmd.c: Fix comment.
|
||||
* objfiles.c (free_all_objfiles): Add.
|
||||
* symfile.h (ALL_OBJFILES, ALL_OBJFILES_SAFE): Add.
|
||||
* symfile.c (symbol_file_command): free all objfiles when
|
||||
specifying a new symbol file.
|
||||
(reread_symbols): Stat the file name, don't fstat the descriptor.
|
||||
|
||||
Tue Feb 25 19:31:19 1992 Stu Grossman (grossman at cygnus.com)
|
||||
|
||||
* dbxread.c (end_psymtab): Delete empty psymtabs.
|
||||
* symfile.c (allocate_psymtab): Recycle empty psymtabs.
|
||||
* symfile.h (struct objfile): Add free_psymtabs.
|
||||
|
||||
Sat Feb 22 02:00:32 1992 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* Makefile.in (VERSION): Roll to gdb-4.4.4.
|
||||
|
|
|
@ -113,7 +113,7 @@ static void
|
|||
breakpoints_info PARAMS ((char *, int));
|
||||
|
||||
static void
|
||||
breakpoint_1 PARAMS ((int, int));
|
||||
breakpoint_1 PARAMS ((int, enum bptype));
|
||||
|
||||
static bpstat
|
||||
bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
|
||||
|
@ -143,8 +143,17 @@ extern int demangle; /* Print de-mangled symbol names? */
|
|||
/* Are we executing breakpoint commands? */
|
||||
static int executing_breakpoint_commands;
|
||||
|
||||
/* Walk the following statement or block through all breakpoints.
|
||||
ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
|
||||
breakpoint. */
|
||||
|
||||
#define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
|
||||
|
||||
#define ALL_BREAKPOINTS_SAFE(b,tmp) \
|
||||
for (b = breakpoint_chain; \
|
||||
b? (tmp=b->next, 1): 0; \
|
||||
b = tmp)
|
||||
|
||||
/* Chain of all breakpoints defined. */
|
||||
|
||||
struct breakpoint *breakpoint_chain;
|
||||
|
@ -810,7 +819,7 @@ bpstat_stop_status (pc, frame_address)
|
|||
int real_breakpoint = 0;
|
||||
#endif
|
||||
/* Root of the chain of bpstat's */
|
||||
struct bpstat__struct root_bs[1];
|
||||
struct bpstat root_bs[1];
|
||||
/* Pointer to the last thing in the chain currently. */
|
||||
bpstat bs = root_bs;
|
||||
|
||||
|
@ -2229,11 +2238,11 @@ breakpoint_re_set_one (bint)
|
|||
void
|
||||
breakpoint_re_set ()
|
||||
{
|
||||
struct breakpoint *b;
|
||||
struct breakpoint *b, *temp;
|
||||
static char message1[] = "Error in re-setting breakpoint %d:\n";
|
||||
char message[sizeof (message1) + 30 /* slop */];
|
||||
|
||||
ALL_BREAKPOINTS (b)
|
||||
ALL_BREAKPOINTS_SAFE (b, temp)
|
||||
{
|
||||
b->symtab = 0; /* Be sure we don't point to old dead symtab */
|
||||
sprintf (message, message1, b->number); /* Format possible error msg */
|
||||
|
|
|
@ -163,6 +163,20 @@ free_objfile (objfile)
|
|||
(*objfile -> free) (objfile);
|
||||
}
|
||||
|
||||
|
||||
/* Free all the object files at once. */
|
||||
|
||||
void
|
||||
free_all_objfiles ()
|
||||
{
|
||||
struct objfile *objfile, *temp;
|
||||
|
||||
ALL_OBJFILES_SAFE (objfile, temp)
|
||||
{
|
||||
free_objfile (objfile);
|
||||
}
|
||||
}
|
||||
|
||||
/* Many places in gdb want to test just to see if we have any partial
|
||||
symbols available. This function returns zero if none are currently
|
||||
available, nonzero otherwise. */
|
||||
|
|
|
@ -554,15 +554,12 @@ symbol_file_command (args, from_tty)
|
|||
|
||||
if (args == NULL)
|
||||
{
|
||||
if (symfile_objfile)
|
||||
{
|
||||
if ((have_full_symbols () || have_partial_symbols ())
|
||||
&& from_tty
|
||||
&& !query ("Discard symbol table from `%s'? ",
|
||||
symfile_objfile -> name))
|
||||
error ("Not confirmed.");
|
||||
free_objfile (symfile_objfile);
|
||||
}
|
||||
if ((have_full_symbols () || have_partial_symbols ())
|
||||
&& from_tty
|
||||
&& !query ("Discard symbol table from `%s'? ",
|
||||
symfile_objfile -> name))
|
||||
error ("Not confirmed.");
|
||||
free_all_objfiles ();
|
||||
symfile_objfile = NULL;
|
||||
/* FIXME, this does not account for the main file and subsequent
|
||||
files (shared libs, dynloads, etc) having different formats.
|
||||
|
@ -769,6 +766,8 @@ reread_symbols ()
|
|||
struct objfile *objfile;
|
||||
long new_modtime;
|
||||
int reread_one = 0;
|
||||
struct stat new_statbuf;
|
||||
int res;
|
||||
|
||||
/* With the addition of shared libraries, this should be modified,
|
||||
the load time should be saved in the partial symbol tables, since
|
||||
|
@ -779,7 +778,14 @@ reread_symbols ()
|
|||
the_big_top:
|
||||
for (objfile = object_files; objfile; objfile = objfile->next) {
|
||||
if (objfile->obfd) {
|
||||
new_modtime = bfd_get_mtime (objfile->obfd);
|
||||
res = stat (objfile->name, &new_statbuf);
|
||||
if (res != 0) {
|
||||
/* FIXME, should use print_sys_errmsg but it's not filtered. */
|
||||
printf_filtered ("`%s' has disappeared; keeping its symbols.\n",
|
||||
objfile->name);
|
||||
continue;
|
||||
}
|
||||
new_modtime = new_statbuf.st_mtime;
|
||||
if (new_modtime != objfile->mtime) {
|
||||
printf_filtered ("`%s' has changed; re-reading symbols.\n",
|
||||
objfile->name);
|
||||
|
@ -799,7 +805,6 @@ the_big_top:
|
|||
if (reread_one)
|
||||
breakpoint_re_set ();
|
||||
}
|
||||
|
||||
|
||||
/* Functions to handle complaints during symbol reading. */
|
||||
|
||||
|
@ -957,9 +962,16 @@ allocate_psymtab (filename, objfile)
|
|||
{
|
||||
struct partial_symtab *psymtab;
|
||||
|
||||
psymtab = (struct partial_symtab *)
|
||||
obstack_alloc (&objfile -> psymbol_obstack,
|
||||
sizeof (struct partial_symtab));
|
||||
if (objfile -> free_psymtabs)
|
||||
{
|
||||
psymtab = objfile -> free_psymtabs;
|
||||
objfile -> free_psymtabs = psymtab -> next;
|
||||
}
|
||||
else
|
||||
psymtab = (struct partial_symtab *)
|
||||
obstack_alloc (&objfile -> psymbol_obstack,
|
||||
sizeof (struct partial_symtab));
|
||||
|
||||
(void) memset (psymtab, 0, sizeof (struct partial_symtab));
|
||||
psymtab -> filename = obsavestring (filename, strlen (filename),
|
||||
&objfile -> psymbol_obstack);
|
||||
|
|
1610
gdb/symtab.c
1610
gdb/symtab.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue