xref: /openbmc/qemu/scripts/tracetool/format/h.py (revision 1abdde1ad42d0ebccc5e8bc574ebe805cd650102)
1# SPDX-License-Identifier: GPL-2.0-or-later
2
3"""
4trace/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
15from tracetool import out
16
17
18def 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())
79