| 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()) |