* stabsread.c (read_one_struct_field): Add a patch to handle cfront
authorKung Hsu <kung@cygnus>
Tue, 12 Sep 1995 23:05:22 +0000 (23:05 +0000)
committerKung Hsu <kung@cygnus>
Tue, 12 Sep 1995 23:05:22 +0000 (23:05 +0000)
generated stabs that each field is in full mangled name.

gdb/ChangeLog
gdb/stabsread.c

index 7d599ec1fae809a8cd33da32695164926fadedda..4ebb524f5e0de8536810beb443650dc7998aaa21 100644 (file)
@@ -1,5 +1,8 @@
 Tue Sep 12 15:46:18 1995  Kung Hsu  <kung@mexican.cygnus.com>
 
+       * stabsread.c (read_one_struct_field): Add a patch to handle cfront
+       generated stabs that each field is in full mangled name.
+
        * infcmd.c (attach_command): Add solibs only when
        auto_solib_add_at_startup is set.
 
index 5221c44b18604b75c2cf1893c44ef8a85e9d9c44..f9c619b12cb06004e350149ad9ddf5fc1426f254 100644 (file)
@@ -2344,7 +2344,36 @@ read_one_struct_field (fip, pp, p, type, objfile)
      struct type *type;
      struct objfile *objfile;
 {
-  fip -> list -> field.name =
+  /* The following is code to work around cfront generated stabs.
+     The stabs contains full mangled name for each field.
+     We try to demangle the name and extract the field name out of it.
+  */
+  if (current_language->la_language == language_cplus)
+    {
+      char save_p;
+      char *dem, *dem_p;
+      save_p = *p;
+      *p = '\0';
+      dem = cplus_demangle (*pp, DMGL_ANSI | DMGL_PARAMS);
+      if (dem != NULL)
+        {
+          dem_p = strrchr (dem, ':');
+          if (dem_p != 0 && *(dem_p-1)==':')
+            dem_p++;
+          fip->list->field.name =
+            obsavestring (dem_p, strlen(dem_p), &objfile -> type_obstack);
+        }
+      else
+        {
+          fip->list->field.name =
+            obsavestring (*pp, p - *pp, &objfile -> type_obstack);
+        }
+      *p = save_p;
+    }
+  /* end of code for cfront work around */
+
+  else
+    fip -> list -> field.name =
     obsavestring (*pp, p - *pp, &objfile -> type_obstack);
   *pp = p + 1;