aboutsummaryrefslogtreecommitdiff
path: root/gdb/somread.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1994-06-27 06:45:35 +0000
committerJeff Law <law@redhat.com>1994-06-27 06:45:35 +0000
commit6a86fa489b7cb1048f9028ba674bd29da2537643 (patch)
tree7e8bc681d66fc2d8acb5f0c4d706355386dd9876 /gdb/somread.c
parentbfe2f12bd0318a10cfb25fc3530ce55d47190804 (diff)
downloadgdb-6a86fa489b7cb1048f9028ba674bd29da2537643.zip
gdb-6a86fa489b7cb1048f9028ba674bd29da2537643.tar.gz
gdb-6a86fa489b7cb1048f9028ba674bd29da2537643.tar.bz2
* somread.c: Simplify by using stabsect_build_psymtabs.
* dbxread.c (stabsect_build_psymtabs): New argument "text_name" corresponding to the name of the text section. All references changed. (somstab_build_psymtabs): Delete function, no longer needed.
Diffstat (limited to 'gdb/somread.c')
-rw-r--r--gdb/somread.c145
1 files changed, 15 insertions, 130 deletions
diff --git a/gdb/somread.c b/gdb/somread.c
index 89a5c08..0a2dc8b 100644
--- a/gdb/somread.c
+++ b/gdb/somread.c
@@ -40,12 +40,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Size of n_value and n_strx fields in a stab symbol. */
#define BYTES_IN_WORD 4
+#if 0
#include "aout/aout64.h"
+#endif
/* Various things we might complain about... */
static void
-som__symfile_init PARAMS ((struct objfile *));
+som_symfile_init PARAMS ((struct objfile *));
static void
som_new_init PARAMS ((struct objfile *));
@@ -59,9 +61,6 @@ som_symfile_finish PARAMS ((struct objfile *));
static void
som_symtab_read PARAMS ((bfd *, CORE_ADDR, struct objfile *));
-static void
-free_sominfo PARAMS ((PTR));
-
static struct section_offsets *
som_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
@@ -107,7 +106,6 @@ som_symtab_read (abfd, addr, objfile)
struct objfile *objfile;
{
unsigned int number_of_symbols;
- unsigned int i;
int val, dynamic;
char *stringtab;
asection *shlib_info;
@@ -289,8 +287,6 @@ som_symtab_read (abfd, addr, objfile)
bufp->symbol_value, ms_type,
objfile);
}
-
- install_minimal_symbols (objfile);
}
/* Scan and build partial symbols for a symbol file.
@@ -335,44 +331,23 @@ som_symfile_read (objfile, section_offsets, mainline)
init_minimal_symbol_collection ();
back_to = make_cleanup (discard_minimal_symbols, 0);
- make_cleanup (free_sominfo, (PTR) objfile);
-
- /* Process the normal SOM symbol table first. */
-
/* FIXME, should take a section_offsets param, not just an offset. */
offset = ANOFFSET (section_offsets, 0);
- som_symtab_read (abfd, offset, objfile);
- /* Now process debugging information, which is contained in
- special SOM sections. */
-
- somstab_build_psymtabs (objfile, section_offsets, mainline);
-
- do_cleanups (back_to);
-}
+ /* Process the normal SOM symbol table first. */
-/* This cleans up the objfile's sym_stab_info pointer, and the chain of
- stab_section_info's, that might be dangling from it. */
+ som_symtab_read (abfd, offset, objfile);
-static void
-free_sominfo (objp)
- PTR objp;
-{
- struct objfile *objfile = (struct objfile *)objp;
- struct dbx_symfile_info *dbxinfo = (struct dbx_symfile_info *)
- objfile->sym_stab_info;
- struct stab_section_info *ssi, *nssi;
+ /* Now read information from the debugging sections. */
+ stabsect_build_psymtabs (objfile, section_offsets, mainline,
+ "$GDB_SYMBOLS$", "$GDB_STRINGS$", "$TEXT$");
- ssi = dbxinfo->stab_section_info;
- while (ssi)
- {
- nssi = ssi->next;
- mfree (objfile->md, ssi);
- ssi = nssi;
- }
+ /* Install any minimal symbols that have been collected as the current
+ minimal symbols for this objfile. */
+ install_minimal_symbols (objfile);
- dbxinfo->stab_section_info = 0; /* Just say No mo info about this. */
+ do_cleanups (back_to);
}
/* Initialize anything that needs initializing when a completely new symbol
@@ -406,101 +381,11 @@ som_symfile_finish (objfile)
/* SOM specific initialization routine for reading symbols.
- It is passed a pointer to a struct sym_fns which contains, among other
- things, the BFD for the file whose symbols are being read, and a slot for
- a pointer to "private data" which we can fill with goodies.
-
- This routine is almost a complete ripoff of dbx_symfile_init. The
- common parts of these routines should be extracted and used instead of
- duplicating this code. FIXME. */
-
+ Nothing SOM specific left to do anymore. */
static void
-som_symfile_init (objfile)
- struct objfile *objfile;
+som_symfile_init (ignore)
+ struct objfile *ignore;
{
- int val;
- bfd *sym_bfd = objfile->obfd;
- char *name = bfd_get_filename (sym_bfd);
- asection *stabsect; /* Section containing symbol table entries */
- asection *stringsect; /* Section containing symbol name strings */
-
- stabsect = bfd_get_section_by_name (sym_bfd, "$GDB_SYMBOLS$");
- stringsect = bfd_get_section_by_name (sym_bfd, "$GDB_STRINGS$");
-
- /* Allocate struct to keep track of the symfile */
- objfile->sym_stab_info = (PTR)
- xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
-
- memset ((PTR) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
-
-
- /* FIXME POKING INSIDE BFD DATA STRUCTURES */
-#define STRING_TABLE_OFFSET (stringsect->filepos)
-#define SYMBOL_TABLE_OFFSET (stabsect->filepos)
-
- /* FIXME POKING INSIDE BFD DATA STRUCTURES */
-
- DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
- DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, "$TEXT$");
- if (!DBX_TEXT_SECT (objfile))
- error ("Can't find $TEXT$ section in symbol file");
-
- if (!stabsect)
- return;
-
- if (!stringsect)
- error ("Found stabs, but not string section");
-
- /* FIXME: I suspect this should be external_nlist. The size of host
- types like long and bfd_vma should not affect how we read the
- file. */
- DBX_SYMBOL_SIZE (objfile) = sizeof (struct internal_nlist);
- DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
- / DBX_SYMBOL_SIZE (objfile);
- DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
-
- /* Read the string table and stash it away in the psymbol_obstack. It is
- only needed as long as we need to expand psymbols into full symbols,
- so when we blow away the psymbol the string table goes away as well.
- Note that gdb used to use the results of attempting to malloc the
- string table, based on the size it read, as a form of sanity check
- for botched byte swapping, on the theory that a byte swapped string
- table size would be so totally bogus that the malloc would fail. Now
- that we put in on the psymbol_obstack, we can't do this since gdb gets
- a fatal error (out of virtual memory) if the size is bogus. We can
- however at least check to see if the size is zero or some negative
- value. */
-
- DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stringsect);
-
- if (DBX_SYMCOUNT (objfile) == 0
- || DBX_STRINGTAB_SIZE (objfile) == 0)
- return;
-
- 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));
-
- 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 == 0)
- error ("End of file reading string table");
- else if (val < 0)
- /* It's possible bfd_read should be setting bfd_error, and we should be
- checking that. But currently it doesn't set bfd_error. */
- perror_with_name (name);
- else if (val != DBX_STRINGTAB_SIZE (objfile))
- error ("Short read reading string table");
}
/* SOM specific parsing routine for section offsets.