diff options
author | dsmith <dsmith> | 2006-08-28 17:59:50 +0000 |
---|---|---|
committer | dsmith <dsmith> | 2006-08-28 17:59:50 +0000 |
commit | dc38c0ae43f0c98b203866eeeb88070d32db2c8d (patch) | |
tree | 830f0e353042f693a1fbe1e1bd5b895010e46673 | |
parent | 30da8acfcbaef6bf88d806b8ded4195b88df7f39 (diff) | |
download | systemtap-steved-dc38c0ae43f0c98b203866eeeb88070d32db2c8d.tar.gz systemtap-steved-dc38c0ae43f0c98b203866eeeb88070d32db2c8d.tar.xz systemtap-steved-dc38c0ae43f0c98b203866eeeb88070d32db2c8d.zip |
2006-08-28 David Smith <dsmith@redhat.com>
* translate.cxx: Added inclusion of session.h.
(translate_pass): Instead of asking each probe to emit itself, we
ask the session's probes member variable to emit all the probes.
* tapsets.cxx: Added inclusion of session.h. Added a
register_probe member function to all derived_probe based
classes. Added a derived_probe_group derived class for all probe
types:
(be_derived_probe_group): New class.
(never_derived_probe_group): New class.
(dwarf_derived_probe_group): New class.
(timer_derived_probe_group): New class.
(profile_derived_probe_group): New class.
(mark_derived_probe_group): New class.
(hrtimer_derived_probe_group): New class
(derived_probe_group_container): New class.
* elaborate.h: Removed inclusion of session.h since session.h now
includes elaborate.h.
(derived_probe): Added register_probe member function.
(derived_probe_group): Added class definition. This is the base
class of all of the derived probe groups - dwarf, timer, etc.
(derived_probe_group_container): Added class definition. An
instance of this class will be stored in the session and contain
all the other probe groups.
* elaborate.cxx (derived_probe_group::register_probe): Added
derived_probe_group::register_probe stubs.
(alias_derived_probe::register_probe): Added register_probe member
function.
(semantic_pass_symbols): After deriving a probe, the probes now
register themselves with the session.
* session.h: Includes elaborate.h to get
derived_probe_group_container definition. systemtap_session class
'probes' member variable switched from a vector of derived probes
to a derived_probe_group_container.
* buildrun.cxx: Added inclusion of session.h since it was removed
from elaborate.h.
* main.cxx: Added inclusion of session.h since it was removed
from elaborate.h.
* parse.h: Added forward struct declarations.
* staptree.h: Removed inclusion of session.h.
-rw-r--r-- | ChangeLog | 42 | ||||
-rw-r--r-- | buildrun.cxx | 1 | ||||
-rw-r--r-- | elaborate.cxx | 57 | ||||
-rw-r--r-- | elaborate.h | 63 | ||||
-rw-r--r-- | main.cxx | 1 | ||||
-rw-r--r-- | parse.h | 25 | ||||
-rw-r--r-- | session.h | 5 | ||||
-rw-r--r-- | staptree.h | 1 | ||||
-rw-r--r-- | tapsets.cxx | 342 | ||||
-rw-r--r-- | translate.cxx | 7 |
10 files changed, 534 insertions, 10 deletions
@@ -1,3 +1,45 @@ +2006-08-28 David Smith <dsmith@redhat.com> + + * translate.cxx: Added inclusion of session.h. + (translate_pass): Instead of asking each probe to emit itself, we + ask the session's probes member variable to emit all the probes. + * tapsets.cxx: Added inclusion of session.h. Added a + register_probe member function to all derived_probe based + classes. Added a derived_probe_group derived class for all probe + types: + (be_derived_probe_group): New class. + (never_derived_probe_group): New class. + (dwarf_derived_probe_group): New class. + (timer_derived_probe_group): New class. + (profile_derived_probe_group): New class. + (mark_derived_probe_group): New class. + (hrtimer_derived_probe_group): New class + (derived_probe_group_container): New class. + * elaborate.h: Removed inclusion of session.h since session.h now + includes elaborate.h. + (derived_probe): Added register_probe member function. + (derived_probe_group): Added class definition. This is the base + class of all of the derived probe groups - dwarf, timer, etc. + (derived_probe_group_container): Added class definition. An + instance of this class will be stored in the session and contain + all the other probe groups. + * elaborate.cxx (derived_probe_group::register_probe): Added + derived_probe_group::register_probe stubs. + (alias_derived_probe::register_probe): Added register_probe member + function. + (semantic_pass_symbols): After deriving a probe, the probes now + register themselves with the session. + * session.h: Includes elaborate.h to get + derived_probe_group_container definition. systemtap_session class + 'probes' member variable switched from a vector of derived probes + to a derived_probe_group_container. + * buildrun.cxx: Added inclusion of session.h since it was removed + from elaborate.h. + * main.cxx: Added inclusion of session.h since it was removed + from elaborate.h. + * parse.h: Added forward struct declarations. + * staptree.h: Removed inclusion of session.h. + 2006-08-23 Josh Stone <joshua.i.stone@intel.com> PR 3093 diff --git a/buildrun.cxx b/buildrun.cxx index 8573fbf6..4c869fa2 100644 --- a/buildrun.cxx +++ b/buildrun.cxx @@ -8,6 +8,7 @@ #include "config.h" #include "buildrun.h" +#include "session.h" #include <fstream> #include <sstream> diff --git a/elaborate.cxx b/elaborate.cxx index dd0cb0c4..957f5ea5 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -10,6 +10,7 @@ #include "elaborate.h" #include "parse.h" #include "tapsets.h" +#include "session.h" extern "C" { #include <sys/utsname.h> @@ -70,6 +71,58 @@ derived_probe::derived_probe (probe *p, probe_point *l): // ------------------------------------------------------------------------ +// Members of derived_probe_group + +void +derived_probe_group::register_probe(be_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a be_derived_probe"); +} + + +void +derived_probe_group::register_probe(dwarf_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a dwarf_derived_probe"); +} + + +void +derived_probe_group::register_probe(hrtimer_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a hrtimer_derived_probe"); +} + + +void +derived_probe_group::register_probe(mark_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a mark_derived_probe"); +} + + +void +derived_probe_group::register_probe(never_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a never_derived_probe"); +} + + +void +derived_probe_group::register_probe(profile_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a profile_derived_probe"); +} + + +void +derived_probe_group::register_probe(timer_derived_probe* p) +{ + throw semantic_error ("unexpected registration of a timer_derived_probe"); +} + + +// ------------------------------------------------------------------------ // Members of derived_probe_builder bool @@ -330,6 +383,8 @@ struct alias_derived_probe: public derived_probe { alias_derived_probe (probe* base): derived_probe (base) {} + void register_probe (systemtap_session& s) { } + // alias probes should be ultimately expanded to other derived_probe // types, and not themselves emitted. void emit_registrations (translator_output* o) { throw semantic_error ("inappropriate", this->tok); } @@ -882,7 +937,7 @@ semantic_pass_symbols (systemtap_session& s) for (unsigned j=0; j<dps.size(); j++) { derived_probe* dp = dps[j]; - s.probes.push_back (dp); + dp->register_probe (s); try { diff --git a/elaborate.h b/elaborate.h index 9a10283c..9cb5b88e 100644 --- a/elaborate.h +++ b/elaborate.h @@ -9,7 +9,6 @@ #ifndef ELABORATE_H #define ELABORATE_H -#include "session.h" #include "staptree.h" #include "parse.h" #include <string> @@ -116,6 +115,8 @@ struct derived_probe: public probe virtual ~derived_probe () {} + virtual void register_probe (systemtap_session& s) = 0; + virtual void emit_registrations (translator_output* o) = 0; // (from within module_init): // rc = ..... register_or_whatever (ENTRYFN); @@ -148,6 +149,33 @@ public: // ------------------------------------------------------------------------ +struct be_derived_probe; +struct dwarf_derived_probe; +struct hrtimer_derived_probe; +struct mark_derived_probe; +struct never_derived_probe; +struct profile_derived_probe; +struct timer_derived_probe; +struct unparser; + +struct derived_probe_group +{ + virtual ~derived_probe_group () {} + + virtual void register_probe(be_derived_probe* p); + virtual void register_probe(dwarf_derived_probe* p); + virtual void register_probe(hrtimer_derived_probe* p); + virtual void register_probe(mark_derived_probe* p); + virtual void register_probe(never_derived_probe* p); + virtual void register_probe(profile_derived_probe* p); + virtual void register_probe(timer_derived_probe* p); + virtual size_t size () = 0; + + virtual void emit_probes (translator_output* op, unparser* up) = 0; +}; + +// ------------------------------------------------------------------------ + struct derived_probe_builder { virtual void build(systemtap_session & sess, @@ -218,4 +246,37 @@ void derive_probes (systemtap_session& s, symbol * get_symbol_within_expression (expression *e); +struct unparser; + +struct derived_probe_group_container: public derived_probe_group +{ +private: + std::vector<derived_probe*> probes; + derived_probe_group* be_probe_group; + derived_probe_group* dwarf_probe_group; + derived_probe_group* hrtimer_probe_group; + derived_probe_group* mark_probe_group; + derived_probe_group* never_probe_group; + derived_probe_group* profile_probe_group; + derived_probe_group* timer_probe_group; + +public: + derived_probe_group_container (); + ~derived_probe_group_container (); + + void register_probe (be_derived_probe* p); + void register_probe (dwarf_derived_probe* p); + void register_probe (hrtimer_derived_probe* p); + void register_probe (mark_derived_probe* p); + void register_probe (never_derived_probe* p); + void register_probe (profile_derived_probe* p); + void register_probe (timer_derived_probe* p); + size_t size () { return (probes.size ()); } + + derived_probe* operator[] (size_t n) { return (probes[n]); } + + void emit_probes (translator_output* op, unparser* up); +}; + + #endif // ELABORATE_H @@ -14,6 +14,7 @@ #include "elaborate.h" #include "translate.h" #include "buildrun.h" +#include "session.h" #include <iostream> #include <fstream> @@ -59,6 +59,8 @@ struct parse_error: public std::runtime_error }; +struct systemtap_session; + class lexer { public: @@ -77,6 +79,29 @@ private: }; +struct stapfile; +struct probe; +struct probe_alias; +struct vardecl; +struct functiondecl; +struct embeddedcode; +struct probe_point; +struct literal; +struct block; +struct for_loop; +struct statement; +struct if_statement; +struct foreach_loop; +struct expr_statement; +struct return_statement; +struct delete_statement; +struct break_statement; +struct next_statement; +struct continue_statement; +struct indexable; +struct expression; +struct hist_op; + class parser { public: @@ -9,6 +9,7 @@ #ifndef SESSION_H #define SESSION_H +#include "elaborate.h" #include <string> #include <vector> #include <iostream> @@ -21,7 +22,7 @@ struct match_node; struct stapfile; struct vardecl; struct functiondecl; -struct derived_probe; +struct derived_probe_group_container; struct embeddedcode; struct translator_output; struct unparser; @@ -94,7 +95,7 @@ struct systemtap_session std::vector<stapfile*> files; std::vector<vardecl*> globals; std::vector<functiondecl*> functions; - std::vector<derived_probe*> probes; + derived_probe_group_container probes; std::vector<embeddedcode*> embeds; std::map<std::string, statistic_decl> stat_decls; // XXX: vector<*> instead please? @@ -9,7 +9,6 @@ #ifndef STAPTREE_H #define STAPTREE_H -#include "session.h" #include <map> #include <stack> #include <set> diff --git a/tapsets.cxx b/tapsets.cxx index 2aa5e1b7..1d491cc2 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -12,6 +12,7 @@ #include "elaborate.h" #include "tapsets.h" #include "translate.h" +#include "session.h" #include <deque> #include <iostream> @@ -198,12 +199,27 @@ struct be_derived_probe: public derived_probe be_derived_probe (probe* p, probe_point* l, bool b): derived_probe (p, l), begin (b) {} + void register_probe (systemtap_session& s); + void emit_registrations (translator_output* o); void emit_deregistrations (translator_output* o); void emit_probe_entries (translator_output* o); }; +struct be_derived_probe_group: public derived_probe_group +{ +private: + vector<be_derived_probe*> probes; + +public: + virtual void register_probe(be_derived_probe* p) { probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + struct be_builder: public derived_probe_builder { bool begin; @@ -220,6 +236,13 @@ struct be_builder: public derived_probe_builder void +be_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + +void be_derived_probe::emit_registrations (translator_output* o) { if (begin) @@ -270,6 +293,17 @@ be_derived_probe::emit_probe_entries (translator_output* o) } +void +be_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} + + // ------------------------------------------------------------------------ // never probes are never run // ------------------------------------------------------------------------ @@ -279,12 +313,34 @@ struct never_derived_probe: public derived_probe never_derived_probe (probe* p): derived_probe (p) {} never_derived_probe (probe* p, probe_point* l): derived_probe (p, l) {} + void register_probe (systemtap_session& s); + void emit_registrations (translator_output* o); void emit_deregistrations (translator_output* o); void emit_probe_entries (translator_output* o); }; +struct never_derived_probe_group: public derived_probe_group +{ +private: + vector<never_derived_probe*> probes; + +public: + virtual void register_probe(never_derived_probe* p) { probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + +void +never_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + struct never_builder: public derived_probe_builder { never_builder() {} @@ -317,6 +373,15 @@ never_derived_probe::emit_probe_entries (translator_output* o) } +void +never_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} // ------------------------------------------------------------------------ // Dwarf derived probes. @@ -1718,6 +1783,8 @@ struct dwarf_derived_probe : public derived_probe vector<Dwarf_Addr> probe_points; bool has_return; + void register_probe (systemtap_session& s); + void add_probe_point(string const & funcname, char const * filename, int line, @@ -1742,6 +1809,20 @@ struct dwarf_derived_probe : public derived_probe virtual void emit_probe_entries (translator_output * o); }; + +struct dwarf_derived_probe_group: public derived_probe_group +{ +private: + vector<dwarf_derived_probe*> probes; + +public: + virtual void register_probe(dwarf_derived_probe* p) { probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + // Helper struct to thread through the dwfl callbacks. struct dwarf_query @@ -2939,6 +3020,13 @@ dwarf_var_expanding_copy_visitor::visit_target_symbol (target_symbol *e) void +dwarf_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + +void dwarf_derived_probe::add_probe_point(string const & funcname, char const * filename, int line, @@ -3375,6 +3463,17 @@ dwarf_derived_probe::emit_probe_entries (translator_output* o) void +dwarf_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} + + +void dwarf_builder::build(systemtap_session & sess, probe * base, probe_point * location, @@ -3464,6 +3563,8 @@ struct timer_derived_probe: public derived_probe timer_derived_probe (probe* p, probe_point* l, int64_t i, int64_t r, bool ms=false); + virtual void register_probe (systemtap_session& s); + virtual void emit_registrations (translator_output * o); virtual void emit_deregistrations (translator_output * o); virtual void emit_probe_entries (translator_output * o); @@ -3486,6 +3587,13 @@ timer_derived_probe::timer_derived_probe (probe* p, probe_point* l, int64_t i, i void +timer_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + +void timer_derived_probe::emit_registrations (translator_output* o) { o->newline() << "init_timer (& timer_" << name << ");"; @@ -3540,6 +3648,30 @@ timer_derived_probe::emit_probe_entries (translator_output* o) } +struct timer_derived_probe_group: public derived_probe_group +{ +private: + vector<timer_derived_probe*> probes; + +public: + virtual void register_probe(timer_derived_probe* p) { probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + +void +timer_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} + + struct timer_builder: public derived_probe_builder { bool time_is_msecs; @@ -3581,6 +3713,8 @@ struct profile_derived_probe: public derived_probe profile_derived_probe (systemtap_session &s, probe* p, probe_point* l); + void register_probe (systemtap_session& s); + virtual void emit_registrations (translator_output * o); virtual void emit_deregistrations (translator_output * o); virtual void emit_probe_entries (translator_output * o); @@ -3604,6 +3738,13 @@ profile_derived_probe::profile_derived_probe (systemtap_session &s, probe* p, pr void +profile_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + +void profile_derived_probe::emit_registrations (translator_output* o) { if (using_rpn) @@ -3660,6 +3801,31 @@ profile_derived_probe::emit_probe_entries (translator_output* o) } +struct profile_derived_probe_group: public derived_probe_group +{ +private: + vector<profile_derived_probe*> probes; + +public: + virtual void register_probe(profile_derived_probe* p) { + probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + +void +profile_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} + + struct profile_builder: public derived_probe_builder { profile_builder() {} @@ -3692,6 +3858,8 @@ struct mark_derived_probe: public derived_probe string module; string probe_sig_expanded; + void register_probe (systemtap_session& s); + void emit_registrations (translator_output * o); void emit_deregistrations (translator_output * o); void emit_probe_entries (translator_output * o); @@ -3809,6 +3977,13 @@ mark_derived_probe::mark_derived_probe (systemtap_session &s, void +mark_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + +void mark_derived_probe::emit_probe_context_vars (translator_output* o) { // Save incoming arguments @@ -3904,6 +4079,29 @@ mark_derived_probe::emit_deregistrations (translator_output * o) } +struct mark_derived_probe_group: public derived_probe_group +{ +private: + vector<mark_derived_probe*> probes; + +public: + virtual void register_probe(mark_derived_probe* p) { probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + +void +mark_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} + struct symboltable_extract { @@ -4114,6 +4312,8 @@ struct hrtimer_derived_probe: public derived_probe // so we don't have to loop over them in the other functions } + void register_probe (systemtap_session& s); + virtual void emit_interval (translator_output * o); virtual void emit_registrations (translator_output * o); @@ -4123,6 +4323,13 @@ struct hrtimer_derived_probe: public derived_probe void +hrtimer_derived_probe::register_probe(systemtap_session& s) +{ + s.probes.register_probe(this); +} + + +void hrtimer_derived_probe::emit_interval (translator_output* o) { o->line() << "({"; @@ -4194,6 +4401,30 @@ hrtimer_derived_probe::emit_probe_entries (translator_output* o) } +struct hrtimer_derived_probe_group: public derived_probe_group +{ +private: + vector<hrtimer_derived_probe*> probes; + +public: + virtual void register_probe(hrtimer_derived_probe* p) { probes.push_back (p); } + virtual size_t size () { return probes.size (); } + + virtual void emit_probes (translator_output* op, unparser* up); +}; + + +void +hrtimer_derived_probe_group::emit_probes (translator_output* op, unparser* up) +{ + for (unsigned i=0; i < probes.size(); i++) + { + op->newline (); + up->emit_probe (probes[i]); + } +} + + struct hrtimer_builder: public derived_probe_builder { hrtimer_builder() {} @@ -4348,3 +4579,114 @@ register_standard_tapsets(systemtap_session & s) s.pattern_root->bind("kernel")->bind_str("mark")->bind(new mark_builder()); s.pattern_root->bind_str("module")->bind_str("mark")->bind(new mark_builder()); } + + +derived_probe_group_container::derived_probe_group_container (): + be_probe_group(new be_derived_probe_group), + dwarf_probe_group(new dwarf_derived_probe_group), + hrtimer_probe_group(new hrtimer_derived_probe_group), + mark_probe_group(new mark_derived_probe_group), + never_probe_group(new never_derived_probe_group), + profile_probe_group(new profile_derived_probe_group), + timer_probe_group(new timer_derived_probe_group) +{ +} + + +derived_probe_group_container::~derived_probe_group_container () +{ + delete be_probe_group; + delete dwarf_probe_group; + delete hrtimer_probe_group; + delete mark_probe_group; + delete never_probe_group; + delete profile_probe_group; + delete timer_probe_group; +} + + +void +derived_probe_group_container::register_probe(be_derived_probe* p) +{ + probes.push_back (p); + be_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::register_probe(dwarf_derived_probe* p) +{ + probes.push_back (p); + dwarf_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::register_probe(hrtimer_derived_probe* p) +{ + probes.push_back (p); + hrtimer_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::register_probe(mark_derived_probe* p) +{ + probes.push_back (p); + mark_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::register_probe(never_derived_probe* p) +{ + probes.push_back (p); + never_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::register_probe(profile_derived_probe* p) +{ + probes.push_back (p); + profile_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::register_probe(timer_derived_probe* p) +{ + probes.push_back (p); + timer_probe_group->register_probe(p); +} + + +void +derived_probe_group_container::emit_probes (translator_output* op, + unparser* up) +{ + // Sanity check. + size_t groups_size = be_probe_group->size () + + dwarf_probe_group->size () + + hrtimer_probe_group->size () + + mark_probe_group->size () + + never_probe_group->size () + + profile_probe_group->size () + + timer_probe_group->size (); + if (probes.size () != groups_size) + { + cerr << "There are " << probes.size () << " total probes, and " + << groups_size << " grouped probes\n"; + + throw runtime_error("internal probe mismatch"); + } + + // Let each probe group emit its probes. + be_probe_group->emit_probes (op, up); + dwarf_probe_group->emit_probes (op, up); + hrtimer_probe_group->emit_probes (op, up); + mark_probe_group->emit_probes (op, up); + never_probe_group->emit_probes (op, up); + profile_probe_group->emit_probes (op, up); + timer_probe_group->emit_probes (op, up); +} diff --git a/translate.cxx b/translate.cxx index 88eb9634..e10ae3c6 100644 --- a/translate.cxx +++ b/translate.cxx @@ -11,6 +11,7 @@ #include "staptree.h" #include "elaborate.h" #include "translate.h" +#include "session.h" #include <iostream> #include <set> #include <sstream> @@ -3926,11 +3927,7 @@ translate_pass (systemtap_session& s) s.up->emit_function (s.functions[i]); } - for (unsigned i=0; i<s.probes.size(); i++) - { - s.op->newline(); - s.up->emit_probe (s.probes[i]); - } + s.probes.emit_probes (s.op, s.up); s.op->newline(); s.up->emit_module_init (); |