use remote-utils facilities for baud_rate
[deliverable/binutils-gdb.git] / gdb / partial-stab.h
index 2c2c0f8cc4ffedc4adfba87441034e47157855a5..e511599b6419c1919545f1284fde92bb5e900e96 100644 (file)
@@ -1,6 +1,6 @@
 /* Shared code to pre-read a stab (dbx-style), when building a psymtab.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation,
-   Inc.
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993
+   Free Software Foundation, Inc.
 
 This file is part of GDB.
 
@@ -43,6 +43,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
          CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
          goto record_it;
 
+       case N_BSS:
        case N_BSS | N_EXT:
        case N_NBBSS | N_EXT:
         case N_SETV | N_EXT:           /* FIXME, is this in BSS? */
@@ -80,7 +81,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                  && namestring [nsl - 2] == '.')
 #ifdef GDB_TARGET_IS_HPPA
               /* some cooperation from gcc to get around ld stupidity */
-              || (namestring[0] == 'e' && !strcmp (namestring, "end_file."))
+              || (namestring[0] == 'e' && STREQ (namestring, "end_file."))
 #endif
              )
            {
@@ -108,24 +109,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                past_first_source_file = 1;
              last_o_file_start = CUR_SYMBOL_VALUE;
            }
+         else
+           goto record_it;
 #endif /* DBXREAD_ONLY */
          continue;
 
        case N_DATA:
-#ifdef DBXREAD_ONLY
          CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
-         SET_NAMESTRING ();
-         /* Check for __DYNAMIC, which is used by Sun shared libraries. 
-            Record it even if it's local, not global, so we can find it.
-            Same with virtual function tables, both global and static.  */
-         if ((namestring[8] == 'C' && (strcmp ("__DYNAMIC", namestring) == 0))
-             || VTBL_PREFIX_P ((namestring+HASH_OFFSET)))
-           {
-             record_minimal_symbol (namestring, CUR_SYMBOL_VALUE,
-                                   CUR_SYMBOL_TYPE, objfile); /* Always */
-           }
-#endif /* DBXREAD_ONLY */
-         continue;
+         goto record_it;
 
        case N_UNDF | N_EXT:
 #ifdef DBXREAD_ONLY
@@ -169,7 +160,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
            /* Lots of symbol types we can just ignore.  */
 
        case N_ABS:
-       case N_BSS:
        case N_NBDATA:
        case N_NBBSS:
          continue;
@@ -197,11 +187,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
           */
 
        case N_SO: {
-         unsigned long valu = CUR_SYMBOL_VALUE;
+         unsigned long valu;
          static int prev_so_symnum = -10;
          static int first_so_symnum;
          char *p;
-         
+
+         valu = CUR_SYMBOL_VALUE + ANOFFSET (section_offsets, SECT_OFF_TEXT);
+
          past_first_source_file = 1;
 
          if (prev_so_symnum != symnum - 1)
@@ -225,8 +217,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
          SET_NAMESTRING();
 
-         valu += ANOFFSET (section_offsets, SECT_OFF_TEXT);
-
          /* Some compilers (including gcc) emit a pair of initial N_SOs.
             The first one is a directory name; the second the file name.
             If pst exists, is empty, and has a filename ending in '/',
@@ -261,20 +251,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
          /* Mark down an include file in the current psymtab */
 
-         psymtab_include_list[includes_used++] = namestring;
-         if (includes_used >= includes_allocated)
-           {
-             char **orig = psymtab_include_list;
-
-             psymtab_include_list = (char **)
-               alloca ((includes_allocated *= 2) *
-                       sizeof (char *));
-             memcpy ((PTR)psymtab_include_list, (PTR)orig,
-                     includes_used * sizeof (char *));
-           }
+         goto record_include_file;
 
-#endif /* DBXREAD_ONLY */
+#else /* DBXREAD_ONLY */
          continue;
+#endif
 
        case N_SOL:
          /* Mark down an include file in the current psymtab */
@@ -291,12 +272,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
             things like "break c-exp.y:435" need to work (I
             suppose the psymtab_include_list could be hashed or put
             in a binary tree, if profiling shows this is a major hog).  */
-         if (pst && !strcmp (namestring, pst->filename))
+         if (pst && STREQ (namestring, pst->filename))
            continue;
          {
            register int i;
            for (i = 0; i < includes_used; i++)
-             if (!strcmp (namestring, psymtab_include_list[i]))
+             if (STREQ (namestring, psymtab_include_list[i]))
                {
                  i = -1; 
                  break;
@@ -305,6 +286,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
              continue;
          }
 
+#ifdef DBXREAD_ONLY
+       record_include_file:
+#endif
+
          psymtab_include_list[includes_used++] = namestring;
          if (includes_used >= includes_allocated)
            {
@@ -324,28 +309,70 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
        case N_ROSYM:           /* Read-only data seg var -- static.  */
        case N_NBSTS:           /* Gould nobase.  */
        case N_NBLCS:           /* symbols.  */
+       case N_FUN:
+       case N_GSYM:            /* Global (extern) variable; can be
+                                  data or bss (sigh FIXME).  */
+
+       /* Following may probably be ignored; I'll leave them here
+          for now (until I do Pascal and Modula 2 extensions).  */
+
+       case N_PC:              /* I may or may not need this; I
+                                  suspect not.  */
+       case N_M2C:             /* I suspect that I can ignore this here. */
+       case N_SCOPE:           /* Same.   */
 
          SET_NAMESTRING();
 
          p = (char *) strchr (namestring, ':');
+         if (!p)
+           continue;           /* Not a debugging symbol.   */
+
 
-         /* Skip if there is no :.  */
-         if (!p) continue;
+
+         /* Main processing section for debugging symbols which
+            the initial read through the symbol tables needs to worry
+            about.  If we reach this point, the symbol which we are
+            considering is definitely one we are interested in.
+            p must also contain the (valid) index into the namestring
+            which indicates the debugging type symbol.  */
 
          switch (p[1])
            {
+           case 'S':
+             CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
+             ADD_PSYMBOL_ADDR_TO_LIST (namestring, p - namestring,
+                                       VAR_NAMESPACE, LOC_STATIC,
+                                       objfile->static_psymbols,
+                                       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);
+             continue;
+
            case 'T':
              if (p != namestring)      /* a name is there, not just :T... */
                {
                  ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
                                       STRUCT_NAMESPACE, LOC_TYPEDEF,
-                                      objfile->static_psymbols, CUR_SYMBOL_VALUE);
+                                      objfile->static_psymbols,
+                                      CUR_SYMBOL_VALUE,
+                                      psymtab_language, objfile);
                  if (p[2] == 't')
                    {
                      /* Also a typedef with the same name.  */
                      ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
                                           VAR_NAMESPACE, LOC_TYPEDEF,
-                                          objfile->static_psymbols, CUR_SYMBOL_VALUE);
+                                          objfile->static_psymbols,
+                                          CUR_SYMBOL_VALUE, psymtab_language,
+                                          objfile);
                      p += 1;
                    }
                }
@@ -355,7 +382,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                {
                  ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
                                       VAR_NAMESPACE, LOC_TYPEDEF,
-                                      objfile->static_psymbols, CUR_SYMBOL_VALUE);
+                                      objfile->static_psymbols,
+                                      CUR_SYMBOL_VALUE,
+                                      psymtab_language, objfile);
                }
            check_enum:
              /* If this is an enumerated type, we need to
@@ -364,9 +393,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                 "enum {a, b} c;" in C, but fortunately those are
                 rare.  There is no way for GDB to find those from the
                 enum type without spending too much time on it.  Thus
-                to solve this problem, the compiler needs to put out separate
-                constant symbols ('c' N_LSYMS) for enum constants in
-                enums without names, or put out a dummy type.  */
+                to solve this problem, the compiler needs to put out the
+                enum in a nameless type.  GCC2 does this.  */
 
              /* We are looking for something of the form
                 <name> ":" ("t" | "T") [<number> "="] "e"
@@ -405,7 +433,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                         enum constants in psymtabs, just in symtabs.  */
                      ADD_PSYMBOL_TO_LIST (p, q - p,
                                           VAR_NAMESPACE, LOC_CONST,
-                                          objfile->static_psymbols, 0);
+                                          objfile->static_psymbols, 0,
+                                          psymtab_language, objfile);
                      /* Point past the name.  */
                      p = q;
                      /* Skip over the value.  */
@@ -421,68 +450,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
              /* Constant, e.g. from "const" in Pascal.  */
              ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_CONST,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
-             continue;
-           default:
-             /* Skip if the thing following the : is
-                not a letter (which indicates declaration of a local
-                variable, which we aren't interested in).  */
-             continue;
-           }
-
-       case N_FUN:
-       case N_GSYM:            /* Global (extern) variable; can be
-                                  data or bss (sigh FIXME).  */
-
-       /* Following may probably be ignored; I'll leave them here
-          for now (until I do Pascal and Modula 2 extensions).  */
-
-       case N_PC:              /* I may or may not need this; I
-                                  suspect not.  */
-       case N_M2C:             /* I suspect that I can ignore this here. */
-       case N_SCOPE:           /* Same.   */
-
-         SET_NAMESTRING();
-
-         p = (char *) strchr (namestring, ':');
-         if (!p)
-           continue;           /* Not a debugging symbol.   */
-
-
-
-         /* Main processing section for debugging symbols which
-            the initial read through the symbol tables needs to worry
-            about.  If we reach this point, the symbol which we are
-            considering is definitely one we are interested in.
-            p must also contain the (valid) index into the namestring
-            which indicates the debugging type symbol.  */
-
-         switch (p[1])
-           {
-           case 'c':
-             ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
-                                  VAR_NAMESPACE, LOC_CONST,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
-             continue;
-           case 'S':
-             CUR_SYMBOL_VALUE += ANOFFSET (section_offsets, SECT_OFF_DATA);
-             ADD_PSYMBOL_ADDR_TO_LIST (namestring, p - namestring,
-                                  VAR_NAMESPACE, LOC_STATIC,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
-             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);
-             continue;
-
-           case 't':
-             ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
-                                  VAR_NAMESPACE, LOC_TYPEDEF,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
+                                  objfile->static_psymbols, CUR_SYMBOL_VALUE,
+                                  psymtab_language, objfile);
              continue;
 
            case 'f':
@@ -499,14 +468,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #endif /* DBXREAD_ONLY */
              ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_BLOCK,
-                                  objfile->static_psymbols, CUR_SYMBOL_VALUE);
+                                  objfile->static_psymbols, CUR_SYMBOL_VALUE,
+                                  psymtab_language, objfile);
              continue;
 
              /* Global functions were ignored here, but now they
                 are put into the global psymtab like one would expect.
-                They're also in the misc fn vector... 
-                FIXME, why did it used to ignore these?  That broke
-                "i fun" on these functions.  */
+                They're also in the minimal symbol table.  */
            case 'F':
 #ifdef DBXREAD_ONLY
              /* Kludges for ELF/STABS with Sun ACC */
@@ -521,7 +489,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #endif /* DBXREAD_ONLY */
              ADD_PSYMBOL_TO_LIST (namestring, p - namestring,
                                   VAR_NAMESPACE, LOC_BLOCK,
-                                  objfile->global_psymbols, CUR_SYMBOL_VALUE);
+                                  objfile->global_psymbols, CUR_SYMBOL_VALUE,
+                                  psymtab_language, objfile);
              continue;
 
              /* Two things show up here (hopefully); static symbols of
@@ -548,6 +517,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                 Someone says sun cc puts out symbols like
                 /foo/baz/maclib::/usr/local/bin/maclib,
                 which would get here with a symbol type of ':'.  */
+             complain (&unknown_symchar_complaint, p[1]);
              continue;
            }
 
@@ -642,6 +612,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
        default:
          /* If we haven't found it yet, ignore it.  It's probably some
             new type we don't know about yet.  */
-         complain (&unknown_symtype_complaint, local_hex_string(CUR_SYMBOL_TYPE));
+         complain (&unknown_symtype_complaint,
+                   local_hex_string (CUR_SYMBOL_TYPE));
          continue;
        }
This page took 0.028202 seconds and 4 git commands to generate.