(Register and Memory Data): Break sections
[deliverable/binutils-gdb.git] / gdb / dbxread.c
index 32db167c375e7ad955576bf605d5fc4fc17da4c2..bba9995a5e281843b46b9f5986f5197a532e6595 100644 (file)
@@ -1,5 +1,5 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004.
    Free Software Foundation, Inc.
 
@@ -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.  */
 
 /* This module provides three functions: dbx_symfile_init,
    which initializes to read a symbol file; dbx_new_init, which 
@@ -56,7 +56,9 @@
 #include "demangle.h"
 #include "complaints.h"
 #include "cp-abi.h"
+
 #include "gdb_assert.h"
+#include "gdb_string.h"
 
 #include "aout/aout64.h"
 #include "aout/stab_gnu.h"     /* We always use GNU stabs, not native, now */
@@ -161,21 +163,21 @@ static int has_line_numbers;
 static void
 unknown_symtype_complaint (const char *arg1)
 {
-  complaint (&symfile_complaints, "unknown symbol type %s", arg1);
+  complaint (&symfile_complaints, _("unknown symbol type %s"), arg1);
 }
 
 static void
 lbrac_mismatch_complaint (int arg1)
 {
   complaint (&symfile_complaints,
-            "N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d", arg1);
+            _("N_LBRAC/N_RBRAC symbol mismatch at symtab pos %d"), arg1);
 }
 
 static void
 repeated_header_complaint (const char *arg1, int arg2)
 {
   complaint (&symfile_complaints,
-            "\"repeated\" header file %s not previously seen, at symtab pos %d",
+            _("\"repeated\" header file %s not previously seen, at symtab pos %d"),
             arg1, arg2);
 }
 
@@ -219,7 +221,7 @@ find_text_range (bfd * sym_bfd, struct objfile *objfile)
       }
 
   if (!found_any)
-    error ("Can't find any code sections in symbol file");
+    error (_("Can't find any code sections in symbol file"));
 
   DBX_TEXT_ADDR (objfile) = start;
   DBX_TEXT_SIZE (objfile) = end - start;
@@ -481,7 +483,7 @@ record_minimal_symbol (char *name, CORE_ADDR address, int type,
          Record it as global even if it's local, not global, so
          lookup_minimal_symbol can find it.  We don't check symbol_leading_char
          because for SunOS4 it always is '_'.  */
-      if (name[8] == 'C' && DEPRECATED_STREQ ("__DYNAMIC", name))
+      if (name[8] == 'C' && strcmp ("__DYNAMIC", name) == 0)
        ms_type = mst_data;
 
       /* Same with virtual function tables, both global and static.  */
@@ -623,9 +625,9 @@ dbx_symfile_init (struct objfile *objfile)
   unsigned char size_temp[DBX_STRINGTAB_SIZE_SIZE];
 
   /* Allocate struct to keep track of the symfile */
-  objfile->sym_stab_info = (struct dbx_symfile_info *)
+  objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *)
     xmalloc (sizeof (struct dbx_symfile_info));
-  memset (objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
+  memset (objfile->deprecated_sym_stab_info, 0, sizeof (struct dbx_symfile_info));
 
   DBX_TEXT_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
   DBX_DATA_SECTION (objfile) = bfd_get_section_by_name (sym_bfd, ".data");
@@ -641,7 +643,7 @@ dbx_symfile_init (struct objfile *objfile)
 
   text_sect = bfd_get_section_by_name (sym_bfd, ".text");
   if (!text_sect)
-    error ("Can't find .text section in symbol file");
+    error (_("Can't find .text section in symbol file"));
   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
 
@@ -703,7 +705,7 @@ dbx_symfile_init (struct objfile *objfile)
 
          if (DBX_STRINGTAB_SIZE (objfile) < sizeof (size_temp)
              || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
-           error ("ridiculous string table size (%d bytes).",
+           error (_("ridiculous string table size (%d bytes)."),
                   DBX_STRINGTAB_SIZE (objfile));
 
          DBX_STRINGTAB (objfile) =
@@ -733,7 +735,7 @@ dbx_symfile_init (struct objfile *objfile)
 static void
 dbx_symfile_finish (struct objfile *objfile)
 {
-  if (objfile->sym_stab_info != NULL)
+  if (objfile->deprecated_sym_stab_info != NULL)
     {
       if (HEADER_FILES (objfile) != NULL)
        {
@@ -747,7 +749,7 @@ dbx_symfile_finish (struct objfile *objfile)
            }
          xfree (hfiles);
        }
-      xfree (objfile->sym_stab_info);
+      xfree (objfile->deprecated_sym_stab_info);
     }
   free_header_files ();
 }
@@ -827,7 +829,7 @@ fill_symbuf (bfd *sym_bfd)
   if (nbytes < 0)
     perror_with_name (bfd_get_filename (sym_bfd));
   else if (nbytes == 0)
-    error ("Premature end of file reading symbol table");
+    error (_("Premature end of file reading symbol table"));
   symbuf_end = nbytes / symbol_size;
   symbuf_idx = 0;
   symbuf_left -= nbytes;
@@ -964,7 +966,7 @@ set_namestring (struct objfile *objfile, struct internal_nlist nlist)
   if (((unsigned) nlist.n_strx + file_string_table_offset) >=
       DBX_STRINGTAB_SIZE (objfile))
     {
-      complaint (&symfile_complaints, "bad string table offset in symbol %d",
+      complaint (&symfile_complaints, _("bad string table offset in symbol %d"),
                 symnum);
       namestring = "<bad string table offset>";
     } 
@@ -1166,7 +1168,7 @@ static void
 function_outside_compilation_unit_complaint (const char *arg1)
 {
   complaint (&symfile_complaints,
-            "function `%s' appears to be defined outside of all compilation units",
+            _("function `%s' appears to be defined outside of all compilation units"),
             arg1);
 }
 
@@ -1415,7 +1417,7 @@ read_dbx_symtab (struct objfile *objfile)
            next_file_string_table_offset =
              file_string_table_offset + nlist.n_value;
            if (next_file_string_table_offset < file_string_table_offset)
-             error ("string table offset backs up at %d", symnum);
+             error (_("string table offset backs up at %d"), symnum);
            /* FIXME -- replace error() with complaint.  */
            continue;
          }
@@ -1562,7 +1564,7 @@ read_dbx_symtab (struct objfile *objfile)
              /* FIXME: we should not get here without a PST to work on.
                 Attempt to recover.  */
              complaint (&symfile_complaints,
-                        "N_BINCL %s not in entries for any file, at symtab pos %d",
+                        _("N_BINCL %s not in entries for any file, at symtab pos %d"),
                         namestring, symnum);
              continue;
            }
@@ -1980,7 +1982,7 @@ read_dbx_symtab (struct objfile *objfile)
               time searching to the end of every string looking for
               a backslash.  */
 
-           complaint (&symfile_complaints, "unknown symbol descriptor `%c'",
+           complaint (&symfile_complaints, _("unknown symbol descriptor `%c'"),
                       p[1]);
 
            /* Ignore it; perhaps it is an extension that we don't
@@ -2146,11 +2148,13 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
   STRING_OFFSET (result) = string_table_offset;
   FILE_STRING_OFFSET (result) = file_string_table_offset;
 
+#ifdef HAVE_ELF
   /* If we're handling an ELF file, drag some section-relocation info
      for this source file out of the ELF symbol table, to compensate for
      Sun brain death.  This replaces the section_offsets in this psymtab,
      if successful.  */
   elfstab_offset_sections (objfile, result);
+#endif
 
   /* Deduce the source language from the filename for this psymtab. */
   psymtab_language = deduce_language_from_filename (filename);
@@ -2503,13 +2507,13 @@ read_ofile_symtab (struct partial_symtab *pst)
        {
          const char *tempstring = namestring;
 
-         if (DEPRECATED_STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
+         if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
            processing_gcc_compilation = 1;
-         else if (DEPRECATED_STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
+         else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
            processing_gcc_compilation = 2;
          if (tempstring[0] == bfd_get_symbol_leading_char (symfile_bfd))
            ++tempstring;
-         if (DEPRECATED_STREQN (tempstring, "__gnu_compiled", 14))
+         if (strncmp (tempstring, "__gnu_compiled", 14) == 0)
            processing_gcc_compilation = 2;
        }
 
@@ -2541,7 +2545,7 @@ read_ofile_symtab (struct partial_symtab *pst)
     fill_symbuf (abfd);
   bufp = &symbuf[symbuf_idx];
   if (bfd_h_get_8 (abfd, bufp->e_type) != N_SO)
-    error ("First symbol in segment of executable not a source symbol");
+    error (_("First symbol in segment of executable not a source symbol"));
 
   max_symnum = sym_size / symbol_size;
 
@@ -2575,9 +2579,9 @@ read_ofile_symtab (struct partial_symtab *pst)
             However, there is no reason not to accept
             the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
 
-         if (DEPRECATED_STREQ (namestring, GCC_COMPILED_FLAG_SYMBOL))
+         if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
            processing_gcc_compilation = 1;
-         else if (DEPRECATED_STREQ (namestring, GCC2_COMPILED_FLAG_SYMBOL))
+         else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
            processing_gcc_compilation = 2;
 
 #if 0
@@ -2606,8 +2610,6 @@ read_ofile_symtab (struct partial_symtab *pst)
        }
     }
 
-  current_objfile = NULL;
-
   /* In a Solaris elf file, this variable, which comes from the
      value of the N_SO symbol, will still be 0.  Luckily, text_offset,
      which comes from pst->textlow is correct. */
@@ -2623,6 +2625,8 @@ read_ofile_symtab (struct partial_symtab *pst)
   pst->symtab = end_symtab (text_offset + text_size, objfile, SECT_OFF_TEXT (objfile));
 
   end_stabs ();
+
+  current_objfile = NULL;
 }
 \f
 
@@ -2633,14 +2637,13 @@ read_ofile_symtab (struct partial_symtab *pst)
    DESC is the desc field of the ".stab" entry.
    VALU is the value field of the ".stab" entry.
    NAME is the symbol name, in our address space.
-   SECTION_OFFSETS is a set of amounts by which the sections of this object
-   file were relocated when it was loaded into memory.
-   Note that these section_offsets are not the 
-   objfile->section_offsets but the pst->section_offsets.
-   All symbols that refer
-   to memory locations need to be offset by these amounts.
-   OBJFILE is the object file from which we are reading symbols.
-   It is used in end_symtab.  */
+   SECTION_OFFSETS is a set of amounts by which the sections of this
+   object file were relocated when it was loaded into memory.  Note
+   that these section_offsets are not the objfile->section_offsets but
+   the pst->section_offsets.  All symbols that refer to memory
+   locations need to be offset by these amounts.
+   OBJFILE is the object file from which we are reading symbols.  It
+   is used in end_symtab.  */
 
 void
 process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
@@ -2648,15 +2651,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
                    struct objfile *objfile)
 {
   struct context_stack *new;
-  /* This remembers the address of the start of a function.  It is used
-     because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries are
-     relative to the current function's start address.  On systems
-     other than Solaris 2, this just holds the SECT_OFF_TEXT value, and is
-     used to relocate these symbol types rather than SECTION_OFFSETS.  */
+  /* This remembers the address of the start of a function.  It is
+     used because in Solaris 2, N_LBRAC, N_RBRAC, and N_SLINE entries
+     are relative to the current function's start address.  On systems
+     other than Solaris 2, this just holds the SECT_OFF_TEXT value,
+     and is used to relocate these symbol types rather than
+     SECTION_OFFSETS.  */
   static CORE_ADDR function_start_offset;
 
-  /* This holds the address of the start of a function, without the system
-     peculiarities of function_start_offset.  */
+  /* This holds the address of the start of a function, without the
+     system peculiarities of function_start_offset.  */
   static CORE_ADDR last_function_start;
 
   /* If this is nonzero, we've seen an N_SLINE since the start of the
@@ -2665,8 +2669,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
      value is. */
   static int sline_found_in_function = 1;
 
-  /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this source
-     file.  Used to detect the SunPRO solaris compiler.  */
+  /* If this is nonzero, we've seen a non-gcc N_OPT symbol for this
+     source file.  Used to detect the SunPRO solaris compiler.  */
   static int n_opt_found;
 
   /* The stab type used for the definition of the last function.
@@ -2674,12 +2678,15 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
   static int function_stab_type = 0;
 
   if (!block_address_function_relative)
-    /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
-       function start address, so just use the text offset.  */
-    function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+    {
+      /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
+        function start address, so just use the text offset.  */
+      function_start_offset =
+       ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+    }
 
-  /* Something is wrong if we see real data before
-     seeing a source file name.  */
+  /* Something is wrong if we see real data before seeing a source
+     file name.  */
 
   if (last_source_file == NULL && type != (unsigned char) N_SO)
     {
@@ -2697,8 +2704,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
 
       if (*name == '\000')
        {
-         /* This N_FUN marks the end of a function.  This closes off the
-            current block.  */
+         /* This N_FUN marks the end of a function.  This closes off
+            the current block.  */
 
          if (context_stack_depth <= 0)
            {
@@ -2708,8 +2715,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
 
          /* The following check is added before recording line 0 at
             end of function so as to handle hand-generated stabs
-            which may have an N_FUN stabs at the end of the function, but
-            no N_SLINE stabs.  */
+            which may have an N_FUN stabs at the end of the function,
+            but no N_SLINE stabs.  */
          if (sline_found_in_function)
            record_line (current_subfile, 0, last_function_start + valu);
 
@@ -2731,9 +2738,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
 
       sline_found_in_function = 0;
 
-      /* Relocate for dynamic loading */
+      /* Relocate for dynamic loading */
       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
-      valu = SMASH_TEXT_ADDRESS (valu);
+      valu = gdbarch_smash_text_address (current_gdbarch, valu);
       last_function_start = valu;
 
       goto define_a_symbol;
@@ -2784,16 +2791,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
        lbrac_mismatch_complaint (symnum);
 
       /* Some compilers put the variable decls inside of an
-         LBRAC/RBRAC block.  This macro should be nonzero if this
-         is true.  DESC is N_DESC from the N_RBRAC symbol.
-         GCC_P is true if we've detected the GCC_COMPILED_SYMBOL
-         or the GCC2_COMPILED_SYMBOL.  */
+         LBRAC/RBRAC block.  This macro should be nonzero if this is
+         true.  DESC is N_DESC from the N_RBRAC symbol.  GCC_P is true
+         if we've detected the GCC_COMPILED_SYMBOL or the
+         GCC2_COMPILED_SYMBOL.  */
 #if !defined (VARIABLES_INSIDE_BLOCK)
 #define VARIABLES_INSIDE_BLOCK(desc, gcc_p) 0
 #endif
 
       /* Can only use new->locals as local symbols here if we're in
-         gcc or on a machine that puts them before the lbrack.  */
+         GCC or on a machine that puts them before the lbrack.  */
       if (!VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
        {
          if (local_symbols != NULL)
@@ -2806,8 +2813,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
                 symbols within an LBRAC/RBRAC block; this complaint
                 might also help sort out problems in which
                 VARIABLES_INSIDE_BLOCK is incorrectly defined.  */
-             complaint (&symfile_complaints,
-                        "misplaced N_LBRAC entry; discarding local symbols which have no enclosing block");
+             complaint (&symfile_complaints, _("\
+misplaced N_LBRAC entry; discarding local symbols which have \
+no enclosing block"));
            }
          local_symbols = new->locals;
        }
@@ -2815,20 +2823,21 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       if (context_stack_depth
          > !VARIABLES_INSIDE_BLOCK (desc, processing_gcc_compilation))
        {
-         /* This is not the outermost LBRAC...RBRAC pair in the function,
-            its local symbols preceded it, and are the ones just recovered
-            from the context stack.  Define the block for them (but don't
-            bother if the block contains no symbols.  Should we complain
-            on blocks without symbols?  I can't think of any useful purpose
-            for them).  */
+         /* This is not the outermost LBRAC...RBRAC pair in the
+            function, its local symbols preceded it, and are the ones
+            just recovered from the context stack.  Define the block
+            for them (but don't bother if the block contains no
+            symbols.  Should we complain on blocks without symbols?
+            I can't think of any useful purpose for them).  */
          if (local_symbols != NULL)
            {
-             /* Muzzle a compiler bug that makes end < start.  (which
-                compilers?  Is this ever harmful?).  */
+             /* Muzzle a compiler bug that makes end < start.
+
+                ??? Which compilers?  Is this ever harmful?.  */
              if (new->start_addr > valu)
                {
                  complaint (&symfile_complaints,
-                            "block start larger than block end");
+                            _("block start larger than block end"));
                  new->start_addr = valu;
                }
              /* Make a block for the local symbols within.  */
@@ -2852,17 +2861,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
 
     case N_FN:
     case N_FN_SEQ:
-      /* This kind of symbol indicates the start of an object file.  */
-      /* Relocate for dynamic loading */
+      /* This kind of symbol indicates the start of an object file.
+         Relocate for dynamic loading.  */
       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
       break;
 
     case N_SO:
-      /* This type of symbol indicates the start of data
-         for one source file.
-         Finish the symbol table of the previous source file
-         (if any) and start accumulating a new symbol table.  */
-      /* Relocate for dynamic loading */
+      /* This type of symbol indicates the start of data for one
+         source file.  Finish the symbol table of the previous source
+         file (if any) and start accumulating a new symbol table.
+         Relocate for dynamic loading.  */
       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
 
       n_opt_found = 0;
@@ -2870,9 +2878,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       if (last_source_file)
        {
          /* Check if previous symbol was also an N_SO (with some
-            sanity checks).  If so, that one was actually the directory
-            name, and the current one is the real file name.
-            Patch things up. */
+            sanity checks).  If so, that one was actually the
+            directory name, and the current one is the real file
+            name.  Patch things up. */
          if (previous_stab_code == (unsigned char) N_SO)
            {
              patch_subfile_names (current_subfile, name);
@@ -2882,8 +2890,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
          end_stabs ();
        }
 
-      /* Null name means this just marks the end of text for this .o file.
-         Don't start a new symtab in this case.  */
+      /* Null name means this just marks the end of text for this .o
+         file.  Don't start a new symtab in this case.  */
       if (*name == '\000')
        break;
 
@@ -2896,11 +2904,10 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       break;
 
     case N_SOL:
-      /* This type of symbol indicates the start of data for
-         a sub-source-file, one whose contents were copied or
-         included in the compilation of the main source file
-         (whose name was given in the N_SO symbol.)  */
-      /* Relocate for dynamic loading */
+      /* This type of symbol indicates the start of data for a
+         sub-source-file, one whose contents were copied or included
+         in the compilation of the main source file (whose name was
+         given in the N_SO symbol).  Relocate for dynamic loading.  */
       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
       start_subfile (name, current_subfile->dirname);
       break;
@@ -2920,18 +2927,34 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       break;
 
     case N_SLINE:
-      /* This type of "symbol" really just records
-         one line-number -- core-address correspondence.
-         Enter it in the line list for this symbol table.  */
+      /* This type of "symbol" really just records one line-number --
+         core-address correspondence.  Enter it in the line list for
+         this symbol table.  */
 
-      /* Relocate for dynamic loading and for ELF acc fn-relative syms.  */
+      /* Relocate for dynamic loading and for ELF acc
+         function-relative symbols.  */
       valu += function_start_offset;
 
-      /* If this is the first SLINE note in the function, record it at
-        the start of the function instead of at the listed location.  */
+      /* GCC 2.95.3 emits the first N_SLINE stab somwehere in the
+        middle of the prologue instead of right at the start of the
+        function.  To deal with this we record the address for the
+        first N_SLINE stab to be the start of the function instead of
+        the listed location.  We really shouldn't to this.  When
+        compiling with optimization, this first N_SLINE stab might be
+        optimized away.  Other (non-GCC) compilers don't emit this
+        stab at all.  There is no real harm in having an extra
+        numbered line, although it can be a bit annoying for the
+        user.  However, it totally screws up our testsuite.
+
+        So for now, keep adjusting the address of the first N_SLINE
+        stab, but only for code compiled with GCC.  */
+
       if (within_function && sline_found_in_function == 0)
        {
-         record_line (current_subfile, desc, last_function_start);
+         if (processing_gcc_compilation == 2)
+           record_line (current_subfile, desc, last_function_start);
+         else
+           record_line (current_subfile, desc, valu);
          sline_found_in_function = 1;
        }
       else
@@ -2946,28 +2969,31 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       common_block_end (objfile);
       break;
 
-      /* The following symbol types need to have the appropriate offset added
-         to their value; then we process symbol definitions in the name.  */
+      /* The following symbol types need to have the appropriate
+         offset added to their value; then we process symbol
+         definitions in the name.  */
 
-    case N_STSYM:              /* Static symbol in data seg */
-    case N_LCSYM:              /* Static symbol in BSS seg */
-    case N_ROSYM:              /* Static symbol in Read-only data seg */
+    case N_STSYM:              /* Static symbol in data segment.  */
+    case N_LCSYM:              /* Static symbol in BSS segment.  */
+    case N_ROSYM:              /* Static symbol in read-only data segment.  */
       /* HORRID HACK DEPT.  However, it's Sun's furgin' fault.
-         Solaris2's stabs-in-elf makes *most* symbols relative
-         but leaves a few absolute (at least for Solaris 2.1 and version
-         2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on the fence.
-         .stab "foo:S...",N_STSYM        is absolute (ld relocates it)
-         .stab "foo:V...",N_STSYM        is relative (section base subtracted).
-         This leaves us no choice but to search for the 'S' or 'V'...
-         (or pass the whole section_offsets stuff down ONE MORE function
-         call level, which we really don't want to do).  */
+         Solaris 2's stabs-in-elf makes *most* symbols relative but
+         leaves a few absolute (at least for Solaris 2.1 and version
+         2.0.1 of the SunPRO compiler).  N_STSYM and friends sit on
+         the fence.  .stab "foo:S...",N_STSYM is absolute (ld
+         relocates it) .stab "foo:V...",N_STSYM is relative (section
+         base subtracted).  This leaves us no choice but to search for
+         the 'S' or 'V'...  (or pass the whole section_offsets stuff
+         down ONE MORE function call level, which we really don't want
+         to do).  */
       {
        char *p;
 
-       /* .o files and NLMs have non-zero text seg offsets, but don't need
-          their static syms offset in this fashion.  XXX - This is really a
-          crock that should be fixed in the solib handling code so that I
-          don't have to work around it here. */
+       /* Normal object file and NLMs have non-zero text seg offsets,
+          but don't need their static syms offset in this fashion.
+          XXX - This is really a crock that should be fixed in the
+          solib handling code so that I don't have to work around it
+          here.  */
 
        if (!symfile_relocatable)
          {
@@ -2975,20 +3001,22 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
            if (p != 0 && p[1] == 'S')
              {
                /* The linker relocated it.  We don't want to add an
-                  elfstab_offset_sections-type offset, but we *do* want
-                  to add whatever solib.c passed to symbol_file_add as
-                  addr (this is known to affect SunOS4, and I suspect ELF
-                  too).  Since elfstab_offset_sections currently does not
-                  muck with the text offset (there is no Ttext.text
+                  elfstab_offset_sections-type offset, but we *do*
+                  want to add whatever solib.c passed to
+                  symbol_file_add as addr (this is known to affect
+                  SunOS 4, and I suspect ELF too).  Since
+                  elfstab_offset_sections currently does not muck
+                  with the text offset (there is no Ttext.text
                   symbol), we can get addr from the text offset.  If
-                  elfstab_offset_sections ever starts dealing with the
-                  text offset, and we still need to do this, we need to
-                  invent a SECT_OFF_ADDR_KLUDGE or something.  */
+                  elfstab_offset_sections ever starts dealing with
+                  the text offset, and we still need to do this, we
+                  need to invent a SECT_OFF_ADDR_KLUDGE or something.  */
                valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
                goto define_a_symbol;
              }
          }
-       /* Since it's not the kludge case, re-dispatch to the right handler. */
+       /* Since it's not the kludge case, re-dispatch to the right
+           handler.  */
        switch (type)
          {
          case N_STSYM:
@@ -2998,41 +3026,43 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
          case N_ROSYM:
            goto case_N_ROSYM;
          default:
-           internal_error (__FILE__, __LINE__, "failed internal consistency check");
+           internal_error (__FILE__, __LINE__,
+                           _("failed internal consistency check"));
          }
       }
 
-    case_N_STSYM:              /* Static symbol in data seg */
-    case N_DSLINE:             /* Source line number, data seg */
+    case_N_STSYM:              /* Static symbol in data segment.  */
+    case N_DSLINE:             /* Source line number, data segment.  */
       valu += ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
       goto define_a_symbol;
 
-    case_N_LCSYM:              /* Static symbol in BSS seg */
-    case N_BSLINE:             /* Source line number, bss seg */
-      /*   N_BROWS:       overlaps with N_BSLINE */
+    case_N_LCSYM:              /* Static symbol in BSS segment.  */
+    case N_BSLINE:             /* Source line number, BSS segment.  */
+      /* N_BROWS: overlaps with N_BSLINE.  */
       valu += ANOFFSET (section_offsets, SECT_OFF_BSS (objfile));
       goto define_a_symbol;
 
-    case_N_ROSYM:              /* Static symbol in Read-only data seg */
+    case_N_ROSYM:              /* Static symbol in read-only data segment.  */
       valu += ANOFFSET (section_offsets, SECT_OFF_RODATA (objfile));
       goto define_a_symbol;
 
-    case N_ENTRY:              /* Alternate entry point */
-      /* Relocate for dynamic loading */
+    case N_ENTRY:              /* Alternate entry point */
+      /* Relocate for dynamic loading */
       valu += ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
       goto define_a_symbol;
 
-      /* The following symbol types we don't know how to process.  Handle
-         them in a "default" way, but complain to people who care.  */
+      /* The following symbol types we don't know how to process.
+         Handle them in a "default" way, but complain to people who
+         care.  */
     default:
-    case N_CATCH:              /* Exception handler catcher */
-    case N_EHDECL:             /* Exception handler name */
-    case N_PC:                 /* Global symbol in Pascal */
-    case N_M2C:                /* Modula-2 compilation unit */
-      /*   N_MOD2:        overlaps with N_EHDECL */
-    case N_SCOPE:              /* Modula-2 scope information */
-    case N_ECOML:              /* End common (local name) */
-    case N_NBTEXT:             /* Gould Non-Base-Register symbols??? */
+    case N_CATCH:              /* Exception handler catcher */
+    case N_EHDECL:             /* Exception handler name */
+    case N_PC:                 /* Global symbol in Pascal */
+    case N_M2C:                        /* Modula-2 compilation unit.  */
+      /* N_MOD2: overlaps with N_EHDECL.  */
+    case N_SCOPE:              /* Modula-2 scope information */
+    case N_ECOML:              /* End common (local name) */
+    case N_NBTEXT:             /* Gould Non-Base-Register symbols???  */
     case N_NBDATA:
     case N_NBBSS:
     case N_NBSTS:
@@ -3040,18 +3070,18 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       unknown_symtype_complaint (hex_string (type));
       /* FALLTHROUGH */
 
-      /* The following symbol types don't need the address field relocated,
-         since it is either unused, or is absolute.  */
+      /* The following symbol types don't need the address field
+         relocated, since it is either unused, or is absolute.  */
     define_a_symbol:
-    case N_GSYM:               /* Global variable */
-    case N_NSYMS:              /* Number of symbols (ultrix) */
-    case N_NOMAP:              /* No map?  (ultrix) */
-    case N_RSYM:               /* Register variable */
-    case N_DEFD:               /* Modula-2 GNU module dependency */
-    case N_SSYM:               /* Struct or union element */
-    case N_LSYM:               /* Local symbol in stack */
-    case N_PSYM:               /* Parameter variable */
-    case N_LENG:               /* Length of preceding symbol type */
+    case N_GSYM:               /* Global variable */
+    case N_NSYMS:              /* Number of symbols (Ultrix).  */
+    case N_NOMAP:              /* No map?  (Ultrix).  */
+    case N_RSYM:               /* Register variable */
+    case N_DEFD:               /* Modula-2 GNU module dependency */
+    case N_SSYM:               /* Struct or union element */
+    case N_LSYM:               /* Local symbol in stack */
+    case N_PSYM:               /* Parameter variable */
+    case N_LENG:               /* Length of preceding symbol type */
       if (name)
        {
          int deftype;
@@ -3068,29 +3098,31 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
              function_stab_type = type;
 
 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
-             /* Deal with the SunPRO 3.0 compiler which omits the address
-                from N_FUN symbols.  */
+             /* Deal with the SunPRO 3.0 compiler which omits the
+                address from N_FUN symbols.  */
              if (type == N_FUN
-                 && valu == ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)))
+                 && valu == ANOFFSET (section_offsets,
+                                      SECT_OFF_TEXT (objfile)))
                {
                  CORE_ADDR minsym_valu = 
                    find_stab_function_addr (name, last_source_file, objfile);
 
-                 /* find_stab_function_addr will return 0 if the minimal
-                    symbol wasn't found.  (Unfortunately, this might also
-                    be a valid address.)  Anyway, if it *does* return 0,
-                    it is likely that the value was set correctly to begin
-                    with... */
+                 /* The function find_stab_function_addr will return
+                    0 if the minimal symbol wasn't found.
+                    (Unfortunately, this might also be a valid
+                    address.)  Anyway, if it *does* return 0, it is
+                    likely that the value was set correctly to begin
+                    with...  */
                  if (minsym_valu != 0)
                    valu = minsym_valu;
                }
 #endif
 
              if (block_address_function_relative)
-               /* For Solaris 2.0 compilers, the block addresses and
+               /* For Solaris 2 compilers, the block addresses and
                   N_SLINE's are relative to the start of the
-                  function.  On normal systems, and when using gcc on
-                  Solaris 2.0, these addresses are just absolute, or
+                  function.  On normal systems, and when using GCC on
+                  Solaris 2, these addresses are just absolute, or
                   relative to the N_SO, depending on
                   BLOCK_ADDRESS_ABSOLUTE.  */
                function_start_offset = valu;
@@ -3100,7 +3132,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
              if (context_stack_depth > 1)
                {
                  complaint (&symfile_complaints,
-                            "unmatched N_LBRAC before symtab pos %d", symnum);
+                            _("unmatched N_LBRAC before symtab pos %d"), symnum);
                  break;
                }
 
@@ -3126,15 +3158,16 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       /* We use N_OPT to carry the gcc2_compiled flag.  Sun uses it
          for a bunch of other flags, too.  Someday we may parse their
          flags; for now we ignore theirs and hope they'll ignore ours.  */
-    case N_OPT:                /* Solaris 2:  Compiler options */
+    case N_OPT:                        /* Solaris 2: Compiler options.  */
       if (name)
        {
          if (strcmp (name, GCC2_COMPILED_FLAG_SYMBOL) == 0)
            {
              processing_gcc_compilation = 2;
 #if 0                          /* Works, but is experimental.  -fnf */
-             /* For now, stay with AUTO_DEMANGLING for g++ output, as we don't
-                know whether it will use the old style or v3 mangling.  */
+             /* For now, stay with AUTO_DEMANGLING for g++ output, as
+                we don't know whether it will use the old style or v3
+                mangling.  */
              if (AUTO_DEMANGLING)
                {
                  set_demangling_style (GNU_DEMANGLING_STYLE_STRING);
@@ -3160,12 +3193,12 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       break;
 
       /* The following symbol types can be ignored.  */
-    case N_OBJ:                /* Solaris 2:  Object file dir and name */
-    case N_PATCH:      /* Solaris2: Patch Run Time Checker.  */
-      /*   N_UNDF:                   Solaris 2:  file separator mark */
-      /*   N_UNDF: -- we will never encounter it, since we only process one
-         file's symbols at once.  */
-    case N_ENDM:               /* Solaris 2:  End of module */
+    case N_OBJ:                        /* Solaris 2: Object file dir and name.  */
+    case N_PATCH:              /* Solaris 2: Patch Run Time Checker.  */
+      /* N_UNDF:                   Solaris 2: File separator mark.  */
+      /* N_UNDF: -- we will never encounter it, since we only process
+         one file's symbols at once.  */
+    case N_ENDM:               /* Solaris 2: End of module.  */
     case N_ALIAS:              /* SunPro F77: alias name, ignore for now.  */
       break;
     }
@@ -3177,9 +3210,9 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
      symbol.  */
   if (name[0] == '#')
     {
-      /* Initialize symbol reference names and determine if this is 
-         a definition.  If symbol reference is being defined, go 
-         ahead and add it.  Otherwise, just return sym. */
+      /* Initialize symbol reference names and determine if this is a
+         definition.  If a symbol reference is being defined, go ahead
+         and add it.  Otherwise, just return.  */
 
       char *s = name;
       int refnum;
@@ -3196,7 +3229,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       name = s;
     }
 
-
   previous_stab_code = type;
 }
 \f
@@ -3239,7 +3271,7 @@ coffstab_build_psymtabs (struct objfile *objfile, int mainline,
 
   /* There is already a dbx_symfile_info allocated by our caller.
      It might even contain some info from the coff symtab to help us.  */
-  info = objfile->sym_stab_info;
+  info = objfile->deprecated_sym_stab_info;
 
   DBX_TEXT_ADDR (objfile) = textaddr;
   DBX_TEXT_SIZE (objfile) = textsize;
@@ -3249,7 +3281,7 @@ coffstab_build_psymtabs (struct objfile *objfile, int mainline,
   DBX_STRINGTAB_SIZE (objfile) = stabstrsize;
 
   if (stabstrsize > bfd_get_size (sym_bfd))
-    error ("ridiculous string table size: %d bytes", stabstrsize);
+    error (_("ridiculous string table size: %d bytes"), stabstrsize);
   DBX_STRINGTAB (objfile) = (char *)
     obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
   OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
@@ -3331,7 +3363,7 @@ elfstab_build_psymtabs (struct objfile *objfile, int mainline,
 
   /* There is already a dbx_symfile_info allocated by our caller.
      It might even contain some info from the ELF symtab to help us.  */
-  info = objfile->sym_stab_info;
+  info = objfile->deprecated_sym_stab_info;
 
   /* Find the first and last text address.  dbx_symfile_read seems to
      want this.  */
@@ -3346,7 +3378,7 @@ elfstab_build_psymtabs (struct objfile *objfile, int mainline,
   DBX_STAB_SECTION (objfile) = stabsect;
 
   if (stabstrsize > bfd_get_size (sym_bfd))
-    error ("ridiculous string table size: %d bytes", stabstrsize);
+    error (_("ridiculous string table size: %d bytes"), stabstrsize);
   DBX_STRINGTAB (objfile) = (char *)
     obstack_alloc (&objfile->objfile_obstack, stabstrsize + 1);
   OBJSTAT (objfile, sz_strtab += stabstrsize + 1);
@@ -3420,16 +3452,16 @@ stabsect_build_psymtabs (struct objfile *objfile, int mainline, char *stab_name,
     return;
 
   if (!stabstrsect)
-    error ("stabsect_build_psymtabs:  Found stabs (%s), but not string section (%s)",
+    error (_("stabsect_build_psymtabs:  Found stabs (%s), but not string section (%s)"),
           stab_name, stabstr_name);
 
-  objfile->sym_stab_info = (struct dbx_symfile_info *)
+  objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *)
     xmalloc (sizeof (struct dbx_symfile_info));
-  memset (objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
+  memset (objfile->deprecated_sym_stab_info, 0, sizeof (struct dbx_symfile_info));
 
   text_sect = bfd_get_section_by_name (sym_bfd, text_name);
   if (!text_sect)
-    error ("Can't find %s section in symbol file", text_name);
+    error (_("Can't find %s section in symbol file"), text_name);
   DBX_TEXT_ADDR (objfile) = bfd_section_vma (sym_bfd, text_sect);
   DBX_TEXT_SIZE (objfile) = bfd_section_size (sym_bfd, text_sect);
 
@@ -3440,7 +3472,7 @@ stabsect_build_psymtabs (struct objfile *objfile, int mainline, char *stab_name,
   DBX_SYMTAB_OFFSET (objfile) = stabsect->filepos;     /* XXX - FIXME: POKING INSIDE BFD DATA STRUCTURES */
 
   if (DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
-    error ("ridiculous string table size: %d bytes", DBX_STRINGTAB_SIZE (objfile));
+    error (_("ridiculous string table size: %d bytes"), DBX_STRINGTAB_SIZE (objfile));
   DBX_STRINGTAB (objfile) = (char *)
     obstack_alloc (&objfile->objfile_obstack, DBX_STRINGTAB_SIZE (objfile) + 1);
   OBJSTAT (objfile, sz_strtab += DBX_STRINGTAB_SIZE (objfile) + 1);
@@ -3475,6 +3507,8 @@ static struct sym_fns aout_sym_fns =
   dbx_symfile_read,            /* sym_read: read a symbol file into symtab */
   dbx_symfile_finish,          /* sym_finish: finished with file, cleanup */
   default_symfile_offsets,     /* sym_offsets: parse user's offsets to internal form */
+  default_symfile_segments,    /* sym_segments: Get segment information from
+                                  a file.  */
   NULL                         /* next: pointer to next struct sym_fns */
 };
 
This page took 0.036587 seconds and 4 git commands to generate.