summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2009-05-03 06:49:02 +0200
committerMark Wielaard <mjw@redhat.com>2009-05-03 06:49:02 +0200
commitc60a55f23fb41890e59887749a2248aecb4c6ffe (patch)
treedae05cab481770f64c1bef303efd52b33676aa4b
parent669add55f740e904485c119de78ddb5ed06bbbc6 (diff)
downloadsystemtap-steved-c60a55f23fb41890e59887749a2248aecb4c6ffe.tar.gz
systemtap-steved-c60a55f23fb41890e59887749a2248aecb4c6ffe.tar.xz
systemtap-steved-c60a55f23fb41890e59887749a2248aecb4c6ffe.zip
Don't recurse into DW_AT_declaration subprograms in iterate_over_labels.
Newer gcc (4.4) places more DW_TAG_subprograms with DW_AT_declaration at call sites. iterate_over_labels should only be concerned about complete declarations. * tapsets.cxx (dwflpp::iterate_over_labels): Skip DW_TAG_subprogram that has attribute DW_AT_declaration.
-rw-r--r--tapsets.cxx5
1 files changed, 4 insertions, 1 deletions
diff --git a/tapsets.cxx b/tapsets.cxx
index b040c622..db14a787 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -3069,7 +3069,10 @@ dwflpp::iterate_over_labels (Dwarf_Die *begin_die,
case DW_TAG_label:
break;
case DW_TAG_subprogram:
- function_name = name;
+ if (!dwarf_hasattr(&die, DW_AT_declaration))
+ function_name = name;
+ else
+ continue;
default:
if (dwarf_haschildren (&die))
iterate_over_labels (&die, q, callback);