diff options
author | Josh Stone <jistone@redhat.com> | 2009-02-11 15:28:41 -0800 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2009-02-18 12:49:08 -0800 |
commit | f80d90043cf900dc6027329a61489444d7ab4ee3 (patch) | |
tree | f01b7ea8098117542993c6563ed8573f3726ee19 | |
parent | c24447be6017725800336e2a8a4836e3f58fdfe9 (diff) | |
download | systemtap-steved-f80d90043cf900dc6027329a61489444d7ab4ee3.tar.gz systemtap-steved-f80d90043cf900dc6027329a61489444d7ab4ee3.tar.xz systemtap-steved-f80d90043cf900dc6027329a61489444d7ab4ee3.zip |
Enable session-wide code filtering
This will be used to hook to dwarf_builder to all functions and probes
so it can attempt @cast expansion.
* session.h (systemtap_session): Add a vector of update_visitors
that will act as filters for all probes and functions.
* elaborate.cxx (semantic_pass_symbols): Run probes and functions
through each registered code filter.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | elaborate.cxx | 6 | ||||
-rw-r--r-- | session.h | 5 |
3 files changed, 18 insertions, 0 deletions
@@ -1,5 +1,12 @@ 2009-02-11 Josh Stone <jistone@redhat.com> + * session.h (systemtap_session): Add a vector of update_visitors + that will act as filters for all probes and functions. + * elaborate.cxx (semantic_pass_symbols): Run probes and functions + through each registered code filter. + +2009-02-11 Josh Stone <jistone@redhat.com> + * tapsets.cxx (dwarf_var_expanding_visitor::visit_cast_op): While expanding dwarf probes, provide the current module as a default to @casts without a module name. diff --git a/elaborate.cxx b/elaborate.cxx index 981fc7c7..9f8aa450 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1092,6 +1092,9 @@ semantic_pass_symbols (systemtap_session& s) try { + for (unsigned j=0; j<s.code_filters.size(); j++) + fd->body = s.code_filters[j]->require (fd->body); + sym.current_function = fd; sym.current_probe = 0; fd->body->visit (& sym); @@ -1124,6 +1127,9 @@ semantic_pass_symbols (systemtap_session& s) try { + for (unsigned k=0; k<s.code_filters.size(); k++) + dp->body = s.code_filters[k]->require (dp->body); + sym.current_function = 0; sym.current_probe = dp; dp->body->visit (& sym); @@ -45,6 +45,7 @@ struct translator_output; struct unparser; struct semantic_error; struct module_cache; +struct update_visitor; // XXX: a generalized form of this descriptor could be associated with @@ -133,6 +134,10 @@ struct systemtap_session stapfile* user_file; std::vector<stapfile*> library_files; + // filters to run over all code before symbol resolution + // e.g. @cast expansion + std::vector<update_visitor*> code_filters; + // resolved globals/functions/probes for the run as a whole std::vector<stapfile*> files; std::vector<vardecl*> globals; |