Adjust handling of Ada DIEs after dwarf2_physname patch.
authorJoel Brobecker <brobecker@gnat.com>
Wed, 10 Mar 2010 08:08:46 +0000 (08:08 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 10 Mar 2010 08:08:46 +0000 (08:08 +0000)
        * dwarf2read.c (dwarf2_compute_name): Add handling of Ada DIEs.

gdb/ChangeLog
gdb/dwarf2read.c

index d41f036..88187f1 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-09  Joel Brobecker  <brobecker@adacore.com>
+
+       Adjust handling of Ada DIEs after dwarf2_physname patch.
+       * dwarf2read.c (dwarf2_compute_name): Add handling of Ada DIEs.
+
 2010-03-09  Christopher Faylor  <me+cygwin@cgf.cx>
            Pierre Muller  <muller@ics.u-strasbg.fr>
 
 
        * python/python-internal.h: Include symtab.h.
 
-2010-03-09  Joel Brobecker <brobecker@adacore.com>
-           Pierre Muller <muller@ics.u-strasbg.fr>
+2010-03-09  Joel Brobecker  <brobecker@adacore.com>
+           Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * p-lang.c (is_pascal_string_type): Remove unneeded parentheses.
        * p-valprint.c (pascal_val_print): Remove undeed block and fix
index 1f25a45..fd75c74 100644 (file)
@@ -3324,6 +3324,9 @@ die_needs_namespace (struct die_info *die, struct dwarf2_cu *cu)
    compute the physname for the object, which include a method's
    formal parameters (C++/Java) and return type (Java).
 
+   For Ada, return the DIE's linkage name rather than the fully qualified
+   name.  PHYSNAME is ignored..
+
    The result is allocated on the objfile_obstack and canonicalized.  */
 
 static const char *
@@ -3396,6 +3399,19 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu,
            }
        }
     }
+  else if (cu->language == language_ada)
+    {
+      /* For Ada unit, we prefer the linkage name over the name, as
+        the former contains the exported name, which the user expects
+        to be able to reference.  Ideally, we want the user to be able
+        to reference this entity using either natural or linkage name,
+        but we haven't started looking at this enhancement yet.  */
+      struct attribute *attr;
+
+      attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu);
+      if (attr && DW_STRING (attr))
+       name = DW_STRING (attr);
+    }
 
   return name;
 }