tidied up ChangeLogs (80 character line width), added reference
[deliverable/binutils-gdb.git] / gdb / dwarfread.c
index 5d1518de54390683a3b40b21b96da6123f1dc2fc..7afc93386227f7d606fd4fe771cbbd3ad122fdd0 100644 (file)
@@ -1,7 +1,7 @@
 /* DWARF debugging format support for GDB.
 
-   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
    Written by Fred Fish at Cygnus Support.  Portions based on dbxread.c,
    mipsread.c, coffread.c, and dwarfread.c from a Data General SVR4 gdb port.
@@ -20,7 +20,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.  */
 
 /*
    If you are looking for DWARF-2 support, you are in the wrong file.
@@ -29,7 +30,7 @@
 
    DWARF-1 is slowly headed for obsoletion.
 
-   In gcc HEAD 2003-11-29 16:28:31 UTC, no targets prefer dwarf-1.
+   In gcc 3.4.0, support for dwarf-1 has been removed.
 
    In gcc 3.3.2, these targets prefer dwarf-1:
 
    Some non-gcc compilers produce dwarf-1: 
 
      PR gdb/1179 was from a user with Diab C++ 4.3.
+     On 2003-07-25 the gdb list received a report from a user
+      with Diab Compiler 4.4b.
      Other users have also reported using Diab compilers with dwarf-1.
+
+     Diab Compiler Suite 5.0.1 supports dwarf-2/dwarf-3 for C and C++.
+     (Diab(tm) Compiler Suite 5.0.1 Release Notes, DOC-14691-ZD-00,
+     Wind River Systems, 2002-07-31).
+
      On 2003-06-09 the gdb list received a report from a user
        with Absoft ProFortran f77 which is dwarf-1.
 
-   -- chastain 2003-12-01
+     Absoft ProFortran Linux[sic] Fortran User Guide (no version,
+     but copyright dates are 1991-2001) says that Absoft ProFortran
+     supports -gdwarf1 and -gdwarf2.
+
+   -- chastain 2004-04-24
 */
 
 /*
 #include "defs.h"
 #include "symtab.h"
 #include "gdbtypes.h"
-#include "symfile.h"
 #include "objfiles.h"
 #include "elf/dwarf.h"
 #include "buildsym.h"
@@ -125,7 +136,7 @@ static void
 bad_die_ref_complaint (int arg1, const char *arg2, int arg3)
 {
   complaint (&symfile_complaints,
-            "DIE @ 0x%x \"%s\", reference to DIE (0x%x) outside compilation unit",
+            _("DIE @ 0x%x \"%s\", reference to DIE (0x%x) outside compilation unit"),
             arg1, arg2, arg3);
 }
 
@@ -133,7 +144,7 @@ static void
 unknown_attribute_form_complaint (int arg1, const char *arg2, int arg3)
 {
   complaint (&symfile_complaints,
-            "DIE @ 0x%x \"%s\", unknown attribute form (0x%x)", arg1, arg2,
+            _("DIE @ 0x%x \"%s\", unknown attribute form (0x%x)"), arg1, arg2,
             arg3);
 }
 
@@ -141,7 +152,7 @@ static void
 dup_user_type_definition_complaint (int arg1, const char *arg2)
 {
   complaint (&symfile_complaints,
-            "DIE @ 0x%x \"%s\", internal error: duplicate user type definition",
+            _("DIE @ 0x%x \"%s\", internal error: duplicate user type definition"),
             arg1, arg2);
 }
 
@@ -149,7 +160,7 @@ static void
 bad_array_element_type_complaint (int arg1, const char *arg2, int arg3)
 {
   complaint (&symfile_complaints,
-            "DIE @ 0x%x \"%s\", bad array element type attribute 0x%x", arg1,
+            _("DIE @ 0x%x \"%s\", bad array element type attribute 0x%x"), arg1,
             arg2, arg3);
 }
 
@@ -548,7 +559,7 @@ dwarf_fundamental_type (struct objfile *objfile, int typeid)
 {
   if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
     {
-      error ("internal error - invalid fundamental type id %d", typeid);
+      error (_("internal error - invalid fundamental type id %d"), typeid);
     }
 
   /* Look for this particular type in the fundamental type vector.  If one is
@@ -667,7 +678,7 @@ dwarf_build_psymtabs (struct objfile *objfile, int mainline, file_ptr dbfoff,
       (bfd_bread (dbbase, dbsize, abfd) != dbsize))
     {
       xfree (dbbase);
-      error ("can't read DWARF data from '%s'", bfd_get_filename (abfd));
+      error (_("can't read DWARF data from '%s'"), bfd_get_filename (abfd));
     }
   back_to = make_cleanup (xfree, dbbase);
 
@@ -808,7 +819,7 @@ alloc_utype (DIE_REF die_ref, struct type *utypep)
     {
       utypep = *typep;
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", internal error: duplicate user type allocation",
+                _("DIE @ 0x%x \"%s\", internal error: duplicate user type allocation"),
                 DIE_ID, DIE_NAME);
     }
   else
@@ -957,7 +968,7 @@ struct_type (struct dieinfo *dip, char *thisdie, char *enddie,
       /* Should never happen */
       TYPE_CODE (type) = TYPE_CODE_UNDEF;
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", missing class, structure, or union tag",
+                _("DIE @ 0x%x \"%s\", missing class, structure, or union tag"),
                 DIE_ID, DIE_NAME);
       break;
     }
@@ -968,7 +979,7 @@ struct_type (struct dieinfo *dip, char *thisdie, char *enddie,
       && *dip->at_name != '~'
       && *dip->at_name != '.')
     {
-      TYPE_TAG_NAME (type) = obconcat (&objfile->type_obstack,
+      TYPE_TAG_NAME (type) = obconcat (&objfile->objfile_obstack,
                                       "", "", dip->at_name);
     }
   /* Use whatever size is known.  Zero is a valid size.  We might however
@@ -1011,7 +1022,7 @@ struct_type (struct dieinfo *dip, char *thisdie, char *enddie,
          /* Save the data.  */
          list->field.name =
            obsavestring (mbr.at_name, strlen (mbr.at_name),
-                         &objfile->type_obstack);
+                         &objfile->objfile_obstack);
          FIELD_TYPE (list->field) = decode_die_type (&mbr);
          FIELD_BITPOS (list->field) = 8 * locval (&mbr);
          FIELD_STATIC_KIND (list->field) = 0;
@@ -1296,7 +1307,7 @@ decode_subscript_data_item (char *scan, char *end)
        {
          /* Munged subscript data or other problem, fake it. */
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", can't decode subscript data items",
+                    _("DIE @ 0x%x \"%s\", can't decode subscript data items"),
                     DIE_ID, DIE_NAME);
          nexttype = dwarf_fundamental_type (current_objfile, FT_INTEGER);
        }
@@ -1312,7 +1323,7 @@ decode_subscript_data_item (char *scan, char *end)
     case FMT_UT_X_C:
     case FMT_UT_X_X:
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", array subscript format 0x%x not handled yet",
+                _("DIE @ 0x%x \"%s\", array subscript format 0x%x not handled yet"),
                 DIE_ID, DIE_NAME, format);
       nexttype = dwarf_fundamental_type (current_objfile, FT_INTEGER);
       rangetype = create_range_type ((struct type *) NULL, nexttype, 0, 0);
@@ -1320,7 +1331,7 @@ decode_subscript_data_item (char *scan, char *end)
       break;
     default:
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", unknown array subscript format %x", DIE_ID,
+                _("DIE @ 0x%x \"%s\", unknown array subscript format %x"), DIE_ID,
                 DIE_NAME, format);
       nexttype = dwarf_fundamental_type (current_objfile, FT_INTEGER);
       rangetype = create_range_type ((struct type *) NULL, nexttype, 0, 0);
@@ -1360,7 +1371,7 @@ dwarf_read_array_type (struct dieinfo *dip)
     {
       /* FIXME:  Can gdb even handle column major arrays? */
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", array not row major; not handled correctly",
+                _("DIE @ 0x%x \"%s\", array not row major; not handled correctly"),
                 DIE_ID, DIE_NAME);
     }
   sub = dip->at_subscr_data;
@@ -1670,7 +1681,7 @@ enum_type (struct dieinfo *dip, struct objfile *objfile)
       && *dip->at_name != '~'
       && *dip->at_name != '.')
     {
-      TYPE_TAG_NAME (type) = obconcat (&objfile->type_obstack,
+      TYPE_TAG_NAME (type) = obconcat (&objfile->objfile_obstack,
                                       "", "", dip->at_name);
     }
   if (dip->at_byte_size != 0)
@@ -1704,15 +1715,15 @@ enum_type (struct dieinfo *dip, struct objfile *objfile)
                            objfile);
          scan += TARGET_FT_LONG_SIZE (objfile);
          list->field.name = obsavestring (scan, strlen (scan),
-                                          &objfile->type_obstack);
+                                          &objfile->objfile_obstack);
          scan += strlen (scan) + 1;
          nfields++;
          /* Handcraft a new symbol for this enum member. */
-         sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
+         sym = (struct symbol *) obstack_alloc (&objfile->objfile_obstack,
                                                 sizeof (struct symbol));
          memset (sym, 0, sizeof (struct symbol));
          DEPRECATED_SYMBOL_NAME (sym) = create_name (list->field.name,
-                                          &objfile->symbol_obstack);
+                                          &objfile->objfile_obstack);
          SYMBOL_INIT_LANGUAGE_SPECIFIC (sym, cu_language);
          SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
          SYMBOL_CLASS (sym) = LOC_CONST;
@@ -1733,7 +1744,7 @@ enum_type (struct dieinfo *dip, struct objfile *objfile)
            TYPE_FLAGS (type) |= TYPE_FLAG_UNSIGNED;
          TYPE_NFIELDS (type) = nfields;
          TYPE_FIELDS (type) = (struct field *)
-           obstack_alloc (&objfile->symbol_obstack, sizeof (struct field) * nfields);
+           obstack_alloc (&objfile->objfile_obstack, sizeof (struct field) * nfields);
          /* Copy the saved-up fields into the field vector.  */
          for (n = 0; (n < nfields) && (list != NULL); list = list->next)
            {
@@ -1777,17 +1788,11 @@ read_func_scope (struct dieinfo *dip, char *thisdie, char *enddie,
      FIXME: Add code to handle AT_abstract_origin tags properly.  */
   if (dip->at_name == NULL)
     {
-      complaint (&symfile_complaints, "DIE @ 0x%x, AT_name tag missing",
+      complaint (&symfile_complaints, _("DIE @ 0x%x, AT_name tag missing"),
                 DIE_ID);
       return;
     }
 
-  if (objfile->ei.entry_point >= dip->at_low_pc &&
-      objfile->ei.entry_point < dip->at_high_pc)
-    {
-      objfile->ei.entry_func_lowpc = dip->at_low_pc;
-      objfile->ei.entry_func_highpc = dip->at_high_pc;
-    }
   new = push_context (0, dip->at_low_pc);
   new->name = new_symbol (dip, objfile);
   list_in_scope = &local_symbols;
@@ -1883,12 +1888,6 @@ read_file_scope (struct dieinfo *dip, char *thisdie, char *enddie,
   struct cleanup *back_to;
   struct symtab *symtab;
 
-  if (objfile->ei.entry_point >= dip->at_low_pc &&
-      objfile->ei.entry_point < dip->at_high_pc)
-    {
-      objfile->ei.deprecated_entry_file_lowpc = dip->at_low_pc;
-      objfile->ei.deprecated_entry_file_highpc = dip->at_high_pc;
-    }
   set_cu_language (dip);
   if (dip->at_producer != NULL)
     {
@@ -2212,12 +2211,12 @@ locval (struct dieinfo *dip)
        case OP_DEREF2:
          /* pop, deref and push 2 bytes (as a long) */
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", OP_DEREF2 address 0x%lx not handled",
+                    _("DIE @ 0x%x \"%s\", OP_DEREF2 address 0x%lx not handled"),
                     DIE_ID, DIE_NAME, stack[stacki]);
          break;
        case OP_DEREF4: /* pop, deref and push 4 bytes (as a long) */
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", OP_DEREF4 address 0x%lx not handled",
+                    _("DIE @ 0x%x \"%s\", OP_DEREF4 address 0x%lx not handled"),
                     DIE_ID, DIE_NAME, stack[stacki]);
          break;
        case OP_ADD:            /* pop top 2 items, add, push result */
@@ -2274,7 +2273,7 @@ read_ofile_symtab (struct partial_symtab *pst)
       (bfd_bread (dbbase, dbsize, abfd) != dbsize))
     {
       xfree (dbbase);
-      error ("can't read DWARF data");
+      error (_("can't read DWARF data"));
     }
   back_to = make_cleanup (xfree, dbbase);
 
@@ -2290,7 +2289,7 @@ read_ofile_symtab (struct partial_symtab *pst)
          (bfd_bread (lnsizedata, sizeof (lnsizedata), abfd)
           != sizeof (lnsizedata)))
        {
-         error ("can't read DWARF line number table size");
+         error (_("can't read DWARF line number table size"));
        }
       lnsize = target_to_host (lnsizedata, SIZEOF_LINETBL_LENGTH,
                               GET_UNSIGNED, pst->objfile);
@@ -2299,7 +2298,7 @@ read_ofile_symtab (struct partial_symtab *pst)
          (bfd_bread (lnbase, lnsize, abfd) != lnsize))
        {
          xfree (lnbase);
-         error ("can't read DWARF line numbers");
+         error (_("can't read DWARF line numbers"));
        }
       make_cleanup (xfree, lnbase);
     }
@@ -2337,7 +2336,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst)
     {
       if (pst->readin)
        {
-         warning ("psymtab for %s already read in.  Shouldn't happen.",
+         warning (_("psymtab for %s already read in.  Shouldn't happen."),
                   pst->filename);
        }
       else
@@ -2350,6 +2349,8 @@ psymtab_to_symtab_1 (struct partial_symtab *pst)
                  /* Inform about additional files that need to be read in. */
                  if (info_verbose)
                    {
+                     /* FIXME: i18n: Need to make this a single
+                        string.  */
                      fputs_filtered (" ", gdb_stdout);
                      wrap_here ("");
                      fputs_filtered ("and ", gdb_stdout);
@@ -2369,7 +2370,7 @@ psymtab_to_symtab_1 (struct partial_symtab *pst)
              read_ofile_symtab (pst);
              if (info_verbose)
                {
-                 printf_filtered ("%d DIE's, sorting...", diecount);
+                 printf_filtered (_("%d DIE's, sorting..."), diecount);
                  wrap_here ("");
                  gdb_flush (gdb_stdout);
                }
@@ -2406,7 +2407,7 @@ dwarf_psymtab_to_symtab (struct partial_symtab *pst)
     {
       if (pst->readin)
        {
-         warning ("psymtab for %s already read in.  Shouldn't happen.",
+         warning (_("psymtab for %s already read in.  Shouldn't happen."),
                   pst->filename);
        }
       else
@@ -2417,7 +2418,7 @@ dwarf_psymtab_to_symtab (struct partial_symtab *pst)
                 disconcerting pauses.  */
              if (info_verbose)
                {
-                 printf_filtered ("Reading in symbols for %s...",
+                 printf_filtered (_("Reading in symbols for %s..."),
                                   pst->filename);
                  gdb_flush (gdb_stdout);
                }
@@ -2436,7 +2437,7 @@ dwarf_psymtab_to_symtab (struct partial_symtab *pst)
              /* Finish up the verbose info message.  */
              if (info_verbose)
                {
-                 printf_filtered ("done.\n");
+                 printf_filtered (_("done.\n"));
                  gdb_flush (gdb_stdout);
                }
            }
@@ -2800,7 +2801,7 @@ scan_compilation_units (char *thisdie, char *enddie, file_ptr dbfoff,
 
          pst->texthigh = di.at_high_pc;
          pst->read_symtab_private = (char *)
-           obstack_alloc (&objfile->psymbol_obstack,
+           obstack_alloc (&objfile->objfile_obstack,
                           sizeof (struct dwfinfo));
          DBFOFF (pst) = dbfoff;
          DBROFF (pst) = curoff;
@@ -2851,7 +2852,7 @@ new_symbol (struct dieinfo *dip, struct objfile *objfile)
 
   if (dip->at_name != NULL)
     {
-      sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
+      sym = (struct symbol *) obstack_alloc (&objfile->objfile_obstack,
                                             sizeof (struct symbol));
       OBJSTAT (objfile, n_syms++);
       memset (sym, 0, sizeof (struct symbol));
@@ -3011,11 +3012,11 @@ synthesize_typedef (struct dieinfo *dip, struct objfile *objfile,
   if (dip->at_name != NULL)
     {
       sym = (struct symbol *)
-       obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol));
+       obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
       OBJSTAT (objfile, n_syms++);
       memset (sym, 0, sizeof (struct symbol));
       DEPRECATED_SYMBOL_NAME (sym) = create_name (dip->at_name,
-                                      &objfile->symbol_obstack);
+                                      &objfile->objfile_obstack);
       SYMBOL_INIT_LANGUAGE_SPECIFIC (sym, cu_language);
       SYMBOL_TYPE (sym) = type;
       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
@@ -3187,7 +3188,7 @@ decode_modified_type (char *modifiers, unsigned int modcount, int mtype)
          break;
        default:
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", botched modified type decoding (mtype 0x%x)",
+                    _("DIE @ 0x%x \"%s\", botched modified type decoding (mtype 0x%x)"),
                     DIE_ID, DIE_NAME, mtype);
          typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
          break;
@@ -3207,12 +3208,12 @@ decode_modified_type (char *modifiers, unsigned int modcount, int mtype)
          break;
        case MOD_const:
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", type modifier 'const' ignored", DIE_ID,
+                    _("DIE @ 0x%x \"%s\", type modifier 'const' ignored"), DIE_ID,
                     DIE_NAME); /* FIXME */
          break;
        case MOD_volatile:
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", type modifier 'volatile' ignored",
+                    _("DIE @ 0x%x \"%s\", type modifier 'volatile' ignored"),
                     DIE_ID, DIE_NAME); /* FIXME */
          break;
        default:
@@ -3224,7 +3225,7 @@ decode_modified_type (char *modifiers, unsigned int modcount, int mtype)
 #endif
            {
              complaint (&symfile_complaints,
-                        "DIE @ 0x%x \"%s\", unknown type modifier %u", DIE_ID,
+                        _("DIE @ 0x%x \"%s\", unknown type modifier %u"), DIE_ID,
                         DIE_NAME, modifier);
            }
          break;
@@ -3368,7 +3369,7 @@ decode_fund_type (unsigned int fundtype)
       if (!(FT_lo_user <= fundtype && fundtype <= FT_hi_user))
        {
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", unexpected fundamental type 0x%x",
+                    _("DIE @ 0x%x \"%s\", unexpected fundamental type 0x%x"),
                     DIE_ID, DIE_NAME, fundtype);
        }
     }
@@ -3468,7 +3469,7 @@ basicdieinfo (struct dieinfo *dip, char *diep, struct objfile *objfile)
       ((diep + dip->die_length) > (dbbase + dbsize)))
     {
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", malformed DIE, bad length (%ld bytes)",
+                _("DIE @ 0x%x \"%s\", malformed DIE, bad length (%ld bytes)"),
                 DIE_ID, DIE_NAME, dip->die_length);
       dip->die_length = 0;
     }
@@ -3537,7 +3538,7 @@ completedieinfo (struct dieinfo *dip, struct objfile *objfile)
       if (nbytes == -1)
        {
          complaint (&symfile_complaints,
-                    "DIE @ 0x%x \"%s\", unknown attribute length, skipped remaining attributes",
+                    _("DIE @ 0x%x \"%s\", unknown attribute length, skipped remaining attributes"),
                     DIE_ID, DIE_NAME);
          diep = end;
          continue;
@@ -3753,7 +3754,7 @@ target_to_host (char *from, int nbytes, int signextend,   /* FIXME:  Unused */
       break;
     default:
       complaint (&symfile_complaints,
-                "DIE @ 0x%x \"%s\", no bfd support for %d byte data object",
+                _("DIE @ 0x%x \"%s\", no bfd support for %d byte data object"),
                 DIE_ID, DIE_NAME, nbytes);
       rtnval = 0;
       break;
This page took 0.030876 seconds and 4 git commands to generate.