X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsomread.c;h=c187d13c1dc5aa2e7b09ce04db01b50e26b4e380;hb=2d447fcaa923b78068b74b162a8de91219c03b78;hp=971fea25f7387ea7de26f656e63b53013b7064e6;hpb=52f0bd74b2d084346e08abf2c7d9b5435fc1a9d5;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/somread.c b/gdb/somread.c index 971fea25f7..c187d13c1d 100644 --- a/gdb/somread.c +++ b/gdb/somread.c @@ -1,6 +1,6 @@ /* Read HP PA/Risc object files for GDB. - Copyright 1991, 1992, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 - Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, + 2004 Free Software Foundation, Inc. Written by Fred Fish at Cygnus Support. This file is part of GDB. @@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ #include "defs.h" #include "bfd.h" @@ -35,23 +35,11 @@ #include "som.h" #include "libhppa.h" -/* Various things we might complain about... */ +#include "solib-som.h" +/* Prototypes for local functions. */ static int init_import_symbols (struct objfile *objfile); -static void som_symfile_init (struct objfile *); - -static void som_new_init (struct objfile *); - -static void som_symfile_read (struct objfile *, int); - -static void som_symfile_finish (struct objfile *); - -static void som_symtab_read (bfd *, struct objfile *, - struct section_offsets *); - -static void som_symfile_offsets (struct objfile *, struct section_addr_info *); - /* FIXME: These should really be in a common header somewhere */ extern void hpread_build_psymtabs (struct objfile *, int); @@ -105,14 +93,14 @@ som_symtab_read (bfd *abfd, struct objfile *objfile, bfd_seek (abfd, obj_som_sym_filepos (abfd), SEEK_SET); val = bfd_bread (buf, symsize * number_of_symbols, abfd); if (val != symsize * number_of_symbols) - error ("Couldn't read symbol dictionary!"); + error (_("Couldn't read symbol dictionary!")); /* FIXME (alloca): could be quite large. */ stringtab = alloca (obj_som_stringtab_size (abfd)); bfd_seek (abfd, obj_som_str_filepos (abfd), SEEK_SET); val = bfd_bread (stringtab, obj_som_stringtab_size (abfd), abfd); if (val != obj_som_stringtab_size (abfd)) - error ("Can't read in HP string table."); + error (_("Can't read in HP string table.")); /* We need to determine if objfile is a dynamic executable (so we can do the right thing for ST_ENTRY vs ST_CODE symbols). @@ -219,6 +207,7 @@ som_symtab_read (bfd *abfd, struct objfile *objfile, if ((symname[0] == 'L' && symname[1] == '$') || (symname[0] == '$' && symname[strlen (symname) - 1] == '$') || (symname[0] == 'D' && symname[1] == '$') + || (strncmp (symname, "L0\001", 3) == 0) || (strncmp (symname, "$PIC", 4) == 0)) continue; break; @@ -288,7 +277,7 @@ som_symtab_read (bfd *abfd, struct objfile *objfile, } if (bufp->name.n_strx > obj_som_stringtab_size (abfd)) - error ("Invalid symbol data; bad HP string table offset: %d", + error (_("Invalid symbol data; bad HP string table offset: %d"), bufp->name.n_strx); prim_record_minimal_symbol (symname, bufp->symbol_value, ms_type, @@ -364,9 +353,7 @@ som_symfile_read (struct objfile *objfile, int mainline) do_cleanups (back_to); /* Now read information from the stabs debug sections. - This is a no-op for SOM. - Perhaps it is intended for some kind of mixed STABS/SOM - situation? */ + This is emitted by gcc. */ stabsect_build_psymtabs (objfile, mainline, "$GDB_SYMBOLS$", "$GDB_STRINGS$", "$TEXT$"); @@ -375,9 +362,6 @@ som_symfile_read (struct objfile *objfile, int mainline) the DNTT, but is now done via the PXDB-built quick-lookup tables together with a scan of the GNTT. See hp-psymtab-read.c. */ hpread_build_psymtabs (objfile, mainline); - - /* Force hppa-tdep.c to re-read the unwind descriptors. */ - objfile->obj_private = NULL; } /* Initialize anything that needs initializing when a completely new symbol @@ -401,9 +385,9 @@ som_new_init (struct objfile *ignore) static void som_symfile_finish (struct objfile *objfile) { - if (objfile->sym_stab_info != NULL) + if (objfile->deprecated_sym_stab_info != NULL) { - xmfree (objfile->md, objfile->sym_stab_info); + xfree (objfile->deprecated_sym_stab_info); } hpread_symfile_finish (objfile); } @@ -432,7 +416,7 @@ som_symfile_offsets (struct objfile *objfile, struct section_addr_info *addrs) objfile->num_sections = bfd_count_sections (objfile->obfd); objfile->section_offsets = (struct section_offsets *) - obstack_alloc (&objfile->psymbol_obstack, + obstack_alloc (&objfile->objfile_obstack, SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)); /* FIXME: ezannoni 2000-04-20 The section names in SOM are not @@ -453,7 +437,7 @@ som_symfile_offsets (struct objfile *objfile, struct section_addr_info *addrs) /* Note: Here is OK to compare with ".text" because this is the name that gdb itself gives to that section, not the SOM name. */ - for (i = 0; i < objfile->num_sections && addrs->other[i].name; i++) + for (i = 0; i < addrs->num_sections && addrs->other[i].name; i++) if (strcmp (addrs->other[i].name, ".text") == 0) break; text_addr = addrs->other[i].addr; @@ -534,7 +518,7 @@ init_import_symbols (struct objfile *objfile) to do with psymbols, just a matter of convenience. We want the import list to be freed when the objfile is deallocated */ objfile->import_list - = (ImportEntry *) obstack_alloc (&objfile->psymbol_obstack, + = (ImportEntry *) obstack_alloc (&objfile->objfile_obstack, import_list_size * sizeof (ImportEntry)); /* Read in the import entries, a bunch at a time */ @@ -550,7 +534,7 @@ init_import_symbols (struct objfile *objfile) if (buffer[i].type != (unsigned char) 0) { objfile->import_list[k] - = (char *) obstack_alloc (&objfile->psymbol_obstack, strlen (string_buffer + buffer[i].name) + 1); + = (char *) obstack_alloc (&objfile->objfile_obstack, strlen (string_buffer + buffer[i].name) + 1); strcpy (objfile->import_list[k], string_buffer + buffer[i].name); /* Some day we might want to record the type and other information too */ } @@ -570,7 +554,7 @@ init_import_symbols (struct objfile *objfile) if (buffer[i].type != (unsigned char) 0) { objfile->import_list[k] - = (char *) obstack_alloc (&objfile->psymbol_obstack, strlen (string_buffer + buffer[i].name) + 1); + = (char *) obstack_alloc (&objfile->objfile_obstack, strlen (string_buffer + buffer[i].name) + 1); strcpy (objfile->import_list[k], string_buffer + buffer[i].name); /* Some day we might want to record the type and other information too */ } @@ -657,7 +641,7 @@ init_export_symbols (struct objfile *objfile) to do with psymbols, just a matter of convenience. We want the export list to be freed when the objfile is deallocated */ objfile->export_list - = (ExportEntry *) obstack_alloc (&objfile->psymbol_obstack, + = (ExportEntry *) obstack_alloc (&objfile->objfile_obstack, export_list_size * sizeof (ExportEntry)); /* Read in the export entries, a bunch at a time */ @@ -673,7 +657,7 @@ init_export_symbols (struct objfile *objfile) if (buffer[i].type != (unsigned char) 0) { objfile->export_list[k].name - = (char *) obstack_alloc (&objfile->psymbol_obstack, strlen (string_buffer + buffer[i].name) + 1); + = (char *) obstack_alloc (&objfile->objfile_obstack, strlen (string_buffer + buffer[i].name) + 1); strcpy (objfile->export_list[k].name, string_buffer + buffer[i].name); objfile->export_list[k].address = buffer[i].value; /* Some day we might want to record the type and other information too */ @@ -697,7 +681,7 @@ init_export_symbols (struct objfile *objfile) if (buffer[i].type != (unsigned char) 0) { objfile->export_list[k].name - = (char *) obstack_alloc (&objfile->psymbol_obstack, strlen (string_buffer + buffer[i].name) + 1); + = (char *) obstack_alloc (&objfile->objfile_obstack, strlen (string_buffer + buffer[i].name) + 1); strcpy (objfile->export_list[k].name, string_buffer + buffer[i].name); /* Some day we might want to record the type and other information too */ objfile->export_list[k].address = buffer[i].value;