* elf32-arm.c (bfd_arm_get_mach_from_attributes): New function.
[deliverable/binutils-gdb.git] / gdb / stabsread.c
index 865bac8530cce831fadfe83d0d602e08569f048d..eb09c9d5997dfb9a43bc9a96ca5090e4c33a7749 100644 (file)
@@ -98,7 +98,7 @@ static void
 patch_block_stabs (struct pending *, struct pending_stabs *,
                   struct objfile *);
 
-static void fix_common_block (struct symbol *, int);
+static void fix_common_block (struct symbol *, CORE_ADDR);
 
 static int read_type_number (char **, int *);
 
@@ -1173,7 +1173,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                                        NULL, objfile);
          if (msym != NULL)
            {
-             char *new_name = gdbarch_static_transform_name
+             const char *new_name = gdbarch_static_transform_name
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
@@ -1367,7 +1367,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                                        NULL, objfile);
          if (msym != NULL)
            {
-             char *new_name = gdbarch_static_transform_name
+             const char *new_name = gdbarch_static_transform_name
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
@@ -2232,10 +2232,11 @@ rs6000_builtin_type (int typenum, struct objfile *objfile)
 \f
 /* This page contains subroutines of read_type.  */
 
-/* Replace *OLD_NAME with the method name portion of PHYSNAME.  */
+/* Wrapper around method_name_from_physname to flag a complaint
+   if there is an error.  */
 
-static void
-update_method_name_from_physname (char **old_name, const char *physname)
+static char *
+stabs_method_name_from_physname (const char *physname)
 {
   char *method_name;
 
@@ -2245,16 +2246,10 @@ update_method_name_from_physname (char **old_name, const char *physname)
     {
       complaint (&symfile_complaints,
                 _("Method has bad physname %s\n"), physname);
-      return;
+      return NULL;
     }
 
-  if (strcmp (*old_name, method_name) != 0)
-    {
-      xfree (*old_name);
-      *old_name = method_name;
-    }
-  else
-    xfree (method_name);
+  return method_name;
 }
 
 /* Read member function stabs info for C++ classes.  The form of each member
@@ -2278,10 +2273,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 {
   int nfn_fields = 0;
   int length = 0;
-  /* Total number of member functions defined in this class.  If the class
-     defines two `f' functions, and one `g' function, then this will have
-     the value 3.  */
-  int total_length = 0;
   int i;
   struct next_fnfield
     {
@@ -2681,7 +2672,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
              destr_fnlist->next = fip->fnlist;
              fip->fnlist = destr_fnlist;
              nfn_fields++;
-             total_length += has_destructor;
              length -= has_destructor;
            }
          else if (is_v3)
@@ -2692,14 +2682,24 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
                 - in -gstabs instead of -gstabs+
                 - or for static methods, which are output as a function type
                   instead of a method type.  */
+             char *new_method_name =
+               stabs_method_name_from_physname (sublist->fn_field.physname);
 
-             update_method_name_from_physname (&new_fnlist->fn_fieldlist.name,
-                                               sublist->fn_field.physname);
+             if (new_method_name != NULL
+                 && strcmp (new_method_name,
+                            new_fnlist->fn_fieldlist.name) != 0)
+               {
+                 new_fnlist->fn_fieldlist.name = new_method_name;
+                 xfree (main_fn_name);
+               }
+             else
+               xfree (new_method_name);
            }
          else if (has_destructor && new_fnlist->fn_fieldlist.name[0] != '~')
            {
              new_fnlist->fn_fieldlist.name =
-               concat ("~", main_fn_name, (char *)NULL);
+               obconcat (&objfile->objfile_obstack,
+                         "~", main_fn_name, (char *)NULL);
              xfree (main_fn_name);
            }
          else if (!has_stub)
@@ -2716,6 +2716,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
                new_fnlist->fn_fieldlist.name
                  = obsavestring (dem_opname, strlen (dem_opname),
                                  &objfile->objfile_obstack);
+             xfree (main_fn_name);
            }
 
          new_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
@@ -2732,7 +2733,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
          new_fnlist->next = fip->fnlist;
          fip->fnlist = new_fnlist;
          nfn_fields++;
-         total_length += length;
        }
     }
 
@@ -2744,7 +2744,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
       memset (TYPE_FN_FIELDLISTS (type), 0,
              sizeof (struct fn_fieldlist) * nfn_fields);
       TYPE_NFN_FIELDS (type) = nfn_fields;
-      TYPE_NFN_FIELDS_TOTAL (type) = total_length;
     }
 
   return 1;
@@ -2760,7 +2759,7 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
                 struct objfile *objfile)
 {
   char *p;
-  char *name;
+  const char *name;
   char cpp_abbrev;
   struct type *context;
 
@@ -2831,8 +2830,8 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
       {
        int nbits;
 
-       FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ';', &nbits,
-                                                            0);
+       SET_FIELD_BITPOS (fip->list->field,
+                         read_huge_number (pp, ';', &nbits, 0));
        if (nbits != 0)
          return 0;
       }
@@ -2908,7 +2907,8 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
   {
     int nbits;
 
-    FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ',', &nbits, 0);
+    SET_FIELD_BITPOS (fip->list->field,
+                     read_huge_number (pp, ',', &nbits, 0));
     if (nbits != 0)
       {
        stabs_general_complaint ("bad structure-type format");
@@ -3188,7 +3188,7 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
           corresponding to this baseclass.  Always zero in the absence of
           multiple inheritance.  */
 
-       FIELD_BITPOS (new->field) = read_huge_number (pp, ',', &nbits, 0);
+       SET_FIELD_BITPOS (new->field, read_huge_number (pp, ',', &nbits, 0));
        if (nbits != 0)
          return 0;
       }
@@ -3273,7 +3273,7 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
                   i >= TYPE_N_BASECLASSES (t);
                   --i)
                {
-                 char *name = TYPE_FIELD_NAME (t, i);
+                 const char *name = TYPE_FIELD_NAME (t, i);
 
                  if (!strncmp (name, vptr_name, sizeof (vptr_name) - 2)
                      && is_cplus_marker (name[sizeof (vptr_name) - 2]))
@@ -3413,8 +3413,8 @@ attach_fields_to_type (struct field_info *fip, struct type *type,
 static void 
 complain_about_struct_wipeout (struct type *type)
 {
-  char *name = "";
-  char *kind = "";
+  const char *name = "";
+  const char *kind = "";
 
   if (TYPE_TAG_NAME (type))
     {
@@ -3731,7 +3731,7 @@ read_enum_type (char **pp, struct type *type,
 
          SYMBOL_TYPE (xsym) = type;
          TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
-         TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
+         SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
          TYPE_FIELD_BITSIZE (type, n) = 0;
        }
       if (syms == osyms)
@@ -4398,7 +4398,7 @@ common_block_end (struct objfile *objfile)
    the common block name).  */
 
 static void
-fix_common_block (struct symbol *sym, int valu)
+fix_common_block (struct symbol *sym, CORE_ADDR valu)
 {
   struct pending *next = (struct pending *) SYMBOL_TYPE (sym);
 
@@ -4552,7 +4552,7 @@ cleanup_undefined_types_1 (void)
                struct pending *ppt;
                int i;
                /* Name of the type, without "struct" or "union".  */
-               char *typename = TYPE_TAG_NAME (*type);
+               const char *typename = TYPE_TAG_NAME (*type);
 
                if (typename == NULL)
                  {
@@ -4598,7 +4598,7 @@ cleanup_undefined_types_1 (void)
    this unit.  */
 
 void
-cleanup_undefined_types (struct objfile *objfile)
+cleanup_undefined_stabs_types (struct objfile *objfile)
 {
   cleanup_undefined_types_1 ();
   cleanup_undefined_types_noname (objfile);
This page took 0.039829 seconds and 4 git commands to generate.