Previously, the size of pointers was taken from the hosts pointer size. Now, it is...
[deliverable/binutils-gdb.git] / gdb / partial-stab.h
index a91811d240763195128a147033cc8c858a56c0f2..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;
 
@@ -404,39 +423,39 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #ifdef STATIC_TRANSFORM_NAME
              namestring = STATIC_TRANSFORM_NAME (namestring);
 #endif
-             ADD_PSYMBOL_ADDR_TO_LIST (namestring, p - namestring,
-                                       VAR_NAMESPACE, LOC_STATIC,
-                                       objfile->static_psymbols,
-                                       CUR_SYMBOL_VALUE,
-                                       psymtab_language, objfile);
+             add_psymbol_to_list (namestring, p - namestring,
+                                  VAR_NAMESPACE, LOC_STATIC,
+                                  &objfile->static_psymbols,
+                                  0, CUR_SYMBOL_VALUE,
+                                  psymtab_language, objfile);
              continue;
            case 'G':
              CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
              /* The addresses in these entries are reported to be
                 wrong.  See the code that reads 'G's for symtabs. */
-             ADD_PSYMBOL_ADDR_TO_LIST (namestring, p - namestring,
-                                       VAR_NAMESPACE, LOC_STATIC,
-                                       objfile->global_psymbols,
-                                       CUR_SYMBOL_VALUE,
-                                       psymtab_language, objfile);
+             add_psymbol_to_list (namestring, p - namestring,
+                                  VAR_NAMESPACE, LOC_STATIC,
+                                  &objfile->global_psymbols,
+                                  0, CUR_SYMBOL_VALUE,
+                                  psymtab_language, objfile);
              continue;
 
            case 'T':
              if (p != namestring)      /* a name is there, not just :T... */
                {
-                 ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+                 add_psymbol_to_list (namestring, p - namestring,
                                       STRUCT_NAMESPACE, LOC_TYPEDEF,
-                                      objfile->static_psymbols,
-                                      CUR_SYMBOL_VALUE,
+                                      &objfile->static_psymbols,
+                                      CUR_SYMBOL_VALUE, 0,
                                       psymtab_language, objfile);
                  if (p[2] == 't')
                    {
                      /* Also a typedef with the same name.  */
-                     ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+                     add_psymbol_to_list (namestring, p - namestring,
                                           VAR_NAMESPACE, LOC_TYPEDEF,
-                                          objfile->static_psymbols,
-                                          CUR_SYMBOL_VALUE, psymtab_language,
-                                          objfile);
+                                          &objfile->static_psymbols,
+                                          CUR_SYMBOL_VALUE, 0,
+                                          psymtab_language, objfile);
                      p += 1;
                    }
                  /* The semantics of C++ state that "struct foo { ... }"
@@ -447,21 +466,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                  else if (psymtab_language == language_cplus)
                   {
                      /* Also a typedef with the same name.  */
-                     ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+                     add_psymbol_to_list (namestring, p - namestring,
                                           VAR_NAMESPACE, LOC_TYPEDEF,
-                                          objfile->static_psymbols,
-                                          CUR_SYMBOL_VALUE, psymtab_language,
-                                          objfile);
+                                          &objfile->static_psymbols,
+                                          CUR_SYMBOL_VALUE, 0,
+                                          psymtab_language, objfile);
                   }
                }
              goto check_enum;
            case 't':
              if (p != namestring)      /* a name is there, not just :T... */
                {
-                 ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+                 add_psymbol_to_list (namestring, p - namestring,
                                       VAR_NAMESPACE, LOC_TYPEDEF,
-                                      objfile->static_psymbols,
-                                      CUR_SYMBOL_VALUE,
+                                      &objfile->static_psymbols,
+                                      CUR_SYMBOL_VALUE, 0,
                                       psymtab_language, objfile);
                }
            check_enum:
@@ -520,10 +539,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
                        ;
                      /* Note that the value doesn't matter for
                         enum constants in psymtabs, just in symtabs.  */
-                     ADD_PSYMBOL_TO_LIST (p, q - p,
+                     add_psymbol_to_list (p, q - p,
                                           VAR_NAMESPACE, LOC_CONST,
-                                          objfile->static_psymbols, 0,
-                                          psymtab_language, objfile);
+                                          &objfile->static_psymbols, 0,
+                                          0, psymtab_language, objfile);
                      /* Point past the name.  */
                      p = q;
                      /* Skip over the value.  */
@@ -537,10 +556,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
              continue;
            case 'c':
              /* Constant, e.g. from "const" in Pascal.  */
-             ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
+             add_psymbol_to_list (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_CONST,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE,
-                                  psymtab_language, objfile);
+                                  &objfile->static_psymbols, CUR_SYMBOL_VALUE,
+                                  0, psymtab_language, objfile);
              continue;
 
            case 'f':
@@ -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,16 +590,19 @@ 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,
+             add_psymbol_to_list (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_BLOCK,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE,
-                                  psymtab_language, objfile);
+                                  &objfile->static_psymbols, CUR_SYMBOL_VALUE,
+                                  0, psymtab_language, objfile);
              continue;
 
              /* Global functions were ignored here, but now they
@@ -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,16 +635,19 @@ 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,
+             add_psymbol_to_list (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_BLOCK,
-                                  objfile->global_psymbols, CUR_SYMBOL_VALUE,
-                                  psymtab_language, objfile);
+                                  &objfile->global_psymbols, CUR_SYMBOL_VALUE,
+                                  0, psymtab_language, objfile);
              continue;
 
              /* Two things show up here (hopefully); static symbols of
@@ -635,6 +666,10 @@ 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 */
              continue;
 
            case ':':
@@ -725,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.037474 seconds and 4 git commands to generate.