* dbxread.c (dbx_symfile_init, elfstab_build_psymtabs):

Call new bfd_get_size() and verify that string table is no larger
	than the file that is supposed to contain it.
	* symfile.c (syms_from_objfile):  Only complain about configured
	NAMES_HAVE_UNDERSCORE differences between gdb and bfd if the
	current target is the default BFD target.
This commit is contained in:
Fred Fish 1992-12-28 01:44:21 +00:00
parent 1169c95803
commit 51db232366
3 changed files with 42 additions and 11 deletions

View File

@ -1,3 +1,12 @@
Sun Dec 27 17:34:15 1992 Fred Fish (fnf@cygnus.com)
* dbxread.c (dbx_symfile_init, elfstab_build_psymtabs):
Call new bfd_get_size() and verify that string table is no larger
than the file that is supposed to contain it.
* symfile.c (syms_from_objfile): Only complain about configured
NAMES_HAVE_UNDERSCORE differences between gdb and bfd if the
current target is the default BFD target.
Sat Dec 26 20:51:41 1992 Fred Fish (fnf@cygnus.com)
* solib.c (BKPT_AT_MAIN): Change to BKPT_AT_SYMBOL.

View File

@ -595,7 +595,8 @@ dbx_symfile_init (objfile)
DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
#endif
if (DBX_STRINGTAB_SIZE (objfile) <= 0)
if (DBX_STRINGTAB_SIZE (objfile) <= 0
|| DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
error ("ridiculous string table size (%d bytes).",
DBX_STRINGTAB_SIZE (objfile));
@ -603,7 +604,8 @@ dbx_symfile_init (objfile)
(char *) obstack_alloc (&objfile -> psymbol_obstack,
DBX_STRINGTAB_SIZE (objfile));
#ifdef GDB_TARGET_IS_HPPA
if (HP_STRINGTAB_SIZE (objfile) <= 0)
if (HP_STRINGTAB_SIZE (objfile) <= 0
|| HP_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
error ("ridiculous string table size (%d bytes).",
HP_STRINGTAB_SIZE (objfile));
@ -2095,7 +2097,8 @@ elfstab_build_psymtabs (objfile, section_offsets, mainline,
DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
DBX_SYMTAB_OFFSET (objfile) = staboffset;
if (stabstrsize < 0) /* FIXME: stabstrsize is unsigned; never true! */
if (stabstrsize < 0 /* FIXME: stabstrsize is unsigned; never true! */
|| stabstrsize > bfd_get_size (sym_bfd))
error ("ridiculous string table size: %d bytes", stabstrsize);
DBX_STRINGTAB (objfile) = (char *)
obstack_alloc (&objfile->psymbol_obstack, stabstrsize+1);

View File

@ -440,21 +440,40 @@ syms_from_objfile (objfile, addr, mainline, verbo)
addr -= bfd_section_vma (objfile->obfd, lowest_sect);
}
{
/* Debugging check inserted for testing elimination of NAMES_HAVE_UNDERSCORE.
Complain if the dynamic setting of NAMES_HAVE_UNDERSCORE from BFD
doesn't match the static setting from the GDB config files.
doesn't match the static setting from the GDB config files, but only
if we are using the first BFD target (the default target selected by
the same configuration that decided whether NAMES_HAVE_UNDERSCORE is
defined or not). For other targets (such as when the user sets GNUTARGET
or we are reading a "foreign" object file), it is likely that the value
of bfd_get_symbol_leading_char has no relation to the value of
NAMES_HAVE_UNDERSCORE for the target for which this gdb was built.
Hack alert: the only way to currently do this with bfd is to ask it to
produce a list of known target names and compare the first one in the
list with the one for the bfd we are using.
FIXME: Remove this check after a round of testing.
-- gnu@cygnus.com, 16dec92 */
char **targets = bfd_target_list ();
if (targets != NULL && *targets != NULL)
{
if (bfd_get_symbol_leading_char (objfile->obfd) !=
#ifdef NAMES_HAVE_UNDERSCORE
if (bfd_get_symbol_leading_char(objfile->obfd) != '_')
'_'
#else
if (bfd_get_symbol_leading_char(objfile->obfd) != 0)
0
#endif
fprintf (stderr,
"GDB internal error! NAMES_HAVE_UNDERSCORE set wrong for %s BFD:\n%s\n",
objfile->obfd->xvec->name,
objfile->obfd->filename);
/* End of debugging check. FIXME. */
&& STREQ (bfd_get_target (objfile->obfd), *targets))
{
fprintf (stderr, "GDB internal error! NAMES_HAVE_UNDERSCORE set wrong for %s BFD:\n%s\n",
bfd_get_target (objfile->obfd),
bfd_get_filename (objfile->obfd));
}
free (targets);
}
/* End of debugging check. FIXME. */
}
/* Initialize symbol reading routines for this objfile, allow complaints to
appear for this new file, and record how verbose to be, then do the