aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJohn Gilmore <gnu@cygnus>1991-04-19 01:10:52 +0000
committerJohn Gilmore <gnu@cygnus>1991-04-19 01:10:52 +0000
commit029981e273adac51b865e6dc49cc332f5df6aa2b (patch)
tree741c06df54688a2bc823caa6a5ac56d5c0b4a54c /gdb
parent9d199712301d957dab5e5b98f7e555ef774d49bf (diff)
downloadgdb-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')
-rw-r--r--gdb/symmisc.c86
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 ();