]>
Commit | Line | Data |
---|---|---|
52ef093a LV |
1 | # -*- coding: utf-8 -*- |
2 | ||
3 | """ | |
4 | Generate .stp file (DTrace with SystemTAP only). | |
5 | """ | |
6 | ||
7 | __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" | |
1dad2ce9 | 8 | __copyright__ = "Copyright 2012-2014, Lluís Vilanova <vilanova@ac.upc.edu>" |
52ef093a LV |
9 | __license__ = "GPL version 2 or (at your option) any later version" |
10 | ||
11 | __maintainer__ = "Stefan Hajnoczi" | |
f892b494 | 12 | __email__ = "stefanha@redhat.com" |
52ef093a LV |
13 | |
14 | ||
15 | from tracetool import out | |
1dad2ce9 | 16 | from tracetool.backend.dtrace import binary, probeprefix |
52ef093a LV |
17 | |
18 | ||
1dad2ce9 LV |
19 | # Technically 'self' is not used by systemtap yet, but |
20 | # they recommended we keep it in the reserved list anyway | |
21 | RESERVED_WORDS = ( | |
22 | 'break', 'catch', 'continue', 'delete', 'else', 'for', | |
23 | 'foreach', 'function', 'global', 'if', 'in', 'limit', | |
24 | 'long', 'next', 'probe', 'return', 'self', 'string', | |
25 | 'try', 'while' | |
26 | ) | |
27 | ||
28 | ||
a76ccf3c SH |
29 | def stap_escape(identifier): |
30 | # Append underscore to reserved keywords | |
31 | if identifier in RESERVED_WORDS: | |
32 | return identifier + '_' | |
33 | return identifier | |
34 | ||
35 | ||
80dd5c49 | 36 | def generate(events, backend, group): |
1dad2ce9 LV |
37 | events = [e for e in events |
38 | if "disable" not in e.properties] | |
39 | ||
40 | out('/* This file is autogenerated by tracetool, do not edit. */', | |
41 | '') | |
42 | ||
43 | for e in events: | |
44 | # Define prototype for probe arguments | |
45 | out('probe %(probeprefix)s.%(name)s = process("%(binary)s").mark("%(name)s")', | |
46 | '{', | |
47 | probeprefix=probeprefix(), | |
48 | name=e.name, | |
49 | binary=binary()) | |
50 | ||
51 | i = 1 | |
52 | if len(e.args) > 0: | |
53 | for name in e.args.names(): | |
a76ccf3c | 54 | name = stap_escape(name) |
1dad2ce9 LV |
55 | out(' %s = $arg%d;' % (name, i)) |
56 | i += 1 | |
57 | ||
58 | out('}') | |
59 | ||
60 | out() |