diff options
author | Wenji Huang <wenji.huang@oracle.com> | 2009-11-04 10:58:58 +0800 |
---|---|---|
committer | Wenji Huang <wenji.huang@oracle.com> | 2009-11-04 10:58:58 +0800 |
commit | c39cdd5565f718302057242bbfe50e71b69c4f4d (patch) | |
tree | a3fb608041e2495e1fb1de070144894bdfdd39e2 /tapsets.cxx | |
parent | 5807ac6473b47074cd90f93f5b1b3c3eb452fed9 (diff) | |
download | systemtap-steved-c39cdd5565f718302057242bbfe50e71b69c4f4d.tar.gz systemtap-steved-c39cdd5565f718302057242bbfe50e71b69c4f4d.tar.xz systemtap-steved-c39cdd5565f718302057242bbfe50e71b69c4f4d.zip |
PR10466: print the set-intersection of variables retrieved from each branch
* elaborate.h: Remove printargs and add getargs.
* tapset-mark.cxx (mark_derived_probe): Ditto.
* tapsets.cxx (dwarf_derived_probe,tracepoint_derived_probe): Ditto.
* main.cxx (printscript): Make intersection before printing.
Diffstat (limited to 'tapsets.cxx')
-rw-r--r-- | tapsets.cxx | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/tapsets.cxx b/tapsets.cxx index 324237fa..d2c33349 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -356,7 +356,7 @@ struct dwarf_derived_probe: public derived_probe void printsig (std::ostream &o) const; virtual void join_group (systemtap_session& s); void emit_probe_local_init(translator_output * o); - void printargs(std::ostream &o) const; + void getargs(std::set<std::string> &arg_set) const; // Pattern registration helpers. static void register_statement_variants(match_node * root, @@ -377,7 +377,7 @@ protected: {} private: - string args; + set<string> args; void saveargs(dwarf_query& q, Dwarf_Die* scope_die, dwarf_var_expanding_visitor& v); }; @@ -2899,7 +2899,7 @@ dwarf_derived_probe::saveargs(dwarf_query& q, Dwarf_Die* scope_die, dwarf_var_ex if (has_return && dwarf_attr_die (scope_die, DW_AT_type, &type_die) && dwarf_type_name(&type_die, type_name)) - argstream << " $return:" << type_name; + args.insert("$return:"+type_name); Dwarf_Die arg; vector<Dwarf_Die> scopes = q.dw.getscopes_die(scope_die); @@ -2936,18 +2936,16 @@ dwarf_derived_probe::saveargs(dwarf_query& q, Dwarf_Die* scope_die, dwarf_var_ex tsym->saved_conversion_error = 0; v.require (tsym); if (!tsym->saved_conversion_error) - argstream << " $" << arg_name << ":" << type_name; + args.insert("$"+string(arg_name)+":"+type_name); } while (dwarf_siblingof (&arg, &arg) == 0); - - args = argstream.str(); } void -dwarf_derived_probe::printargs(std::ostream &o) const +dwarf_derived_probe::getargs(std::set<std::string> &arg_set) const { - o << args; + arg_set.insert(args.begin(), args.end()); } @@ -5408,7 +5406,7 @@ struct tracepoint_derived_probe: public derived_probe vector <struct tracepoint_arg> args; void build_args(dwflpp& dw, Dwarf_Die& func_die); - void printargs (std::ostream &o) const; + void getargs (std::set<std::string> &arg_set) const; void join_group (systemtap_session& s); void print_dupe_stamp(ostream& o); void emit_probe_context_vars (translator_output* o); @@ -5786,11 +5784,11 @@ tracepoint_derived_probe::build_args(dwflpp& dw, Dwarf_Die& func_die) } void -tracepoint_derived_probe::printargs(std::ostream &o) const +tracepoint_derived_probe::getargs(std::set<std::string> &arg_set) const { for (unsigned i = 0; i < args.size(); ++i) if (args[i].usable) - o << " $" << args[i].name << ":" << args[i].c_type; + arg_set.insert("$"+args[i].name+":"+args[i].c_type); } void |