]> git.proxmox.com Git - qemu.git/blame - scripts/tracetool/backend/dtrace.py
target-mips: fix wrong microMIPS opcode encoding
[qemu.git] / scripts / tracetool / backend / dtrace.py
CommitLineData
52ef093a
LV
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4"""
5DTrace/SystemTAP backend.
6"""
7
8__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
9__copyright__ = "Copyright 2012, Lluís Vilanova <vilanova@ac.upc.edu>"
10__license__ = "GPL version 2 or (at your option) any later version"
11
12__maintainer__ = "Stefan Hajnoczi"
13__email__ = "stefanha@linux.vnet.ibm.com"
14
15
16from tracetool import out
17
18
19PROBEPREFIX = None
20
21def _probeprefix():
22 if PROBEPREFIX is None:
23 raise ValueError("you must set PROBEPREFIX")
24 return PROBEPREFIX
25
26
27BINARY = None
28
29def _binary():
30 if BINARY is None:
31 raise ValueError("you must set BINARY")
32 return BINARY
33
34
35def c(events):
36 pass
37
38
39def h(events):
40 out('#include "trace-dtrace.h"',
41 '')
42
43 for e in events:
44 out('static inline void trace_%(name)s(%(args)s) {',
45 ' QEMU_%(uppername)s(%(argnames)s);',
46 '}',
47 name = e.name,
48 args = e.args,
49 uppername = e.name.upper(),
50 argnames = ", ".join(e.args.names()),
51 )
52
53
54def d(events):
55 out('provider qemu {')
56
57 for e in events:
58 args = str(e.args)
59
60 # DTrace provider syntax expects foo() for empty
61 # params, not foo(void)
62 if args == 'void':
63 args = ''
64
65 # Define prototype for probe arguments
66 out('',
67 'probe %(name)s(%(args)s);',
68 name = e.name,
69 args = args,
70 )
71
72 out('',
73 '};')
74
75
76def stap(events):
77 for e in events:
78 # Define prototype for probe arguments
79 out('probe %(probeprefix)s.%(name)s = process("%(binary)s").mark("%(name)s")',
80 '{',
81 probeprefix = _probeprefix(),
82 name = e.name,
83 binary = _binary(),
84 )
85
86 i = 1
87 if len(e.args) > 0:
88 for name in e.args.names():
256a721d 89 # Append underscore to reserved keywords
d8f8a860 90 if name in ('limit', 'in', 'next', 'self', 'function'):
256a721d
SH
91 name += '_'
92 out(' %s = $arg%d;' % (name, i))
52ef093a
LV
93 i += 1
94
95 out('}')
96
97 out()