/* Do various things to symbol tables (other than lookup), for GDB.
- Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2007, 2008, 2009, 2010
- Free Software Foundation, Inc.
+ Copyright (C) 1986-2000, 2002-2004, 2007-2012 Free Software
+ Foundation, Inc.
This file is part of GDB.
#include "symtab.h"
#include "gdbtypes.h"
#include "bfd.h"
+#include "filenames.h"
#include "symfile.h"
#include "objfiles.h"
#include "breakpoint.h"
static int print_symbol (void *);
\f
-/* Free all the storage associated with the struct symtab <- S.
- Note that some symtabs have contents that all live inside one big block of
- memory, and some share the contents of another symbol table and so you
- should not free the contents on their behalf (except sometimes the
- linetable, which maybe per symtab even when the rest is not).
- It is s->free_code that says which alternative to use. */
-
-void
-free_symtab (struct symtab *s)
-{
- int i, n;
- struct blockvector *bv;
-
- switch (s->free_code)
- {
- case free_nothing:
- /* 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;
-
- case free_linetable:
- /* Everything will be freed either by our `free_func'
- or by some other symtab, except for our linetable.
- Free that now. */
- if (LINETABLE (s))
- xfree (LINETABLE (s));
- break;
- }
-
- /* If there is a single block of memory to free, free it. */
- if (s->free_func != NULL)
- s->free_func (s);
-
- /* Free source-related stuff */
- if (s->line_charpos != NULL)
- xfree (s->line_charpos);
- if (s->fullname != NULL)
- xfree (s->fullname);
- if (s->debugformat != NULL)
- xfree (s->debugformat);
- xfree (s);
-}
void
print_symbol_bcache_statistics (void)
ALL_PSPACE_OBJFILES (pspace, objfile)
{
printf_filtered (_("Byte cache statistics for '%s':\n"), objfile->name);
- print_bcache_statistics (objfile->psymbol_cache, "partial symbol cache");
+ print_bcache_statistics (psymbol_bcache_get_bcache (objfile->psymbol_cache),
+ "partial symbol cache");
print_bcache_statistics (objfile->macro_cache, "preprocessor macro cache");
print_bcache_statistics (objfile->filename_cache, "file name cache");
}
printf_filtered (_(" Total memory used for objfile obstack: %d\n"),
obstack_memory_used (&objfile->objfile_obstack));
printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
- bcache_memory_used (objfile->psymbol_cache));
+ bcache_memory_used (psymbol_bcache_get_bcache
+ (objfile->psymbol_cache)));
printf_filtered (_(" Total memory used for macro cache: %d\n"),
bcache_memory_used (objfile->macro_cache));
printf_filtered (_(" Total memory used for file name cache: %d\n"),
case mst_text:
ms_type = 'T';
break;
+ case mst_text_gnu_ifunc:
+ ms_type = 'i';
+ break;
case mst_solib_trampoline:
ms_type = 'S';
break;
struct gdbarch *gdbarch = get_objfile_arch (objfile);
int i;
struct dict_iterator iter;
- int len, blen;
+ int len;
struct linetable *l;
struct blockvector *bv;
struct symbol *sym;
fprintf_filtered (outfile, "Read from object file %s (", objfile->name);
gdb_print_host_address (objfile, outfile);
fprintf_filtered (outfile, ")\n");
- fprintf_filtered (outfile, "Language: %s\n", language_str (symtab->language));
+ fprintf_filtered (outfile, "Language: %s\n",
+ language_str (symtab->language));
/* First print the line table. */
l = LINETABLE (symtab);
}
}
/* Now print the block info, but only for primary symtabs since we will
- print lots of duplicate info otherwise. */
+ print lots of duplicate info otherwise. */
if (symtab->primary)
{
fprintf_filtered (outfile, "\nBlockvector:\n\n");
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
struct print_symbol_args s;
+
s.gdbarch = gdbarch;
s.symbol = sym;
s.depth = depth + 1;
if (args == NULL)
{
- error (_("\
-Arguments missing: an output file name and an optional symbol file name"));
+ error (_("Arguments missing: an output file name "
+ "and an optional symbol file name"));
}
argv = gdb_buildargv (args);
cleanups = make_cleanup_freeargv (argv);
if (argv[0] != NULL)
{
filename = argv[0];
- /* If a second arg is supplied, it is a source file name to match on */
+ /* If a second arg is supplied, it is a source file name to match on. */
if (argv[1] != NULL)
{
symname = argv[1];
immediate_quit++;
ALL_SYMTABS (objfile, s)
- if (symname == NULL || strcmp (symname, s->filename) == 0)
+ if (symname == NULL || filename_cmp (symname, s->filename) == 0)
dump_symtab (objfile, s, outfile);
immediate_quit--;
do_cleanups (cleanups);
{
unsigned i;
struct type *type = check_typedef (SYMBOL_TYPE (symbol));
+
fprintf_filtered (outfile, "const %u hex bytes:",
TYPE_LENGTH (type));
for (i = 0; i < TYPE_LENGTH (type); i++)
if (args == NULL)
{
- error (_("print-msymbols takes an output file name and optional symbol file name"));
+ error (_("print-msymbols takes an output file "
+ "name and optional symbol file name"));
}
argv = gdb_buildargv (args);
cleanups = make_cleanup_freeargv (argv);
if (argv[0] != NULL)
{
filename = argv[0];
- /* If a second arg is supplied, it is a source file name to match on */
+ /* If a second arg is supplied, it is a source file name to match on. */
if (argv[1] != NULL)
{
symname = xfullpath (argv[1]);
immediate_quit++;
ALL_PSPACES (pspace)
ALL_PSPACE_OBJFILES (pspace, objfile)
- if (symname == NULL
- || (!stat (objfile->name, &obj_st) && sym_st.st_ino == obj_st.st_ino))
+ if (symname == NULL || (!stat (objfile->name, &obj_st)
+ && sym_st.st_ino == obj_st.st_ino))
dump_msymbols (objfile, outfile);
immediate_quit--;
fprintf_filtered (outfile, "\n\n");
symtab->dirname ? symtab->dirname : "(null)");
printf_filtered (" fullname %s\n",
symtab->fullname ? symtab->fullname : "(null)");
- printf_filtered (" blockvector ((struct blockvector *) %s)%s\n",
+ printf_filtered (" "
+ "blockvector ((struct blockvector *) %s)%s\n",
host_address_to_string (symtab->blockvector),
symtab->primary ? " (primary)" : "");
- printf_filtered (" linetable ((struct linetable *) %s)\n",
+ printf_filtered (" "
+ "linetable ((struct linetable *) %s)\n",
host_address_to_string (symtab->linetable));
- printf_filtered (" debugformat %s\n", symtab->debugformat);
+ printf_filtered (" debugformat %s\n",
+ symtab->debugformat);
printf_filtered (" }\n");
}
}
block_depth (struct block *block)
{
int i = 0;
+
while ((block = BLOCK_SUPERBLOCK (block)) != NULL)
{
i++;
}
\f
-/* Do early runtime initializations. */
+/* Do early runtime initializations. */
void
_initialize_symmisc (void)
{