diff options
author | John Gilmore <gnu@cygnus> | 1991-04-19 01:10:52 +0000 |
---|---|---|
committer | John Gilmore <gnu@cygnus> | 1991-04-19 01:10:52 +0000 |
commit | 029981e273adac51b865e6dc49cc332f5df6aa2b (patch) | |
tree | 741c06df54688a2bc823caa6a5ac56d5c0b4a54c /gdb/symmisc.c | |
parent | 9d199712301d957dab5e5b98f7e555ef774d49bf (diff) | |
download | gdb-029981e273adac51b865e6dc49cc332f5df6aa2b.zip gdb-029981e273adac51b865e6dc49cc332f5df6aa2b.tar.gz gdb-029981e273adac51b865e6dc49cc332f5df6aa2b.tar.bz2 |
* symfile.c (clear_symtab_users_once, cashier_psymtab,
free_named_symtabs): Move these routines from symmisc.c.
* symmisc.c (same): same.
Diffstat (limited to 'gdb/symmisc.c')
-rw-r--r-- | gdb/symmisc.c | 86 |
1 files changed, 2 insertions, 84 deletions
diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 2aead6e..52f9fd7 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -26,9 +26,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <stdio.h> #include <obstack.h> - -static void free_symtab (); - /* Free all the symtabs that are currently installed, and all storage associated with them. @@ -91,7 +88,7 @@ free_symtab_block (b) which maybe per symtab even when the rest is not). It is s->free_code that says which alternative to use. */ -static void +void free_symtab (s) register struct symtab *s; { @@ -102,7 +99,7 @@ free_symtab (s) switch (s->free_code) { case free_nothing: - /* All the contents are part of a big block of memory + /* All the contents are part of a big block of memory (an obstack), and some other symtab is in charge of freeing that block. Therefore, do nothing. */ break; @@ -141,85 +138,6 @@ free_symtab (s) free (s->fullname); free (s); } - -/* If a symtab for filename NAME is found, free it along - with any dependent breakpoints, displays, etc. - Used when loading new versions of object modules with the "add-file" - command. - - FIXME. I think this is not the right way to do this. It needs further - investigation, though. -- gnu@cygnus */ - -void -free_named_symtab (name) - char *name; -{ - register struct symtab *s; - register struct symtab *prev; - struct blockvector *bv; - -#if 0 /* FIXME */ - /* Look for a symtab with the specified name. - We can't use lookup_symtab () for this, since it - might generate a recursive call to psymtab_to_symtab (). */ - - for (s = symtab_list; s; s = s->next) - { - if (!strcmp (name, s->filename)) - break; - prev = s; - } - - if (s) - { - if (s == symtab_list) - symtab_list = s->next; - else - prev->next = s->next; - - /* For now, delete all breakpoints, displays, etc., whether or - not they depend on the symtab being freed. This should be - changed so that only those data structures affected are deleted. */ - - /* But don't delete anything if the symtab is empty. - This test is necessary due to a bug in "dbxread.c" that - causes empty symtabs to be created for N_SO symbols that - contain the pathname of the object file. (This problem - has been fixed in GDB 3.9x). */ - - bv = BLOCKLIST (s); - if (BLOCKLIST_NBLOCKS (bv) > 2 - || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, 0)) - || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, 1))) - { - /* Took the following line out because GDB ends up printing it - many times when a given module is loaded, because each module - contains many symtabs. */ - /* - printf ("Clearing breakpoints and resetting debugger state.\n"); - */ - - clear_value_history (); - clear_displays (); - clear_internalvars (); - clear_breakpoints (); - set_default_breakpoint (0, 0, 0, 0); - current_source_symtab = 0; - } - - free_symtab (s); - } - else - /* It is still possible that some breakpoints will be affected - even though no symtab was found, since the file might have - been compiled without debugging, and hence not be associated - with a symtab. In order to handle this correctly, we would need - to keep a list of text address ranges for undebuggable files. - For now, we do nothing, since this is a fairly obscure case. */ - ; -#endif /* FIXME */ -} - static int block_depth (); static void print_symbol (); |