| 1 | # SPDX-License-Identifier: GPL-2.0-or-later |
| 2 | |
| 3 | """ |
| 4 | trace/generated-tracers.c |
| 5 | """ |
| 6 | |
| 7 | __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" |
| 8 | __copyright__ = "Copyright 2012-2014, 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 | active_events = [e for e in events |
| 20 | if "disable" not in e.properties] |
| 21 | |
| 22 | header = "trace-" + group + ".h" |
| 23 | |
| 24 | out('/* This file is autogenerated by tracetool, do not edit. */', |
| 25 | '/* SPDX-License-Identifier: GPL-2.0-or-later */', |
| 26 | '', |
| 27 | '#include "qemu/osdep.h"', |
| 28 | '#include "qemu/module.h"', |
| 29 | '#include "%s"' % header, |
| 30 | '') |
| 31 | |
| 32 | for e in events: |
| 33 | out('uint16_t %s;' % e.api(e.QEMU_DSTATE)) |
| 34 | |
| 35 | for e in events: |
| 36 | out('TraceEvent %(event)s = {', |
| 37 | ' .id = 0,', |
| 38 | ' .name = \"%(name)s\",', |
| 39 | ' .sstate = %(sstate)s,', |
| 40 | ' .dstate = &%(dstate)s', |
| 41 | '};', |
| 42 | event = e.api(e.QEMU_EVENT), |
| 43 | name = e.name, |
| 44 | sstate = "TRACE_%s_ENABLED" % e.name.upper(), |
| 45 | dstate = e.api(e.QEMU_DSTATE)) |
| 46 | |
| 47 | out('TraceEvent *%(group)s_trace_events[] = {', |
| 48 | group = group.lower()) |
| 49 | |
| 50 | for e in events: |
| 51 | out(' &%(event)s,', event = e.api(e.QEMU_EVENT)) |
| 52 | |
| 53 | out(' NULL,', |
| 54 | '};', |
| 55 | '') |
| 56 | |
| 57 | out('static void trace_%(group)s_register_events(void)', |
| 58 | '{', |
| 59 | ' trace_event_register_group(%(group)s_trace_events);', |
| 60 | '}', |
| 61 | 'trace_init(trace_%(group)s_register_events)', |
| 62 | group = group.lower()) |
| 63 | |
| 64 | backend.generate_begin(active_events, group) |
| 65 | for event in active_events: |
| 66 | backend.generate(event, group) |
| 67 | backend.generate_end(active_events, group) |