mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
* dbxread.c (unknown_symchar_complaint): Add new complaint.
* stabsread.c: Declare it. * partial-stab.h: Use it. * utils.c (malloc_botch): Don't forward-declare if NO_MMALLOC.
This commit is contained in:
@ -1,3 +1,11 @@
|
||||
Thu Apr 15 02:37:48 1993 John Gilmore (gnu@cacophony.cygnus.com)
|
||||
|
||||
* dbxread.c (unknown_symchar_complaint): Add new complaint.
|
||||
* stabsread.c: Declare it.
|
||||
* partial-stab.h: Use it.
|
||||
|
||||
* utils.c (malloc_botch): Don't forward-declare if NO_MMALLOC.
|
||||
|
||||
Wed Apr 14 17:12:51 1993 Jim Kingdon (kingdon@cygnus.com)
|
||||
|
||||
* stack.c (print_frame_info): Print specially if dummy frame.
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* Read dbx symbol tables and convert to internal format, for GDB.
|
||||
Copyright 1986, 1987, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
|
||||
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
@ -165,6 +166,9 @@ struct complaint string_table_offset_complaint =
|
||||
struct complaint unknown_symtype_complaint =
|
||||
{"unknown symbol type %s", 0, 0};
|
||||
|
||||
struct complaint unknown_symchar_complaint =
|
||||
{"unknown symbol type character `%c'", 0, 0};
|
||||
|
||||
struct complaint lbrac_rbrac_complaint =
|
||||
{"block start larger than block end", 0, 0};
|
||||
|
||||
@ -561,6 +565,9 @@ dbx_symfile_init (objfile)
|
||||
|
||||
if (STRING_TABLE_OFFSET == 0)
|
||||
{
|
||||
/* It appears that with the existing bfd code, STRING_TABLE_OFFSET
|
||||
will never be zero, even when there is no string table. This
|
||||
would appear to be a bug in bfd. */
|
||||
DBX_STRINGTAB_SIZE (objfile) = 0;
|
||||
DBX_STRINGTAB (objfile) = NULL;
|
||||
}
|
||||
@ -573,28 +580,47 @@ dbx_symfile_init (objfile)
|
||||
memset ((PTR) size_temp, 0, sizeof (size_temp));
|
||||
val = bfd_read ((PTR) size_temp, sizeof (size_temp), 1, sym_bfd);
|
||||
if (val < 0)
|
||||
perror_with_name (name);
|
||||
|
||||
DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
|
||||
|
||||
if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
|
||||
|| DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
|
||||
error ("ridiculous string table size (%d bytes).",
|
||||
DBX_STRINGTAB_SIZE (objfile));
|
||||
|
||||
DBX_STRINGTAB (objfile) =
|
||||
(char *) obstack_alloc (&objfile -> psymbol_obstack,
|
||||
DBX_STRINGTAB_SIZE (objfile));
|
||||
|
||||
/* Now read in the string table in one big gulp. */
|
||||
|
||||
val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
|
||||
if (val < 0)
|
||||
perror_with_name (name);
|
||||
val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
|
||||
sym_bfd);
|
||||
if (val != DBX_STRINGTAB_SIZE (objfile))
|
||||
perror_with_name (name);
|
||||
{
|
||||
perror_with_name (name);
|
||||
}
|
||||
else if (val == 0)
|
||||
{
|
||||
/* With the existing bfd code, STRING_TABLE_OFFSET will be set to
|
||||
EOF if there is no string table, and attempting to read the size
|
||||
from EOF will read zero bytes. */
|
||||
DBX_STRINGTAB_SIZE (objfile) = 0;
|
||||
DBX_STRINGTAB (objfile) = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Read some data that would appear to be the string table size.
|
||||
If there really is a string table, then it is probably the right
|
||||
size. Byteswap if necessary and validate the size. Note that
|
||||
the minimum is DBX_STRINGTAB_SIZE_SIZE. If we just read some
|
||||
random data that happened to be at STRING_TABLE_OFFSET, because
|
||||
bfd can't tell us there is no string table, the sanity checks may
|
||||
or may not catch this. */
|
||||
DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
|
||||
|
||||
if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
|
||||
|| DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
|
||||
error ("ridiculous string table size (%d bytes).",
|
||||
DBX_STRINGTAB_SIZE (objfile));
|
||||
|
||||
DBX_STRINGTAB (objfile) =
|
||||
(char *) obstack_alloc (&objfile -> psymbol_obstack,
|
||||
DBX_STRINGTAB_SIZE (objfile));
|
||||
|
||||
/* Now read in the string table in one big gulp. */
|
||||
|
||||
val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
|
||||
if (val < 0)
|
||||
perror_with_name (name);
|
||||
val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
|
||||
sym_bfd);
|
||||
if (val != DBX_STRINGTAB_SIZE (objfile))
|
||||
perror_with_name (name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1421,7 +1447,7 @@ read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
|
||||
if (last_source_start_addr == 0)
|
||||
last_source_start_addr = text_offset;
|
||||
|
||||
rtn = end_symtab (text_offset + text_size, 0, 0, objfile);
|
||||
rtn = end_symtab (text_offset + text_size, 0, 0, objfile, SECT_OFF_TEXT);
|
||||
end_stabs ();
|
||||
return (rtn);
|
||||
}
|
||||
@ -1668,7 +1694,7 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
|
||||
patch_subfile_names (current_subfile, name);
|
||||
break; /* Ignore repeated SOs */
|
||||
}
|
||||
end_symtab (valu, 0, 0, objfile);
|
||||
end_symtab (valu, 0, 0, objfile, SECT_OFF_TEXT);
|
||||
end_stabs ();
|
||||
}
|
||||
start_stabs ();
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Shared code to pre-read a stab (dbx-style), when building a psymtab.
|
||||
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation,
|
||||
Inc.
|
||||
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
@ -518,9 +518,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Global functions were ignored here, but now they
|
||||
are put into the global psymtab like one would expect.
|
||||
They're also in the misc fn vector...
|
||||
FIXME, why did it used to ignore these? That broke
|
||||
"i fun" on these functions. */
|
||||
They're also in the minimal symbol table. */
|
||||
case 'F':
|
||||
#ifdef DBXREAD_ONLY
|
||||
/* Kludges for ELF/STABS with Sun ACC */
|
||||
@ -563,6 +561,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
Someone says sun cc puts out symbols like
|
||||
/foo/baz/maclib::/usr/local/bin/maclib,
|
||||
which would get here with a symbol type of ':'. */
|
||||
complain (&unknown_symchar_complaint, p[1]);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
111
gdb/utils.c
111
gdb/utils.c
@ -38,12 +38,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* Prototypes for local functions */
|
||||
|
||||
#if !defined (NO_MALLOC_CHECK)
|
||||
#if defined (NO_MMALLOC) || defined (NO_MMALLOC_CHECK)
|
||||
#else
|
||||
|
||||
static void
|
||||
malloc_botch PARAMS ((void));
|
||||
|
||||
#endif /* NO_MALLOC_CHECK */
|
||||
#endif /* NO_MMALLOC, etc */
|
||||
|
||||
static void
|
||||
fatal_dump_core (); /* Can't prototype with <varargs.h> usage... */
|
||||
@ -1135,53 +1136,6 @@ fputs_filtered (linebuffer, stream)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* fputs_demangled attempts to demangle NAME, a symbol in language LANG, using
|
||||
demangling args ARG_MODE, and print it filtered to STREAM. If the name is
|
||||
not mangled, or the language for the name is unknown, or demangling is off,
|
||||
the name is printed in its "raw" form. */
|
||||
|
||||
void
|
||||
fputs_demangled (name, stream, arg_mode, lang)
|
||||
char *name;
|
||||
FILE *stream;
|
||||
int arg_mode;
|
||||
enum language lang;
|
||||
{
|
||||
char *demangled;
|
||||
|
||||
if (name != NULL)
|
||||
{
|
||||
/* If user wants to see raw output, no problem. */
|
||||
if (!demangle)
|
||||
{
|
||||
fputs_filtered (name, stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (lang)
|
||||
{
|
||||
case language_cplus:
|
||||
demangled = cplus_demangle (name, arg_mode);
|
||||
break;
|
||||
/* start-sanitize-chill */
|
||||
case language_chill:
|
||||
demangled = chill_demangle (name);
|
||||
break;
|
||||
/* end-sanitize-chill */
|
||||
default:
|
||||
demangled = NULL;
|
||||
break;
|
||||
}
|
||||
fputs_filtered (demangled ? demangled : name, stream);
|
||||
if (demangled != NULL)
|
||||
{
|
||||
free (demangled);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Print a variable number of ARGS using format FORMAT. If this
|
||||
information is going to put the amount written (since the last call
|
||||
to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
|
||||
@ -1366,38 +1320,49 @@ print_spaces_filtered (n, stream)
|
||||
|
||||
/* C++ demangler stuff. */
|
||||
|
||||
/* Print NAME on STREAM, demangling if necessary. */
|
||||
/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
|
||||
LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
|
||||
If the name is not mangled, or the language for the name is unknown, or
|
||||
demangling is off, the name is printed in its "raw" form. */
|
||||
|
||||
void
|
||||
fprint_symbol (stream, name)
|
||||
fprintf_symbol_filtered (stream, name, lang, arg_mode)
|
||||
FILE *stream;
|
||||
char *name;
|
||||
enum language lang;
|
||||
int arg_mode;
|
||||
{
|
||||
char *demangled = NULL;
|
||||
char *demangled;
|
||||
|
||||
if (demangle)
|
||||
if (name != NULL)
|
||||
{
|
||||
/* Lacking a better method of knowing what demangler to use, pick
|
||||
one appropriate for whatever the current language is. (FIXME) */
|
||||
switch (current_language -> la_language)
|
||||
/* If user wants to see raw output, no problem. */
|
||||
if (!demangle)
|
||||
{
|
||||
case language_cplus:
|
||||
demangled = cplus_demangle (name, DMGL_PARAMS | DMGL_ANSI);
|
||||
break;
|
||||
/* start-sanitize-chill */
|
||||
case language_chill:
|
||||
demangled = chill_demangle (name);
|
||||
break;
|
||||
/* end-sanitize-chill */
|
||||
fputs_filtered (name, stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (lang)
|
||||
{
|
||||
case language_cplus:
|
||||
demangled = cplus_demangle (name, arg_mode);
|
||||
break;
|
||||
/* start-sanitize-chill */
|
||||
case language_chill:
|
||||
demangled = chill_demangle (name);
|
||||
break;
|
||||
/* end-sanitize-chill */
|
||||
default:
|
||||
demangled = NULL;
|
||||
break;
|
||||
}
|
||||
fputs_filtered (demangled ? demangled : name, stream);
|
||||
if (demangled != NULL)
|
||||
{
|
||||
free (demangled);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (demangled == NULL)
|
||||
{
|
||||
fputs_filtered (name, stream);
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs_filtered (demangled, stream);
|
||||
free (demangled);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user