master
py 78 lines 2.19 KB
Raw
1 # SPDX-License-Identifier: GPL-2.0-or-later
2
3 """
4 trace/generated-tracers.h
5 """
6
7 __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
8 __copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
9 __license__ = "GPL version 2 or (at your option) any later version"
10
11 __maintainer__ = "Stefan Hajnoczi"
12 __email__ = "stefanha@redhat.com"
13
14
15 from tracetool import out
16
17
18 def generate(events, backend, group):
19 header = "trace/control.h"
20
21 out('/* This file is autogenerated by tracetool, do not edit. */',
22 '/* SPDX-License-Identifier: GPL-2.0-or-later */',
23 '',
24 '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
25 '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
26 '',
27 '#include "%s"' % header,
28 '')
29
30 for e in events:
31 out('extern TraceEvent %(event)s;',
32 event = e.api(e.QEMU_EVENT))
33
34 for e in events:
35 out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))
36
37 # static state
38 for e in events:
39 if 'disable' in e.properties:
40 enabled = 0
41 else:
42 enabled = 1
43 out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled))
44
45 backend.generate_begin(events, group)
46
47 for e in events:
48 # tracer-specific dstate
49 out('',
50 '#define %(api)s() ( \\',
51 api=e.api(e.QEMU_BACKEND_DSTATE))
52
53 if "disable" not in e.properties:
54 backend.generate_backend_dstate(e, group)
55
56 out(' false)')
57
58 out('',
59 'static inline void %(api)s(%(args)s)',
60 '{',
61 api=e.api(),
62 args=e.args)
63
64 if "disable" not in e.properties:
65 backend.generate(e, group, check_trace_event_get_state=False)
66
67 if backend.check_trace_event_get_state:
68 event_id = 'TRACE_' + e.name.upper()
69 cond = "trace_event_get_state(%s)" % event_id
70 out(' if (%(cond)s) {',
71 cond=cond)
72 backend.generate(e, group, check_trace_event_get_state=True)
73 out(' }')
74 out('}')
75
76 backend.generate_end(events, group)
77
78 out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper())