Branch data Line data Source code
1 : : // -*- C++ -*-
2 : : // Copyright (C) 2005-2010 Red Hat Inc.
3 : : //
4 : : // This file is part of systemtap, and is free software. You can
5 : : // redistribute it and/or modify it under the terms of the GNU General
6 : : // Public License (GPL); either version 2, or (at your option) any
7 : : // later version.
8 : :
9 : : #ifndef TAPSETS_H
10 : : #define TAPSETS_H
11 : :
12 : : #include "config.h"
13 : : #include "staptree.h"
14 : : #include "elaborate.h"
15 : :
16 : : void check_process_probe_kernel_support(systemtap_session& s);
17 : :
18 : : void register_standard_tapsets(systemtap_session& sess);
19 : : std::vector<derived_probe_group*> all_session_groups(systemtap_session& s);
20 : : std::string common_probe_init (derived_probe* p);
21 : : void common_probe_entryfn_prologue (systemtap_session& s, std::string statestr,
22 : : std::string probe, std::string probe_type,
23 : : bool overload_processing = true);
24 : : void common_probe_entryfn_epilogue (systemtap_session& s,
25 : : bool overload_processing);
26 : :
27 : : void register_tapset_been(systemtap_session& sess);
28 : : void register_tapset_itrace(systemtap_session& sess);
29 : : void register_tapset_mark(systemtap_session& sess);
30 : : void register_tapset_procfs(systemtap_session& sess);
31 : : void register_tapset_timers(systemtap_session& sess);
32 : : void register_tapset_netfilter(systemtap_session& sess);
33 : : void register_tapset_perf(systemtap_session& sess);
34 : : void register_tapset_utrace(systemtap_session& sess);
35 : :
36 : : std::string path_remove_sysroot(const systemtap_session& sess,
37 : : const std::string& path);
38 : :
39 : : // ------------------------------------------------------------------------
40 : : // Generic derived_probe_group: contains an ordinary vector of the
41 : : // given type. It provides only the enrollment function.
42 : :
43 [ # # ][ # # ]: 0 : template <class DP> struct generic_dpg: public derived_probe_group
[ # # ][ # # ]
[ # # ][ # # ]
44 : : {
45 : : protected:
46 : : std::vector <DP*> probes;
47 : : public:
48 [ + - ][ + - ]: 1162 : generic_dpg () {}
[ + - ]
49 : 16124 : void enroll (DP* probe) { probes.push_back (probe); }
50 : : };
51 : :
52 : :
53 : : // ------------------------------------------------------------------------
54 : : // An update visitor that allows replacing assignments with a function call
55 : :
56 [ + - ][ + - ]: 353557 : struct var_expanding_visitor: public update_visitor
[ + - ][ - + ]
57 : : {
58 : : static unsigned tick;
59 : : std::stack<functioncall**> target_symbol_setter_functioncalls;
60 : : std::stack<defined_op*> defined_ops;
61 : : std::set<std::string> valid_ops;
62 : : const std::string *op;
63 : :
64 : : var_expanding_visitor ();
65 : : void visit_assignment (assignment* e);
66 : : void visit_pre_crement (pre_crement* e);
67 : : void visit_post_crement (post_crement* e);
68 : : void visit_delete_statement (delete_statement* s);
69 : : void visit_defined_op (defined_op* e);
70 : :
71 : : private:
72 : : bool rewrite_lvalue(const token *tok, const std::string& eop,
73 : : expression*& lvalue, expression*& rvalue);
74 : : };
75 : :
76 : : #endif // TAPSETS_H
77 : :
78 : : /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */
|