Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | |
| 3 | """ |
| 4 | DTrace/SystemTAP backend. |
| 5 | """ |
| 6 | |
| 7 | __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" |
Lluís Vilanova | 1ff7b53 | 2017-07-04 10:50:46 +0200 | [diff] [blame] | 8 | __copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>" |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 9 | __license__ = "GPL version 2 or (at your option) any later version" |
| 10 | |
| 11 | __maintainer__ = "Stefan Hajnoczi" |
Philippe Mathieu-Daudé | f892b49 | 2020-05-11 10:28:16 +0200 | [diff] [blame] | 12 | __email__ = "stefanha@redhat.com" |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 13 | |
| 14 | |
| 15 | from tracetool import out |
| 16 | |
| 17 | |
Lluís Vilanova | 93fba16 | 2013-03-05 14:47:26 +0100 | [diff] [blame] | 18 | PUBLIC = True |
| 19 | |
| 20 | |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 21 | PROBEPREFIX = None |
| 22 | |
Lluís Vilanova | 1dad2ce | 2014-02-23 20:37:40 +0100 | [diff] [blame] | 23 | def probeprefix(): |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 24 | if PROBEPREFIX is None: |
| 25 | raise ValueError("you must set PROBEPREFIX") |
| 26 | return PROBEPREFIX |
| 27 | |
| 28 | |
| 29 | BINARY = None |
| 30 | |
Lluís Vilanova | 1dad2ce | 2014-02-23 20:37:40 +0100 | [diff] [blame] | 31 | def binary(): |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 32 | if BINARY is None: |
| 33 | raise ValueError("you must set BINARY") |
| 34 | return BINARY |
| 35 | |
| 36 | |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 37 | def generate_h_begin(events, group): |
Daniel P. Berrange | 0ab8ed1 | 2017-01-25 16:14:15 +0000 | [diff] [blame] | 38 | if group == "root": |
| 39 | header = "trace-dtrace-root.h" |
| 40 | else: |
Paolo Bonzini | a81df1b | 2020-08-19 08:44:56 -0400 | [diff] [blame] | 41 | header = "trace-dtrace-%s.h" % group |
Daniel P. Berrange | 0ab8ed1 | 2017-01-25 16:14:15 +0000 | [diff] [blame] | 42 | |
Stefan Hajnoczi | 27e08ba | 2020-06-25 15:07:57 +0100 | [diff] [blame] | 43 | # Workaround for ust backend, which also includes <sys/sdt.h> and may |
| 44 | # require SDT_USE_VARIADIC to be defined. If dtrace includes <sys/sdt.h> |
| 45 | # first without defining SDT_USE_VARIADIC then ust breaks because the |
| 46 | # STAP_PROBEV() macro is not defined. |
Stefan Hajnoczi | 0008224 | 2020-07-29 16:39:26 +0100 | [diff] [blame] | 47 | out('#ifndef SDT_USE_VARIADIC') |
Stefan Hajnoczi | 27e08ba | 2020-06-25 15:07:57 +0100 | [diff] [blame] | 48 | out('#define SDT_USE_VARIADIC 1') |
Stefan Hajnoczi | 0008224 | 2020-07-29 16:39:26 +0100 | [diff] [blame] | 49 | out('#endif') |
Stefan Hajnoczi | 27e08ba | 2020-06-25 15:07:57 +0100 | [diff] [blame] | 50 | |
Daniel P. Berrange | 0ab8ed1 | 2017-01-25 16:14:15 +0000 | [diff] [blame] | 51 | out('#include "%s"' % header, |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 52 | '') |
| 53 | |
Stefan Hajnoczi | 0008224 | 2020-07-29 16:39:26 +0100 | [diff] [blame] | 54 | out('#undef SDT_USE_VARIADIC') |
| 55 | |
Stefan Hajnoczi | 3932ef3 | 2017-07-31 15:07:17 +0100 | [diff] [blame] | 56 | # SystemTap defines <provider>_<name>_ENABLED() but other DTrace |
| 57 | # implementations might not. |
| 58 | for e in events: |
| 59 | out('#ifndef QEMU_%(uppername)s_ENABLED', |
| 60 | '#define QEMU_%(uppername)s_ENABLED() true', |
| 61 | '#endif', |
| 62 | uppername=e.name.upper()) |
Lluís Vilanova | 52ef093 | 2012-04-03 20:48:12 +0200 | [diff] [blame] | 63 | |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 64 | def generate_h(event, group): |
Lluís Vilanova | 1ff7b53 | 2017-07-04 10:50:46 +0200 | [diff] [blame] | 65 | out(' QEMU_%(uppername)s(%(argnames)s);', |
Lluís Vilanova | 1dad2ce | 2014-02-23 20:37:40 +0100 | [diff] [blame] | 66 | uppername=event.name.upper(), |
| 67 | argnames=", ".join(event.args.names())) |
Stefan Hajnoczi | 3932ef3 | 2017-07-31 15:07:17 +0100 | [diff] [blame] | 68 | |
| 69 | |
| 70 | def generate_h_backend_dstate(event, group): |
| 71 | out(' QEMU_%(uppername)s_ENABLED() || \\', |
| 72 | uppername=event.name.upper()) |