]>
git.proxmox.com Git - qemu.git/blob - scripts/tracetool/backend/dtrace.py
23c43e277280ab8994425c31d010037bff581943
2 # -*- coding: utf-8 -*-
5 DTrace/SystemTAP backend.
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"
12 __maintainer__
= "Stefan Hajnoczi"
13 __email__
= "stefanha@linux.vnet.ibm.com"
16 from tracetool
import out
22 if PROBEPREFIX
is None:
23 raise ValueError("you must set PROBEPREFIX")
31 raise ValueError("you must set BINARY")
40 out('#include "trace-dtrace.h"',
44 out('static inline void trace_%(name)s(%(args)s) {',
45 ' QEMU_%(uppername)s(%(argnames)s);',
49 uppername
= e
.name
.upper(),
50 argnames
= ", ".join(e
.args
.names()),
55 out('provider qemu {')
60 # DTrace provider syntax expects foo() for empty
61 # params, not foo(void)
65 # Define prototype for probe arguments
67 'probe %(name)s(%(args)s);',
76 # Technically 'self' is not used by systemtap yet, but
77 # they recommended we keep it in the reserved list anyway
79 'break', 'catch', 'continue', 'delete', 'else', 'for',
80 'foreach', 'function', 'global', 'if', 'in', 'limit',
81 'long', 'next', 'probe', 'return', 'self', 'string',
87 # Define prototype for probe arguments
88 out('probe %(probeprefix)s.%(name)s = process("%(binary)s").mark("%(name)s")',
90 probeprefix
= _probeprefix(),
97 for name
in e
.args
.names():
98 # Append underscore to reserved keywords
99 if name
in RESERVED_WORDS
:
101 out(' %s = $arg%d;' % (name
, i
))