aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2010-03-22 13:21:39 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2010-03-22 13:21:39 +0000
commitacebe513da394dadf74e768cedb76c192b22a93f (patch)
treef509609f52cf59985aeabda954f23aff79fa6756 /gdb/dwarf2read.c
parent86e026a4490f14189a46c5813bace9cbe135be44 (diff)
downloadgdb-acebe513da394dadf74e768cedb76c192b22a93f.zip
gdb-acebe513da394dadf74e768cedb76c192b22a93f.tar.gz
gdb-acebe513da394dadf74e768cedb76c192b22a93f.tar.bz2
* dwarf2read.c (partial_die_parent_scope): Work around buggy
GCC 4.1 debug info generation (GCC PR c++/28460). (determine_prefix): Likewise.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r--gdb/dwarf2read.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 92cda0e6..ed7923e 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -2307,6 +2307,19 @@ partial_die_parent_scope (struct partial_die_info *pdi,
grandparent_scope = partial_die_parent_scope (parent, cu);
+ /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
+ DW_TAG_namespace DIEs with a name of "::" for the global namespace.
+ Work around this problem here. */
+ if (cu->language == language_cplus
+ && parent->tag == DW_TAG_namespace
+ && strcmp (parent->name, "::") == 0
+ && grandparent_scope == NULL)
+ {
+ parent->scope = NULL;
+ parent->scope_set = 1;
+ return NULL;
+ }
+
if (parent->tag == DW_TAG_namespace
|| parent->tag == DW_TAG_structure_type
|| parent->tag == DW_TAG_class_type
@@ -9029,6 +9042,12 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
{
case DW_TAG_namespace:
parent_type = read_type_die (parent, cu);
+ /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they generated bogus
+ DW_TAG_namespace DIEs with a name of "::" for the global namespace.
+ Work around this problem here. */
+ if (cu->language == language_cplus
+ && strcmp (TYPE_TAG_NAME (parent_type), "::") == 0)
+ return "";
/* We give a name to even anonymous namespaces. */
return TYPE_TAG_NAME (parent_type);
case DW_TAG_class_type: