Thu May 21 13:14:25 1998 John Metzler <jmetzler@cygnus.com>
[deliverable/binutils-gdb.git] / gdb / partial-stab.h
index 9fe653b7a15a7d79a6102de4baae378b59272ef6..c494a07484d7b33a600f856de3b7fdf3e46bb43d 100644 (file)
@@ -106,7 +106,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                               symnum * symbol_size,
                               CUR_SYMBOL_VALUE > pst->texthigh
                                 ? CUR_SYMBOL_VALUE : pst->texthigh, 
-                              dependency_list, dependencies_used);
+                              dependency_list, dependencies_used, textlow_not_set);
                  pst = (struct partial_symtab *) 0;
                  includes_used = 0;
                  dependencies_used = 0;
@@ -145,7 +145,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
        case N_UNDF:
 #ifdef DBXREAD_ONLY
-         if (processing_acc_compilation && bufp->n_strx == 1) {
+         if (processing_acc_compilation && CUR_SYMBOL_STRX == 1) {
            /* Deal with relative offsets in the string table
               used in ELF+STAB under Solaris.  If we want to use the
               n_strx field, which contains the name of the file,
@@ -154,7 +154,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
            past_first_source_file = 1;
            file_string_table_offset = next_file_string_table_offset;
            next_file_string_table_offset =
-             file_string_table_offset + bufp->n_value;
+             file_string_table_offset + CUR_SYMBOL_VALUE;
            if (next_file_string_table_offset < file_string_table_offset)
              error ("string table offset backs up at %d", symnum);
   /* FIXME -- replace error() with complaint.  */
@@ -197,16 +197,27 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
          static int prev_so_symnum = -10;
          static int first_so_symnum;
          char *p;
+         int prev_textlow_not_set;
 
          valu = CUR_SYMBOL_VALUE + ANOFFSET (section_offsets, SECT_OFF_TEXT);
+
+         prev_textlow_not_set = textlow_not_set;
+
 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
          /* A zero value is probably an indication for the SunPRO 3.0
             compiler. end_psymtab explicitly tests for zero, so
             don't relocate it.  */
+
          if (CUR_SYMBOL_VALUE == 0)
-           valu = 0;
+           {
+             textlow_not_set = 1;
+             valu = 0;
+           }
+         else
+           textlow_not_set = 0;
+#else
+         textlow_not_set = 0;
 #endif
-
          past_first_source_file = 1;
 
          if (prev_so_symnum != symnum - 1)
@@ -218,7 +229,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                  END_PSYMTAB (pst, psymtab_include_list, includes_used,
                               symnum * symbol_size,
                               valu > pst->texthigh ? valu : pst->texthigh,
-                              dependency_list, dependencies_used);
+                              dependency_list, dependencies_used,
+                              prev_textlow_not_set);
                  pst = (struct partial_symtab *) 0;
                  includes_used = 0;
                  dependencies_used = 0;
@@ -278,6 +290,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                    || psymtab_language != language_cplus))
              psymtab_language = tmp_language;
 
+           if (pst == NULL)
+             {
+               /* FIXME: we should not get here without a PST to work on.
+                  Attempt to recover.  */
+               complain (&unclaimed_bincl_complaint, namestring, symnum);
+               continue;
+             }
            add_bincl_to_list (pst, namestring, CUR_SYMBOL_VALUE);
 
            /* Mark down an include file in the current psymtab */
@@ -370,7 +389,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #ifdef DBXREAD_ONLY
          /* See if this is an end of function stab.  */
-         if (CUR_SYMBOL_TYPE == N_FUN && ! strcmp (namestring, ""))
+         if (CUR_SYMBOL_TYPE == N_FUN && *namestring == '\000')
            {
              unsigned long valu;
 
@@ -554,9 +573,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
              /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
                 value for the bottom of the text seg in those cases. */
-             if (pst && pst->textlow == 0 && !symfile_relocatable)
-               pst->textlow =
-                 find_stab_function_addr (namestring, pst, objfile);
+             if (pst && textlow_not_set)
+               {
+                 pst->textlow =
+                   find_stab_function_addr (namestring, pst, objfile);
+                 textlow_not_set = 0;
+               }
 #endif
 #if 0
              if (startup_file_end == 0)
@@ -568,11 +590,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                 the bounds created by N_SO symbols.  If that's the case
                 use the address of this function as the low bound for
                 the partial symbol table.  */
-             if (pst->textlow == 0
+             if (textlow_not_set
                  || (CUR_SYMBOL_VALUE < pst->textlow
                      && CUR_SYMBOL_VALUE
                           != ANOFFSET (section_offsets, SECT_OFF_TEXT)))
-               pst->textlow = CUR_SYMBOL_VALUE;
+               {
+                 pst->textlow = CUR_SYMBOL_VALUE;
+                 textlow_not_set = 0;
+               }
 #endif /* DBXREAD_ONLY */
              add_psymbol_to_list (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_BLOCK,
@@ -594,9 +619,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
              /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
                 value for the bottom of the text seg in those cases. */
-             if (pst && pst->textlow == 0 && !symfile_relocatable)
-               pst->textlow =
-                 find_stab_function_addr (namestring, pst, objfile);
+             if (pst && textlow_not_set)
+               {
+                 pst->textlow =
+                   find_stab_function_addr (namestring, pst, objfile);
+                 textlow_not_set = 0;
+               }
 #endif
 #if 0
              if (startup_file_end == 0)
@@ -607,11 +635,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                 the bounds created by N_SO symbols.  If that's the case
                 use the address of this function as the low bound for
                 the partial symbol table.  */
-             if (pst->textlow == 0
+             if (textlow_not_set
                  || (CUR_SYMBOL_VALUE < pst->textlow
                      && CUR_SYMBOL_VALUE
                           != ANOFFSET (section_offsets, SECT_OFF_TEXT)))
-               pst->textlow = CUR_SYMBOL_VALUE;
+               {
+                 pst->textlow = CUR_SYMBOL_VALUE;
+                 textlow_not_set = 0;
+               }
 #endif /* DBXREAD_ONLY */
              add_psymbol_to_list (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_BLOCK,
@@ -635,6 +666,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
            case '8':
            case '9':
            case '-':
+           case '#':   /* for symbol identification (used in live ranges) */
           /* added to support cfront stabs strings */
            case 'Z':   /* for definition continuations */
            case 'P':   /* for prototypes */
@@ -728,7 +760,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
              END_PSYMTAB (pst, psymtab_include_list, includes_used,
                           symnum * symbol_size,
                           (CORE_ADDR) 0,
-                          dependency_list, dependencies_used);
+                          dependency_list, dependencies_used, textlow_not_set);
              pst = (struct partial_symtab *) 0;
              includes_used = 0;
              dependencies_used = 0;
This page took 0.025351 seconds and 4 git commands to generate.