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 /elaborate.cxx | |
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.
Diffstat (limited to 'elaborate.cxx')
-rw-r--r-- | elaborate.cxx | 57 |
1 files changed, 56 insertions, 1 deletions
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 { |