Lluís Vilanova | 5de7f9c | 2012-04-03 20:47:44 +0200 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | |
| 3 | """ |
Lluís Vilanova | 30b572e | 2014-02-23 20:37:30 +0100 | [diff] [blame] | 4 | trace/generated-tracers.c |
Lluís Vilanova | 5de7f9c | 2012-04-03 20:47:44 +0200 | [diff] [blame] | 5 | """ |
| 6 | |
| 7 | __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" |
Lluís Vilanova | 30b572e | 2014-02-23 20:37:30 +0100 | [diff] [blame] | 8 | __copyright__ = "Copyright 2012-2014, Lluís Vilanova <vilanova@ac.upc.edu>" |
Lluís Vilanova | 5de7f9c | 2012-04-03 20:47:44 +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 | 5de7f9c | 2012-04-03 20:47:44 +0200 | [diff] [blame] | 13 | |
| 14 | |
| 15 | from tracetool import out |
| 16 | |
| 17 | |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 18 | def generate(events, backend, group): |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 19 | active_events = [e for e in events |
| 20 | if "disable" not in e.properties] |
Lluís Vilanova | 1dad2ce | 2014-02-23 20:37:40 +0100 | [diff] [blame] | 21 | |
Paolo Bonzini | 243af02 | 2020-02-04 12:20:10 +0100 | [diff] [blame] | 22 | header = "trace-" + group + ".h" |
Daniel P. Berrange | 0ab8ed1 | 2017-01-25 16:14:15 +0000 | [diff] [blame] | 23 | |
Lluís Vilanova | 1dad2ce | 2014-02-23 20:37:40 +0100 | [diff] [blame] | 24 | out('/* This file is autogenerated by tracetool, do not edit. */', |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 25 | '', |
| 26 | '#include "qemu/osdep.h"', |
Markus Armbruster | 13d4ff0 | 2019-08-12 07:23:37 +0200 | [diff] [blame] | 27 | '#include "qemu/module.h"', |
Daniel P. Berrange | 0ab8ed1 | 2017-01-25 16:14:15 +0000 | [diff] [blame] | 28 | '#include "%s"' % header, |
Lluís Vilanova | 1dad2ce | 2014-02-23 20:37:40 +0100 | [diff] [blame] | 29 | '') |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 30 | |
| 31 | for e in events: |
| 32 | out('uint16_t %s;' % e.api(e.QEMU_DSTATE)) |
| 33 | |
| 34 | for e in events: |
| 35 | if "vcpu" in e.properties: |
| 36 | vcpu_id = 0 |
| 37 | else: |
| 38 | vcpu_id = "TRACE_VCPU_EVENT_NONE" |
| 39 | out('TraceEvent %(event)s = {', |
| 40 | ' .id = 0,', |
| 41 | ' .vcpu_id = %(vcpu_id)s,', |
| 42 | ' .name = \"%(name)s\",', |
| 43 | ' .sstate = %(sstate)s,', |
| 44 | ' .dstate = &%(dstate)s ', |
| 45 | '};', |
| 46 | event = e.api(e.QEMU_EVENT), |
| 47 | vcpu_id = vcpu_id, |
| 48 | name = e.name, |
| 49 | sstate = "TRACE_%s_ENABLED" % e.name.upper(), |
| 50 | dstate = e.api(e.QEMU_DSTATE)) |
| 51 | |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 52 | out('TraceEvent *%(group)s_trace_events[] = {', |
| 53 | group = group.lower()) |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 54 | |
| 55 | for e in events: |
| 56 | out(' &%(event)s,', event = e.api(e.QEMU_EVENT)) |
| 57 | |
| 58 | out(' NULL,', |
| 59 | '};', |
| 60 | '') |
| 61 | |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 62 | out('static void trace_%(group)s_register_events(void)', |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 63 | '{', |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 64 | ' trace_event_register_group(%(group)s_trace_events);', |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 65 | '}', |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 66 | 'trace_init(trace_%(group)s_register_events)', |
| 67 | group = group.lower()) |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 68 | |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 69 | backend.generate_begin(active_events, group) |
Daniel P. Berrange | 3477018 | 2016-10-04 14:35:55 +0100 | [diff] [blame] | 70 | for event in active_events: |
Daniel P. Berrange | 80dd5c4 | 2016-10-04 14:35:59 +0100 | [diff] [blame] | 71 | backend.generate(event, group) |
| 72 | backend.generate_end(active_events, group) |