mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-28 18:10:46 +00:00
all remaining *.c *.h files from hp merge.
This commit is contained in:
221
gdb/symmisc.c
221
gdb/symmisc.c
@@ -1,5 +1,5 @@
|
||||
/* Do various things to symbol tables (other than lookup), for GDB.
|
||||
Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996
|
||||
Copyright 1986, 87, 89, 91, 92, 93, 94, 95, 96, 1998
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
@@ -48,23 +48,26 @@ FILE *std_err;
|
||||
|
||||
/* Prototypes for local functions */
|
||||
|
||||
static void
|
||||
dump_symtab PARAMS ((struct objfile *, struct symtab *, GDB_FILE *));
|
||||
static void dump_symtab PARAMS ((struct objfile *, struct symtab *,
|
||||
GDB_FILE *));
|
||||
|
||||
static void
|
||||
dump_psymtab PARAMS ((struct objfile *, struct partial_symtab *, GDB_FILE *));
|
||||
static void dump_psymtab PARAMS ((struct objfile *, struct partial_symtab *,
|
||||
GDB_FILE *));
|
||||
|
||||
static void
|
||||
dump_msymbols PARAMS ((struct objfile *, GDB_FILE *));
|
||||
static void dump_msymbols PARAMS ((struct objfile *, GDB_FILE *));
|
||||
|
||||
static void
|
||||
dump_objfile PARAMS ((struct objfile *));
|
||||
static void dump_objfile PARAMS ((struct objfile *));
|
||||
|
||||
static int
|
||||
block_depth PARAMS ((struct block *));
|
||||
static int block_depth PARAMS ((struct block *));
|
||||
|
||||
static void
|
||||
print_partial_symbols PARAMS ((struct partial_symbol **, int, char *, GDB_FILE *));
|
||||
static void print_partial_symbols PARAMS ((struct partial_symbol **, int,
|
||||
char *, GDB_FILE *));
|
||||
|
||||
static int print_symbol PARAMS ((char *));
|
||||
|
||||
static void free_symtab_block PARAMS ((struct objfile *, struct block *));
|
||||
|
||||
void _initialize_symmisc PARAMS ((void));
|
||||
|
||||
struct print_symbol_args {
|
||||
struct symbol *symbol;
|
||||
@@ -148,6 +151,8 @@ free_symtab (s)
|
||||
mfree (s -> objfile -> md, (PTR) s -> line_charpos);
|
||||
if (s -> fullname != NULL)
|
||||
mfree (s -> objfile -> md, s -> fullname);
|
||||
if (s -> debugformat != NULL)
|
||||
mfree (s -> objfile -> md, s -> debugformat);
|
||||
mfree (s -> objfile -> md, (PTR) s);
|
||||
}
|
||||
|
||||
@@ -180,22 +185,24 @@ print_objfile_statistics ()
|
||||
printf_filtered (" Number of \"stab\" symbols read: %d\n",
|
||||
OBJSTAT (objfile, n_stabs));
|
||||
if (OBJSTAT (objfile, n_minsyms) > 0)
|
||||
printf_filtered (" Number of \"minimal symbols read: %d\n",
|
||||
printf_filtered (" Number of \"minimal\" symbols read: %d\n",
|
||||
OBJSTAT (objfile, n_minsyms));
|
||||
if (OBJSTAT (objfile, n_psyms) > 0)
|
||||
printf_filtered (" Number of \"partial symbols read: %d\n",
|
||||
printf_filtered (" Number of \"partial\" symbols read: %d\n",
|
||||
OBJSTAT (objfile, n_psyms));
|
||||
if (OBJSTAT (objfile, n_syms) > 0)
|
||||
printf_filtered (" Number of \"full symbols read: %d\n",
|
||||
printf_filtered (" Number of \"full\" symbols read: %d\n",
|
||||
OBJSTAT (objfile, n_syms));
|
||||
if (OBJSTAT (objfile, n_types) > 0)
|
||||
printf_filtered (" Number of \"types defined: %d\n",
|
||||
printf_filtered (" Number of \"types\" defined: %d\n",
|
||||
OBJSTAT (objfile, n_types));
|
||||
if (OBJSTAT (objfile, sz_strtab) > 0)
|
||||
printf_filtered (" Space used by a.out string tables: %d\n",
|
||||
OBJSTAT (objfile, sz_strtab));
|
||||
printf_filtered (" Total memory used for psymbol obstack: %d\n",
|
||||
obstack_memory_used (&objfile -> psymbol_obstack));
|
||||
printf_filtered (" Total memory used for psymbol cache: %d\n",
|
||||
obstack_memory_used (&objfile -> psymbol_cache.cache));
|
||||
printf_filtered (" Total memory used for symbol obstack: %d\n",
|
||||
obstack_memory_used (&objfile -> symbol_obstack));
|
||||
printf_filtered (" Total memory used for type obstack: %d\n",
|
||||
@@ -312,8 +319,13 @@ dump_msymbols (objfile, outfile)
|
||||
ms_type = '?';
|
||||
break;
|
||||
}
|
||||
fprintf_filtered (outfile, "[%2d] %c %#10lx %s", index, ms_type,
|
||||
SYMBOL_VALUE_ADDRESS (msymbol), SYMBOL_NAME (msymbol));
|
||||
fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
|
||||
print_address_numeric (SYMBOL_VALUE_ADDRESS (msymbol), 1, outfile);
|
||||
fprintf_filtered (outfile, " %s", SYMBOL_NAME (msymbol));
|
||||
if (SYMBOL_BFD_SECTION (msymbol))
|
||||
fprintf_filtered (outfile, " section %s",
|
||||
bfd_section_name (objfile->obfd,
|
||||
SYMBOL_BFD_SECTION (msymbol)));
|
||||
if (SYMBOL_DEMANGLED_NAME (msymbol) != NULL)
|
||||
{
|
||||
fprintf_filtered (outfile, " %s", SYMBOL_DEMANGLED_NAME (msymbol));
|
||||
@@ -415,10 +427,13 @@ dump_symtab (objfile, symtab, outfile)
|
||||
int depth;
|
||||
|
||||
fprintf_filtered (outfile, "\nSymtab for file %s\n", symtab->filename);
|
||||
if (symtab->dirname)
|
||||
fprintf_filtered (outfile, "Compilation directory is %s\n",
|
||||
symtab->dirname);
|
||||
fprintf_filtered (outfile, "Read from object file %s (", objfile->name);
|
||||
gdb_print_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);
|
||||
@@ -433,53 +448,59 @@ dump_symtab (objfile, symtab, outfile)
|
||||
fprintf_filtered (outfile, "\n");
|
||||
}
|
||||
}
|
||||
/* Now print the block info. */
|
||||
fprintf_filtered (outfile, "\nBlockvector:\n\n");
|
||||
bv = BLOCKVECTOR (symtab);
|
||||
len = BLOCKVECTOR_NBLOCKS (bv);
|
||||
for (i = 0; i < len; i++)
|
||||
/* Now print the block info, but only for primary symtabs since we will
|
||||
print lots of duplicate info otherwise. */
|
||||
if (symtab -> primary)
|
||||
{
|
||||
b = BLOCKVECTOR_BLOCK (bv, i);
|
||||
depth = block_depth (b) * 2;
|
||||
print_spaces (depth, outfile);
|
||||
fprintf_filtered (outfile, "block #%03d (object ", i);
|
||||
gdb_print_address (b, outfile);
|
||||
fprintf_filtered (outfile, ") ");
|
||||
fprintf_filtered (outfile, "[");
|
||||
print_address_numeric (BLOCK_START (b), 1, outfile);
|
||||
fprintf_filtered (outfile, "..");
|
||||
print_address_numeric (BLOCK_END (b), 1, outfile);
|
||||
fprintf_filtered (outfile, "]");
|
||||
if (BLOCK_SUPERBLOCK (b))
|
||||
fprintf_filtered (outfile, "\nBlockvector:\n\n");
|
||||
bv = BLOCKVECTOR (symtab);
|
||||
len = BLOCKVECTOR_NBLOCKS (bv);
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
fprintf_filtered (outfile, " (under ");
|
||||
gdb_print_address (BLOCK_SUPERBLOCK (b), outfile);
|
||||
fprintf_filtered (outfile, ")");
|
||||
}
|
||||
if (BLOCK_FUNCTION (b))
|
||||
{
|
||||
fprintf_filtered (outfile, " %s", SYMBOL_NAME (BLOCK_FUNCTION (b)));
|
||||
if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
|
||||
b = BLOCKVECTOR_BLOCK (bv, i);
|
||||
depth = block_depth (b) * 2;
|
||||
print_spaces (depth, outfile);
|
||||
fprintf_filtered (outfile, "block #%03d, object at ", i);
|
||||
gdb_print_address (b, outfile);
|
||||
if (BLOCK_SUPERBLOCK (b))
|
||||
{
|
||||
fprintf_filtered (outfile, " %s",
|
||||
SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)));
|
||||
fprintf_filtered (outfile, " under ");
|
||||
gdb_print_address (BLOCK_SUPERBLOCK (b), outfile);
|
||||
}
|
||||
blen = BLOCK_NSYMS (b);
|
||||
fprintf_filtered (outfile, ", %d syms in ", blen);
|
||||
print_address_numeric (BLOCK_START (b), 1, outfile);
|
||||
fprintf_filtered (outfile, "..");
|
||||
print_address_numeric (BLOCK_END (b), 1, outfile);
|
||||
if (BLOCK_FUNCTION (b))
|
||||
{
|
||||
fprintf_filtered (outfile, ", function %s", SYMBOL_NAME (BLOCK_FUNCTION (b)));
|
||||
if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
|
||||
{
|
||||
fprintf_filtered (outfile, ", %s",
|
||||
SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)));
|
||||
}
|
||||
}
|
||||
if (BLOCK_GCC_COMPILED(b))
|
||||
fprintf_filtered (outfile, ", compiled with gcc%d", BLOCK_GCC_COMPILED(b));
|
||||
fprintf_filtered (outfile, "\n");
|
||||
/* Now print each symbol in this block */
|
||||
for (j = 0; j < blen; j++)
|
||||
{
|
||||
struct print_symbol_args s;
|
||||
s.symbol = BLOCK_SYM (b, j);
|
||||
s.depth = depth + 1;
|
||||
s.outfile = outfile;
|
||||
catch_errors (print_symbol, &s, "Error printing symbol:\n",
|
||||
RETURN_MASK_ALL);
|
||||
}
|
||||
}
|
||||
if (BLOCK_GCC_COMPILED(b))
|
||||
fprintf_filtered (outfile, " gcc%d compiled", BLOCK_GCC_COMPILED(b));
|
||||
fprintf_filtered (outfile, "\n");
|
||||
blen = BLOCK_NSYMS (b);
|
||||
for (j = 0; j < blen; j++)
|
||||
{
|
||||
struct print_symbol_args s;
|
||||
s.symbol = BLOCK_SYM (b, j);
|
||||
s.depth = depth + 1;
|
||||
s.outfile = outfile;
|
||||
catch_errors (print_symbol, &s, "Error printing symbol:\n",
|
||||
RETURN_MASK_ALL);
|
||||
}
|
||||
}
|
||||
fprintf_filtered (outfile, "\n");
|
||||
else
|
||||
{
|
||||
fprintf_filtered (outfile, "\nBlockvector same as previous symtab\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -506,7 +527,7 @@ Arguments missing: an output file name and an optional symbol file name");
|
||||
{
|
||||
nomem (0);
|
||||
}
|
||||
cleanups = make_cleanup (freeargv, (char *) argv);
|
||||
cleanups = make_cleanup ((make_cleanup_func) freeargv, (char *) argv);
|
||||
|
||||
if (argv[0] != NULL)
|
||||
{
|
||||
@@ -524,7 +545,7 @@ Arguments missing: an output file name and an optional symbol file name");
|
||||
outfile = gdb_fopen (filename, FOPEN_WT);
|
||||
if (outfile == 0)
|
||||
perror_with_name (filename);
|
||||
make_cleanup (fclose, (char *) outfile);
|
||||
make_cleanup ((make_cleanup_func) gdb_fclose, (char *) &outfile);
|
||||
|
||||
immediate_quit++;
|
||||
ALL_SYMTABS (objfile, s)
|
||||
@@ -552,7 +573,12 @@ print_symbol (args)
|
||||
{
|
||||
fprintf_filtered (outfile, "label %s at ", SYMBOL_SOURCE_NAME (symbol));
|
||||
print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile);
|
||||
fprintf_filtered (outfile, "\n");
|
||||
if (SYMBOL_BFD_SECTION (symbol))
|
||||
fprintf_filtered (outfile, " section %s\n",
|
||||
bfd_section_name (SYMBOL_BFD_SECTION (symbol)->owner,
|
||||
SYMBOL_BFD_SECTION (symbol)));
|
||||
else
|
||||
fprintf_filtered (outfile, "\n");
|
||||
return 1;
|
||||
}
|
||||
if (SYMBOL_NAMESPACE (symbol) == STRUCT_NAMESPACE)
|
||||
@@ -592,7 +618,7 @@ print_symbol (args)
|
||||
switch (SYMBOL_CLASS (symbol))
|
||||
{
|
||||
case LOC_CONST:
|
||||
fprintf_filtered (outfile, "const %ld (0x%lx),",
|
||||
fprintf_filtered (outfile, "const %ld (0x%lx)",
|
||||
SYMBOL_VALUE (symbol),
|
||||
SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
@@ -606,44 +632,53 @@ print_symbol (args)
|
||||
for (i = 0; i < TYPE_LENGTH (type); i++)
|
||||
fprintf_filtered (outfile, " %02x",
|
||||
(unsigned)SYMBOL_VALUE_BYTES (symbol) [i]);
|
||||
fprintf_filtered (outfile, ",");
|
||||
}
|
||||
break;
|
||||
|
||||
case LOC_STATIC:
|
||||
fprintf_filtered (outfile, "static at ");
|
||||
print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1,outfile);
|
||||
fprintf_filtered (outfile, ",");
|
||||
if (SYMBOL_BFD_SECTION (symbol))
|
||||
fprintf_filtered (outfile, " section %s",
|
||||
bfd_section_name
|
||||
(SYMBOL_BFD_SECTION (symbol)->owner,
|
||||
SYMBOL_BFD_SECTION (symbol)));
|
||||
break;
|
||||
|
||||
case LOC_INDIRECT:
|
||||
fprintf_filtered (outfile, "extern global at *(");
|
||||
print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1,outfile);
|
||||
fprintf_filtered (outfile, "),");
|
||||
break;
|
||||
|
||||
case LOC_REGISTER:
|
||||
fprintf_filtered (outfile, "register %ld,", SYMBOL_VALUE (symbol));
|
||||
fprintf_filtered (outfile, "register %ld", SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
case LOC_ARG:
|
||||
fprintf_filtered (outfile, "arg at offset 0x%lx,",
|
||||
fprintf_filtered (outfile, "arg at offset 0x%lx",
|
||||
SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
case LOC_LOCAL_ARG:
|
||||
fprintf_filtered (outfile, "arg at offset 0x%lx from fp,",
|
||||
fprintf_filtered (outfile, "arg at offset 0x%lx from fp",
|
||||
SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
case LOC_REF_ARG:
|
||||
fprintf_filtered (outfile, "reference arg at 0x%lx,", SYMBOL_VALUE (symbol));
|
||||
fprintf_filtered (outfile, "reference arg at 0x%lx", SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
case LOC_REGPARM:
|
||||
fprintf_filtered (outfile, "parameter register %ld,", SYMBOL_VALUE (symbol));
|
||||
fprintf_filtered (outfile, "parameter register %ld", SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
case LOC_REGPARM_ADDR:
|
||||
fprintf_filtered (outfile, "address parameter register %ld,", SYMBOL_VALUE (symbol));
|
||||
fprintf_filtered (outfile, "address parameter register %ld", SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
case LOC_LOCAL:
|
||||
fprintf_filtered (outfile, "local at offset 0x%lx,",
|
||||
fprintf_filtered (outfile, "local at offset 0x%lx",
|
||||
SYMBOL_VALUE (symbol));
|
||||
break;
|
||||
|
||||
@@ -653,7 +688,7 @@ print_symbol (args)
|
||||
break;
|
||||
|
||||
case LOC_BASEREG_ARG:
|
||||
fprintf_filtered (outfile, "arg at 0x%lx from register %d,",
|
||||
fprintf_filtered (outfile, "arg at 0x%lx from register %d",
|
||||
SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
|
||||
break;
|
||||
|
||||
@@ -663,16 +698,29 @@ print_symbol (args)
|
||||
case LOC_LABEL:
|
||||
fprintf_filtered (outfile, "label at ");
|
||||
print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile);
|
||||
if (SYMBOL_BFD_SECTION (symbol))
|
||||
fprintf_filtered (outfile, " section %s",
|
||||
bfd_section_name
|
||||
(SYMBOL_BFD_SECTION (symbol)->owner,
|
||||
SYMBOL_BFD_SECTION (symbol)));
|
||||
break;
|
||||
|
||||
case LOC_BLOCK:
|
||||
fprintf_filtered (outfile, "block (object ");
|
||||
fprintf_filtered (outfile, "block object ");
|
||||
gdb_print_address (SYMBOL_BLOCK_VALUE (symbol), outfile);
|
||||
fprintf_filtered (outfile, ") starting at ");
|
||||
fprintf_filtered (outfile, ", ");
|
||||
print_address_numeric (BLOCK_START (SYMBOL_BLOCK_VALUE (symbol)),
|
||||
1,
|
||||
outfile);
|
||||
fprintf_filtered (outfile, ",");
|
||||
fprintf_filtered (outfile, "..");
|
||||
print_address_numeric (BLOCK_END (SYMBOL_BLOCK_VALUE (symbol)),
|
||||
1,
|
||||
outfile);
|
||||
if (SYMBOL_BFD_SECTION (symbol))
|
||||
fprintf_filtered (outfile, " section %s",
|
||||
bfd_section_name
|
||||
(SYMBOL_BFD_SECTION (symbol)->owner,
|
||||
SYMBOL_BFD_SECTION (symbol)));
|
||||
break;
|
||||
|
||||
case LOC_UNRESOLVED:
|
||||
@@ -699,7 +747,7 @@ maintenance_print_psymbols (args, from_tty)
|
||||
int from_tty;
|
||||
{
|
||||
char **argv;
|
||||
GDB_FILE *outfile;
|
||||
GDB_FILE *outfile;
|
||||
struct cleanup *cleanups;
|
||||
char *symname = NULL;
|
||||
char *filename = DEV_TTY;
|
||||
@@ -716,7 +764,7 @@ maintenance_print_psymbols (args, from_tty)
|
||||
{
|
||||
nomem (0);
|
||||
}
|
||||
cleanups = make_cleanup (freeargv, (char *) argv);
|
||||
cleanups = make_cleanup ((make_cleanup_func) freeargv, (char *) argv);
|
||||
|
||||
if (argv[0] != NULL)
|
||||
{
|
||||
@@ -734,7 +782,7 @@ maintenance_print_psymbols (args, from_tty)
|
||||
outfile = gdb_fopen (filename, FOPEN_WT);
|
||||
if (outfile == 0)
|
||||
perror_with_name (filename);
|
||||
make_cleanup (fclose, outfile);
|
||||
make_cleanup ((make_cleanup_func) gdb_fclose, &outfile);
|
||||
|
||||
immediate_quit++;
|
||||
ALL_PSYMTABS (objfile, ps)
|
||||
@@ -789,6 +837,9 @@ print_partial_symbols (p, count, what, outfile)
|
||||
case LOC_STATIC:
|
||||
fputs_filtered ("static", outfile);
|
||||
break;
|
||||
case LOC_INDIRECT:
|
||||
fputs_filtered ("extern global", outfile);
|
||||
break;
|
||||
case LOC_REGISTER:
|
||||
fputs_filtered ("register", outfile);
|
||||
break;
|
||||
@@ -833,10 +884,8 @@ print_partial_symbols (p, count, what, outfile)
|
||||
break;
|
||||
}
|
||||
fputs_filtered (", ", outfile);
|
||||
/* FIXME-32x64: Need to use SYMBOL_VALUE_ADDRESS, etc.; this
|
||||
could be 32 bits when some of the other fields in the union
|
||||
are 64. */
|
||||
fprintf_filtered (outfile, "0x%lx\n", SYMBOL_VALUE (*p));
|
||||
print_address_numeric (SYMBOL_VALUE_ADDRESS (*p), 1, outfile);
|
||||
fprintf_filtered (outfile, "\n");
|
||||
p++;
|
||||
}
|
||||
}
|
||||
@@ -863,7 +912,7 @@ maintenance_print_msymbols (args, from_tty)
|
||||
{
|
||||
nomem (0);
|
||||
}
|
||||
cleanups = make_cleanup (freeargv, argv);
|
||||
cleanups = make_cleanup ((make_cleanup_func) freeargv, argv);
|
||||
|
||||
if (argv[0] != NULL)
|
||||
{
|
||||
@@ -881,7 +930,7 @@ maintenance_print_msymbols (args, from_tty)
|
||||
outfile = gdb_fopen (filename, FOPEN_WT);
|
||||
if (outfile == 0)
|
||||
perror_with_name (filename);
|
||||
make_cleanup (fclose, outfile);
|
||||
make_cleanup ((make_cleanup_func) gdb_fclose, &outfile);
|
||||
|
||||
immediate_quit++;
|
||||
ALL_OBJFILES (objfile)
|
||||
|
||||
Reference in New Issue
Block a user