2004-08-13 Michael Chastain <mec.gnu@mindspring.com>
[deliverable/binutils-gdb.git] / gdb / stabsread.c
index 3fa1fea0864d31fbaeca9ae2e6d8c88fed866afb..e91a98090521ef30f0ea70d73158ef76b388f841 100644 (file)
@@ -1,7 +1,8 @@
 /* Support routines for decoding "stabs" debugging information format.
-   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
+   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
+   Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -89,8 +90,6 @@ static void
 read_one_struct_field (struct field_info *, char **, char *,
                       struct type *, struct objfile *);
 
-static char *get_substring (char **, int);
-
 static struct type *dbx_alloc_type (int[2], struct objfile *);
 
 static long read_huge_number (char **, int, int *);
@@ -156,18 +155,8 @@ read_cpp_abbrev (struct field_info *, char **, struct type *,
 
 static char *find_name_end (char *name);
 
-static void add_live_range (struct objfile *, struct symbol *, CORE_ADDR,
-                           CORE_ADDR);
-
-static int resolve_live_range (struct objfile *, struct symbol *, char *);
-
 static int process_reference (char **string);
 
-static CORE_ADDR ref_search_value (int refnum);
-
-static int resolve_symbol_reference (struct objfile *, struct symbol *,
-                                    char *);
-
 void stabsread_clear_cache (void);
 
 static const char vptr_name[] = "_vptr$";
@@ -189,11 +178,11 @@ invalid_cpp_abbrev_complaint (const char *arg1)
 }
 
 static void
-reg_value_complaint (int arg1, int arg2, const char *arg3)
+reg_value_complaint (int regnum, int num_regs, const char *sym)
 {
   complaint (&symfile_complaints,
-            "register number %d too large (max %d) in symbol %s", arg1, arg2,
-            arg3);
+            "register number %d too large (max %d) in symbol %s",
+             regnum, num_regs - 1, sym);
 }
 
 static void
@@ -202,12 +191,6 @@ stabs_general_complaint (const char *arg1)
   complaint (&symfile_complaints, "%s", arg1);
 }
 
-static void
-lrs_general_complaint (const char *arg1)
-{
-  complaint (&symfile_complaints, "%s", arg1);
-}
-
 /* Make a list of forward references which haven't been defined.  */
 
 static struct type **undef_types;
@@ -396,14 +379,14 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
                 ld will remove it from the executable.  There is then
                 a N_GSYM stab for it, but no regular (C_EXT) symbol.  */
              sym = (struct symbol *)
-               obstack_alloc (&objfile->symbol_obstack,
+               obstack_alloc (&objfile->objfile_obstack,
                               sizeof (struct symbol));
 
              memset (sym, 0, sizeof (struct symbol));
              SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
              SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
              DEPRECATED_SYMBOL_NAME (sym) =
-               obsavestring (name, pp - name, &objfile->symbol_obstack);
+               obsavestring (name, pp - name, &objfile->objfile_obstack);
              pp += 2;
              if (*(pp - 1) == 'F' || *(pp - 1) == 'f')
                {
@@ -475,109 +458,6 @@ read_type_number (char **pp, int *typenums)
 #define VISIBILITY_PUBLIC      '2'     /* Stabs character for public field */
 #define VISIBILITY_IGNORE      '9'     /* Optimized out or zero length */
 
-/* This routine fixes up symbol references/aliases to point to the original
-   symbol definition.  Returns 0 on failure, non-zero on success.  */
-
-static int
-resolve_symbol_reference (struct objfile *objfile, struct symbol *sym, char *p)
-{
-  int refnum;
-  struct symbol *ref_sym = 0;
-  struct alias_list *alias;
-
-  /* If this is not a symbol reference return now.  */
-  if (*p != '#')
-    return 0;
-
-  /* Use "#<num>" as the name; we'll fix the name later.
-     We stored the original symbol name as "#<id>=<name>"
-     so we can now search for "#<id>" to resolving the reference.
-     We'll fix the names later by removing the "#<id>" or "#<id>=" */
-
-/*---------------------------------------------------------*/
-  /* Get the reference id number, and 
-     advance p past the names so we can parse the rest. 
-     eg: id=2 for p : "2=", "2=z:r(0,1)" "2:r(0,1);l(#5,#6),l(#7,#4)" */
-/*---------------------------------------------------------*/
-
-  /* This gets reference name from string.  sym may not have a name. */
-
-  /* Get the reference number associated with the reference id in the
-     gdb stab string.  From that reference number, get the main/primary
-     symbol for this alias.  */
-  refnum = process_reference (&p);
-  ref_sym = ref_search (refnum);
-  if (!ref_sym)
-    {
-      lrs_general_complaint ("symbol for reference not found");
-      return 0;
-    }
-
-  /* Parse the stab of the referencing symbol
-     now that we have the referenced symbol.
-     Add it as a new symbol and a link back to the referenced symbol.
-     eg: p : "=", "=z:r(0,1)" ":r(0,1);l(#5,#6),l(#7,#4)" */
-
-
-  /* If the stab symbol table and string contain:
-     RSYM   0      5      00000000 868    #15=z:r(0,1)
-     LBRAC  0      0      00000000 899    #5=
-     SLINE  0      16     00000003 923    #6=
-     Then the same symbols can be later referenced by:
-     RSYM   0      5      00000000 927    #15:r(0,1);l(#5,#6)
-     This is used in live range splitting to:
-     1) specify that a symbol (#15) is actually just a new storage 
-     class for a symbol (#15=z) which was previously defined.
-     2) specify that the beginning and ending ranges for a symbol 
-     (#15) are the values of the beginning (#5) and ending (#6) 
-     symbols. */
-
-  /* Read number as reference id.
-     eg: p : "=", "=z:r(0,1)" ":r(0,1);l(#5,#6),l(#7,#4)" */
-  /* FIXME! Might I want to use SYMBOL_CLASS (sym) = LOC_OPTIMIZED_OUT;
-     in case of "l(0,0)"? */
-
-/*--------------------------------------------------*/
-  /* Add this symbol to the reference list.           */
-/*--------------------------------------------------*/
-
-  alias = (struct alias_list *) obstack_alloc (&objfile->type_obstack,
-                                              sizeof (struct alias_list));
-  if (!alias)
-    {
-      lrs_general_complaint ("Unable to allocate alias list memory");
-      return 0;
-    }
-
-  alias->next = 0;
-  alias->sym = sym;
-
-  if (!SYMBOL_ALIASES (ref_sym))
-    {
-      SYMBOL_ALIASES (ref_sym) = alias;
-    }
-  else
-    {
-      struct alias_list *temp;
-
-      /* Get to the end of the list.  */
-      for (temp = SYMBOL_ALIASES (ref_sym);
-          temp->next;
-          temp = temp->next)
-       ;
-      temp->next = alias;
-    }
-
-  /* Want to fix up name so that other functions (eg. valops)
-     will correctly print the name.
-     Don't add_symbol_to_list so that lookup_symbol won't find it.
-     nope... needed for fixups. */
-  DEPRECATED_SYMBOL_NAME (sym) = DEPRECATED_SYMBOL_NAME (ref_sym);
-
-  /* Done!  */
-  return 1;
-}
-
 /* Structure for storing pointers to reference definitions for fast lookup 
    during "process_later". */
 
@@ -644,16 +524,6 @@ ref_search (int refnum)
   return ref_map[refnum].sym;
 }
 
-/* Return value for the reference REFNUM.  */
-
-static CORE_ADDR
-ref_search_value (int refnum)
-{
-  if (refnum < 0 || refnum > ref_count)
-    return 0;
-  return ref_map[refnum].value;
-}
-
 /* Parse a reference id in STRING and return the resulting
    reference number.  Move STRING beyond the reference id.  */
 
@@ -742,7 +612,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
   nameless = (p == string || ((string[0] == ' ') && (string[1] == ':')));
 
   current_symbol = sym = (struct symbol *)
-    obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol));
+    obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
   memset (sym, 0, sizeof (struct symbol));
 
   switch (type & N_TYPE)
@@ -776,7 +646,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
        {
        case 't':
          DEPRECATED_SYMBOL_NAME (sym) = obsavestring ("this", strlen ("this"),
-                                           &objfile->symbol_obstack);
+                                           &objfile->objfile_obstack);
          break;
 
        case 'v':               /* $vtbl_ptr_type */
@@ -785,7 +655,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 
        case 'e':
          DEPRECATED_SYMBOL_NAME (sym) = obsavestring ("eh_throw", strlen ("eh_throw"),
-                                           &objfile->symbol_obstack);
+                                           &objfile->objfile_obstack);
          break;
 
        case '_':
@@ -804,41 +674,6 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          goto normal;          /* Do *something* with it */
        }
     }
-  else if (string[0] == '#')
-    {
-      /* Special GNU C extension for referencing symbols.  */
-      char *s;
-      int refnum, nlen;
-
-      /* If STRING defines a new reference id, then add it to the
-         reference map.  Else it must be referring to a previously
-         defined symbol, so add it to the alias list of the previously
-         defined symbol.  */
-      s = string;
-      refnum = symbol_reference_defined (&s);
-      if (refnum >= 0)
-       ref_add (refnum, sym, string, SYMBOL_VALUE (sym));
-      else if (!resolve_symbol_reference (objfile, sym, string))
-       return NULL;
-
-      /* S..P contains the name of the symbol.  We need to store
-         the correct name into DEPRECATED_SYMBOL_NAME.  */
-      nlen = p - s;
-      if (refnum >= 0)
-       {
-         if (nlen > 0)
-           SYMBOL_SET_NAMES (sym, s, nlen, objfile);
-         else
-           /* FIXME! Want DEPRECATED_SYMBOL_NAME (sym) = 0;
-              Get error if leave name 0.  So give it something. */
-           {
-             nlen = p - string;
-             SYMBOL_SET_NAMES (sym, string, nlen, objfile);
-           }
-       }
-      /* Advance STRING beyond the reference id.  */
-      string = s;
-    }
   else
     {
     normal:
@@ -903,7 +738,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            SYMBOL_TYPE (sym) = lookup_fundamental_type (objfile,
                                                         FT_DBL_PREC_FLOAT);
            dbl_valu = (char *)
-             obstack_alloc (&objfile->symbol_obstack,
+             obstack_alloc (&objfile->objfile_obstack,
                             TYPE_LENGTH (SYMBOL_TYPE (sym)));
            store_typed_floating (dbl_valu, SYMBOL_TYPE (sym), d);
            SYMBOL_VALUE_BYTES (sym) = dbl_valu;
@@ -1143,61 +978,17 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
              init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
                         TYPE_FLAG_UNSIGNED, "unsigned int", NULL);
 
-         if (BELIEVE_PCC_PROMOTION_TYPE)
+         /* If PCC says a parameter is a short or a char, it is
+            really an int.  */
+         if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type)
+             && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT)
            {
-             /* This is defined on machines (e.g. sparc) where we
-                should believe the type of a PCC 'short' argument,
-                but shouldn't believe the address (the address is the
-                address of the corresponding int).
-
-                My guess is that this correction, as opposed to
-                changing the parameter to an 'int' (as done below,
-                for PCC on most machines), is the right thing to do
-                on all machines, but I don't want to risk breaking
-                something that already works.  On most PCC machines,
-                the sparc problem doesn't come up because the calling
-                function has to zero the top bytes (not knowing
-                whether the called function wants an int or a short),
-                so there is little practical difference between an
-                int and a short (except perhaps what happens when the
-                GDB user types "print short_arg = 0x10000;").
-
-                Hacked for SunOS 4.1 by gnu@cygnus.com.  In 4.1, the
-                compiler actually produces the correct address (we
-                don't need to fix it up).  I made this code adapt so
-                that it will offset the symbol if it was pointing at
-                an int-aligned location and not otherwise.  This way
-                you can use the same gdb for 4.0.x and 4.1 systems.
-
-                If the parameter is shorter than an int, and is
-                integral (e.g. char, short, or unsigned equivalent),
-                and is claimed to be passed on an integer boundary,
-                don't believe it!  Offset the parameter's address to
-                the tail-end of that integer.  */
-
-             if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type)
-                 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT
-             && 0 == SYMBOL_VALUE (sym) % TYPE_LENGTH (pcc_promotion_type))
-               {
-                 SYMBOL_VALUE (sym) += TYPE_LENGTH (pcc_promotion_type)
-                   - TYPE_LENGTH (SYMBOL_TYPE (sym));
-               }
-             break;
-           }
-         else
-           {
-             /* If PCC says a parameter is a short or a char,
-                it is really an int.  */
-             if (TYPE_LENGTH (SYMBOL_TYPE (sym)) < TYPE_LENGTH (pcc_promotion_type)
-                 && TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_INT)
-               {
-                 SYMBOL_TYPE (sym) =
-                   TYPE_UNSIGNED (SYMBOL_TYPE (sym))
-                   ? pcc_unsigned_promotion_type
-                   : pcc_promotion_type;
-               }
-             break;
+             SYMBOL_TYPE (sym) =
+               TYPE_UNSIGNED (SYMBOL_TYPE (sym))
+               ? pcc_unsigned_promotion_type
+               : pcc_promotion_type;
            }
+         break;
        }
 
     case 'P':
@@ -1264,17 +1055,15 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 
          if (local_symbols
              && local_symbols->nsyms > 0
-#ifndef USE_REGISTER_NOT_ARG
              && gdbarch_stabs_argument_has_addr (current_gdbarch,
-                                                 SYMBOL_TYPE (sym))
-#endif
-           )
+                                                 SYMBOL_TYPE (sym)))
            {
              struct symbol *prev_sym;
              prev_sym = local_symbols->symbol[local_symbols->nsyms - 1];
              if ((SYMBOL_CLASS (prev_sym) == LOC_REF_ARG
                   || SYMBOL_CLASS (prev_sym) == LOC_ARG)
-                 && STREQ (DEPRECATED_SYMBOL_NAME (prev_sym), DEPRECATED_SYMBOL_NAME (sym)))
+                 && strcmp (DEPRECATED_SYMBOL_NAME (prev_sym),
+                            DEPRECATED_SYMBOL_NAME (sym)) == 0)
                {
                  SYMBOL_CLASS (prev_sym) = LOC_REGPARM;
                  /* Use the type from the LOC_REGISTER; that is the type
@@ -1418,21 +1207,21 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
       if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
        TYPE_TAG_NAME (SYMBOL_TYPE (sym))
-         = obconcat (&objfile->type_obstack, "", "", DEPRECATED_SYMBOL_NAME (sym));
+         = obconcat (&objfile->objfile_obstack, "", "", DEPRECATED_SYMBOL_NAME (sym));
       add_symbol_to_list (sym, &file_symbols);
 
       if (synonym)
        {
          /* Clone the sym and then modify it. */
          struct symbol *typedef_sym = (struct symbol *)
-         obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol));
+         obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
          *typedef_sym = *sym;
          SYMBOL_CLASS (typedef_sym) = LOC_TYPEDEF;
          SYMBOL_VALUE (typedef_sym) = valu;
          SYMBOL_DOMAIN (typedef_sym) = VAR_DOMAIN;
          if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
            TYPE_NAME (SYMBOL_TYPE (sym))
-             = obconcat (&objfile->type_obstack, "", "", DEPRECATED_SYMBOL_NAME (sym));
+             = obconcat (&objfile->objfile_obstack, "", "", DEPRECATED_SYMBOL_NAME (sym));
          add_symbol_to_list (typedef_sym, &file_symbols);
        }
       break;
@@ -1521,136 +1310,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
        SYMBOL_CLASS (sym) = LOC_REF_ARG;
     }
 
-  /* Is there more to parse?  For example LRS/alias information?  */
-  while (*p && *p == ';')
-    {
-      p++;
-      if (*p && p[0] == 'l' && p[1] == '(')
-       {
-         /* GNU extensions for live range splitting may be appended to 
-            the end of the stab string.  eg. "l(#1,#2);l(#3,#5)" */
-
-         /* Resolve the live range and add it to SYM's live range list.  */
-         if (!resolve_live_range (objfile, sym, p))
-           return NULL;
-
-         /* Find end of live range info. */
-         p = strchr (p, ')');
-         if (!*p || *p != ')')
-           {
-             lrs_general_complaint ("live range format not recognized");
-             return NULL;
-           }
-         p++;
-       }
-    }
   return sym;
 }
 
-/* Add the live range found in P to the symbol SYM in objfile OBJFILE.  Returns
-   non-zero on success, zero otherwise.  */
-
-static int
-resolve_live_range (struct objfile *objfile, struct symbol *sym, char *p)
-{
-  int refnum;
-  CORE_ADDR start, end;
-
-  /* Sanity check the beginning of the stabs string.  */
-  if (!*p || *p != 'l')
-    {
-      lrs_general_complaint ("live range string 1");
-      return 0;
-    }
-  p++;
-
-  if (!*p || *p != '(')
-    {
-      lrs_general_complaint ("live range string 2");
-      return 0;
-    }
-  p++;
-
-  /* Get starting value of range and advance P past the reference id.
-
-     ?!? In theory, the process_reference should never fail, but we should
-     catch that case just in case the compiler scrogged the stabs.  */
-  refnum = process_reference (&p);
-  start = ref_search_value (refnum);
-  if (!start)
-    {
-      lrs_general_complaint ("Live range symbol not found 1");
-      return 0;
-    }
-
-  if (!*p || *p != ',')
-    {
-      lrs_general_complaint ("live range string 3");
-      return 0;
-    }
-  p++;
-
-  /* Get ending value of range and advance P past the reference id.
-
-     ?!? In theory, the process_reference should never fail, but we should
-     catch that case just in case the compiler scrogged the stabs.  */
-  refnum = process_reference (&p);
-  end = ref_search_value (refnum);
-  if (!end)
-    {
-      lrs_general_complaint ("Live range symbol not found 2");
-      return 0;
-    }
-
-  if (!*p || *p != ')')
-    {
-      lrs_general_complaint ("live range string 4");
-      return 0;
-    }
-
-  /* Now that we know the bounds of the range, add it to the
-     symbol.  */
-  add_live_range (objfile, sym, start, end);
-
-  return 1;
-}
-
-/* Add a new live range defined by START and END to the symbol SYM
-   in objfile OBJFILE.  */
-
-static void
-add_live_range (struct objfile *objfile, struct symbol *sym, CORE_ADDR start,
-               CORE_ADDR end)
-{
-  struct range_list *r, *rs;
-
-  if (start >= end)
-    {
-      lrs_general_complaint ("end of live range follows start");
-      return;
-    }
-
-  /* Alloc new live range structure. */
-  r = (struct range_list *)
-    obstack_alloc (&objfile->type_obstack,
-                  sizeof (struct range_list));
-  r->start = start;
-  r->end = end;
-  r->next = 0;
-
-  /* Append this range to the symbol's range list. */
-  if (!SYMBOL_RANGES (sym))
-    SYMBOL_RANGES (sym) = r;
-  else
-    {
-      /* Get the last range for the symbol. */
-      for (rs = SYMBOL_RANGES (sym); rs->next; rs = rs->next)
-       ;
-      rs->next = r;
-    }
-}
-\f
-
 /* Skip rest of this symbol and return an error type.
 
    General notes on error recovery:  error_type always skips to the
@@ -1740,11 +1402,21 @@ read_type (char **pp, struct objfile *objfile)
       if (read_type_number (pp, typenums) != 0)
        return error_type (pp, objfile);
 
-      /* Type is not being defined here.  Either it already exists,
-         or this is a forward reference to it.  dbx_alloc_type handles
-         both cases.  */
       if (**pp != '=')
-       return dbx_alloc_type (typenums, objfile);
+        {
+          /* Type is not being defined here.  Either it already
+             exists, or this is a forward reference to it.
+             dbx_alloc_type handles both cases.  */
+          type = dbx_alloc_type (typenums, objfile);
+
+          /* If this is a forward reference, arrange to complain if it
+             doesn't get patched up by the time we're done
+             reading.  */
+          if (TYPE_CODE (type) == TYPE_CODE_UNDEF)
+            add_undefined_type (type);
+
+          return type;
+        }
 
       /* Type is being defined here.  */
       /* Skip the '='.
@@ -1821,7 +1493,7 @@ again:
                return error_type (pp, objfile);
            }
          to = type_name =
-           (char *) obstack_alloc (&objfile->type_obstack, p - *pp + 1);
+           (char *) obstack_alloc (&objfile->objfile_obstack, p - *pp + 1);
 
          /* Copy the name.  */
          from = *pp + 1;
@@ -1834,11 +1506,9 @@ again:
          *pp = from + 1;
        }
 
-       /* Now check to see whether the type has already been
-          declared.  This was written for arrays of cross-referenced
-          types before we had TYPE_CODE_TARGET_STUBBED, so I'm pretty
-          sure it is not necessary anymore.  But it might be a good
-          idea, to save a little memory.  */
+        /* If this type has already been declared, then reuse the same
+           type, rather than allocating a new one.  This saves some
+           memory.  */
 
        for (ppt = file_symbols; ppt; ppt = ppt->next)
          for (i = 0; i < ppt->nsyms; i++)
@@ -1848,10 +1518,12 @@ again:
              if (SYMBOL_CLASS (sym) == LOC_TYPEDEF
                  && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
                  && (TYPE_CODE (SYMBOL_TYPE (sym)) == code)
-                 && STREQ (DEPRECATED_SYMBOL_NAME (sym), type_name))
+                 && strcmp (DEPRECATED_SYMBOL_NAME (sym), type_name) == 0)
                {
-                 obstack_free (&objfile->type_obstack, type_name);
+                 obstack_free (&objfile->objfile_obstack, type_name);
                  type = SYMBOL_TYPE (sym);
+                 if (typenums[0] != -1)
+                   *dbx_lookup_type (typenums) = type;
                  return type;
                }
            }
@@ -2805,11 +2477,11 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
              make_cleanup (xfree, destr_fnlist);
              memset (destr_fnlist, 0, sizeof (struct next_fnfieldlist));
              destr_fnlist->fn_fieldlist.name
-               = obconcat (&objfile->type_obstack, "", "~",
+               = obconcat (&objfile->objfile_obstack, "", "~",
                            new_fnlist->fn_fieldlist.name);
 
              destr_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
-               obstack_alloc (&objfile->type_obstack,
+               obstack_alloc (&objfile->objfile_obstack,
                               sizeof (struct fn_field) * has_destructor);
              memset (destr_fnlist->fn_fieldlist.fn_fields, 0,
                  sizeof (struct fn_field) * has_destructor);
@@ -2870,11 +2542,11 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
              if (ret)
                new_fnlist->fn_fieldlist.name
                  = obsavestring (dem_opname, strlen (dem_opname),
-                                 &objfile->type_obstack);
+                                 &objfile->objfile_obstack);
            }
 
          new_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
-           obstack_alloc (&objfile->type_obstack,
+           obstack_alloc (&objfile->objfile_obstack,
                           sizeof (struct fn_field) * length);
          memset (new_fnlist->fn_fieldlist.fn_fields, 0,
                  sizeof (struct fn_field) * length);
@@ -2943,7 +2615,7 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
                  name = "";
          }
          fip->list->field.name =
-           obconcat (&objfile->type_obstack, vptr_name, name, "");
+           obconcat (&objfile->objfile_obstack, vptr_name, name, "");
          break;
 
        case 'b':               /* $vb -- a virtual bsomethingorother */
@@ -2956,13 +2628,13 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
              name = "FOO";
            }
          fip->list->field.name =
-           obconcat (&objfile->type_obstack, vb_name, name, "");
+           obconcat (&objfile->objfile_obstack, vb_name, name, "");
          break;
 
        default:
          invalid_cpp_abbrev_complaint (*pp);
          fip->list->field.name =
-           obconcat (&objfile->type_obstack,
+           obconcat (&objfile->objfile_obstack,
                      "INVALID_CPLUSPLUS_ABBREV", "", "");
          break;
        }
@@ -3008,7 +2680,7 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
                       struct type *type, struct objfile *objfile)
 {
   fip->list->field.name =
-    obsavestring (*pp, p - *pp, &objfile->type_obstack);
+    obsavestring (*pp, p - *pp, &objfile->objfile_obstack);
   *pp = p + 1;
 
   /* This means we have a visibility for a field coming. */
@@ -3778,14 +3450,14 @@ read_enum_type (char **pp, struct type *type,
       p = *pp;
       while (*p != ':')
        p++;
-      name = obsavestring (*pp, p - *pp, &objfile->symbol_obstack);
+      name = obsavestring (*pp, p - *pp, &objfile->objfile_obstack);
       *pp = p + 1;
       n = read_huge_number (pp, ',', &nbits);
       if (nbits != 0)
        return error_type (pp, objfile);
 
       sym = (struct symbol *)
-       obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol));
+       obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
       memset (sym, 0, sizeof (struct symbol));
       DEPRECATED_SYMBOL_NAME (sym) = name;
       SYMBOL_LANGUAGE (sym) = current_subfile->language;
@@ -4333,7 +4005,7 @@ common_block_start (char *name, struct objfile *objfile)
   common_block = local_symbols;
   common_block_i = local_symbols ? local_symbols->nsyms : 0;
   common_block_name = obsavestring (name, strlen (name),
-                                   &objfile->symbol_obstack);
+                                   &objfile->objfile_obstack);
 }
 
 /* Process a N_ECOMM symbol.  */
@@ -4359,9 +4031,9 @@ common_block_end (struct objfile *objfile)
     }
 
   sym = (struct symbol *)
-    obstack_alloc (&objfile->symbol_obstack, sizeof (struct symbol));
+    obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
   memset (sym, 0, sizeof (struct symbol));
-  /* Note: common_block_name already saved on symbol_obstack */
+  /* Note: common_block_name already saved on objfile_obstack */
   DEPRECATED_SYMBOL_NAME (sym) = common_block_name;
   SYMBOL_CLASS (sym) = LOC_BLOCK;
 
@@ -4480,7 +4152,7 @@ cleanup_undefined_types (void)
                            && SYMBOL_DOMAIN (sym) == STRUCT_DOMAIN
                            && (TYPE_CODE (SYMBOL_TYPE (sym)) ==
                                TYPE_CODE (*type))
-                           && STREQ (DEPRECATED_SYMBOL_NAME (sym), typename))
+                           && strcmp (DEPRECATED_SYMBOL_NAME (sym), typename) == 0)
                           replace_type (*type, SYMBOL_TYPE (sym));
                      }
                  }
@@ -4491,7 +4163,8 @@ cleanup_undefined_types (void)
        default:
          {
            complaint (&symfile_complaints,
-                      "GDB internal error.  cleanup_undefined_types with bad type %d.",
+                      "forward-referenced types left unresolved, "
+                       "type code %d.",
                       TYPE_CODE (*type));
          }
          break;
@@ -4510,7 +4183,7 @@ scan_file_globals (struct objfile *objfile)
 {
   int hash;
   struct minimal_symbol *msymbol;
-  struct symbol *sym, *prev, *rsym;
+  struct symbol *sym, *prev;
   struct objfile *resolve_objfile;
 
   /* SVR4 based linkers copy referenced global symbols from shared
@@ -4562,11 +4235,8 @@ scan_file_globals (struct objfile *objfile)
          for (sym = global_sym_chain[hash]; sym;)
            {
              if (DEPRECATED_SYMBOL_NAME (msymbol)[0] == DEPRECATED_SYMBOL_NAME (sym)[0] &&
-                 STREQ (DEPRECATED_SYMBOL_NAME (msymbol) + 1, DEPRECATED_SYMBOL_NAME (sym) + 1))
+                 strcmp (DEPRECATED_SYMBOL_NAME (msymbol) + 1, DEPRECATED_SYMBOL_NAME (sym) + 1) == 0)
                {
-
-                 struct alias_list *aliases;
-
                  /* Splice this symbol out of the hash chain and
                     assign the value we have to it. */
                  if (prev)
@@ -4581,38 +4251,21 @@ scan_file_globals (struct objfile *objfile)
                  /* Check to see whether we need to fix up a common block.  */
                  /* Note: this code might be executed several times for
                     the same symbol if there are multiple references.  */
-
-                 /* If symbol has aliases, do minimal symbol fixups for each.
-                    These live aliases/references weren't added to 
-                    global_sym_chain hash but may also need to be fixed up. */
-                 /* FIXME: Maybe should have added aliases to the global chain,                     resolved symbol name, then treated aliases as normal 
-                    symbols?  Still, we wouldn't want to add_to_list. */
-                 /* Now do the same for each alias of this symbol */
-                 rsym = sym;
-                 aliases = SYMBOL_ALIASES (sym);
-                 while (rsym)
+                 if (sym)
                    {
-                     if (SYMBOL_CLASS (rsym) == LOC_BLOCK)
+                     if (SYMBOL_CLASS (sym) == LOC_BLOCK)
                        {
-                         fix_common_block (rsym,
+                         fix_common_block (sym,
                                            SYMBOL_VALUE_ADDRESS (msymbol));
                        }
                      else
                        {
-                         SYMBOL_VALUE_ADDRESS (rsym)
+                         SYMBOL_VALUE_ADDRESS (sym)
                            = SYMBOL_VALUE_ADDRESS (msymbol);
                        }
-                     SYMBOL_SECTION (rsym) = SYMBOL_SECTION (msymbol);
-                     if (aliases)
-                       {
-                         rsym = aliases->sym;
-                         aliases = aliases->next;
-                       }
-                     else
-                       rsym = NULL;
+                     SYMBOL_SECTION (sym) = SYMBOL_SECTION (msymbol);
                    }
 
-
                  if (prev)
                    {
                      sym = SYMBOL_VALUE_CHAIN (prev);
This page took 0.032949 seconds and 4 git commands to generate.