Add "make pdf" and "make install-pdf", from Brooks Moses
[deliverable/binutils-gdb.git] / gdb / somread.c
index e65bdcc98cdf0cf913dd375ae6a8f4d6edd46802..5f0c13b6011daac3d399b50dfa6953a10913719d 100644 (file)
@@ -1,6 +1,6 @@
 /* Read HP PA/Risc object files for GDB.
-   Copyright 1991, 1992, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
-   2004 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1992, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
+   2004, 2007 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"
@@ -88,19 +88,26 @@ som_symtab_read (bfd *abfd, struct objfile *objfile,
 
   number_of_symbols = bfd_get_symcount (abfd);
 
-  /* FIXME (alloca): could be quite large. */
-  buf = alloca (symsize * number_of_symbols);
+  /* Allocate a buffer to read in the debug info.
+     We avoid using alloca because the memory size could be so large
+     that we could hit the stack size limit.  */
+  buf = xmalloc (symsize * number_of_symbols);
+  make_cleanup (xfree, buf);
   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!");
-
-  /* FIXME (alloca): could be quite large. */
-  stringtab = alloca (obj_som_stringtab_size (abfd));
+    error (_("Couldn't read symbol dictionary!"));
+
+  /* Allocate a buffer to read in the som stringtab section of
+     the debugging info.  Again, we avoid using alloca because
+     the data could be so large that we could potentially hit
+     the stack size limitat.  */
+  stringtab = xmalloc (obj_som_stringtab_size (abfd));
+  make_cleanup (xfree, stringtab);
   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).
@@ -277,7 +284,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,
@@ -353,9 +360,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$");
 
@@ -364,9 +369,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->deprecated_obj_private = NULL;
 }
 
 /* Initialize anything that needs initializing when a completely new symbol
@@ -442,7 +444,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;
This page took 0.02476 seconds and 4 git commands to generate.