diff options
author | Mark Wielaard <mjw@redhat.com> | 2009-05-03 06:49:02 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2009-05-03 06:49:02 +0200 |
commit | c60a55f23fb41890e59887749a2248aecb4c6ffe (patch) | |
tree | dae05cab481770f64c1bef303efd52b33676aa4b | |
parent | 669add55f740e904485c119de78ddb5ed06bbbc6 (diff) | |
download | systemtap-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.cxx | 5 |
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); |