gdb/bnc329420-1.patch

50 lines
2.0 KiB
Diff

On Wed, 13 May 2009, Sami Wagiaalla wrote:
> This problem is due to the fact that in Archer we are using
> dwarf2_full_name instead of dwarf2_linkage_name.
>
> I am trying your patch but it does not seem to have solved the problem
> for me. Are you testing against the Archer fedora branch (
> archer-jankratochvil-fedora-merge ) ?
Meh, wrong patch, sorry. I must have had traces of my other approach
still in dwarf2read.c that this worked when I checked before sending. It
actually fixes only the partial DIEs and I'm not even sure if that's
necessary. It certainly does not fix the problem for reading full DIEs.
As it's a rather generic tree reader (read_die_and_children_1 and friends)
it seems a bit clumsy to special case bogus namespace dies there, which
brings me back to my other option (that's the one I started and tested
with), hacking determine_prefix, like below. That fixes the problem.
Really :-)
Ciao,
Michael.
Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
===================================================================
--- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-05-13 15:53:22.000000000 +0200
+++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-05-13 23:48:52.000000000 +0200
@@ -8885,9 +8894,18 @@ determine_prefix (struct die_info *die,
switch (parent->tag)
{
case DW_TAG_namespace:
- parent_type = read_type_die (parent, cu);
- /* We give a name to even anonymous namespaces. */
- return TYPE_TAG_NAME (parent_type);
+ {
+ char *prefix;
+ parent_type = read_type_die (parent, cu);
+ /* We give a name to even anonymous namespaces. */
+ prefix = TYPE_TAG_NAME (parent_type);
+ /* Special hack for bogus global namespace that is emitted as an
+ explicit namespace with the name '::' in g++ 4.1, for
+ some decls. */
+ if (prefix[0] == ':' && prefix[1] == ':' && prefix[2] == 0)
+ return "";
+ return prefix;
+ }
case DW_TAG_class_type:
case DW_TAG_interface_type:
case DW_TAG_structure_type: