Currently the generated-events.[ch] files contain the event dstates, constants and TraceEvent structs, while the generated-tracers.[ch] files contain the actual trace probe logic. With the removal of usage of the event enums from the API there is no longer any compelling reason for the separation between these files. The generated-events.h content is only ever needed from the generated-tracers.[ch] files. The enums/constants/structs from generated-events.[ch] are thus moved into the generated-tracers.[ch], so that there is one less file to be generated. Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Message-id: 1475588159-30598-17-git-send-email-berrange@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
trace/generated-tracers.h
|
|
"""
|
|
|
|
__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
|
|
__copyright__ = "Copyright 2012-2016, Lluís Vilanova <vilanova@ac.upc.edu>"
|
|
__license__ = "GPL version 2 or (at your option) any later version"
|
|
|
|
__maintainer__ = "Stefan Hajnoczi"
|
|
__email__ = "stefanha@linux.vnet.ibm.com"
|
|
|
|
|
|
from tracetool import out
|
|
|
|
|
|
def generate(events, backend):
|
|
out('/* This file is autogenerated by tracetool, do not edit. */',
|
|
'',
|
|
'#ifndef TRACE__GENERATED_TRACERS_H',
|
|
'#define TRACE__GENERATED_TRACERS_H',
|
|
'',
|
|
'#include "qemu-common.h"',
|
|
'#include "trace/control.h"',
|
|
'')
|
|
|
|
for e in events:
|
|
out('extern TraceEvent %(event)s;',
|
|
event = e.api(e.QEMU_EVENT))
|
|
|
|
for e in events:
|
|
out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))
|
|
|
|
# static state
|
|
for e in events:
|
|
if 'disable' in e.properties:
|
|
enabled = 0
|
|
else:
|
|
enabled = 1
|
|
if "tcg-exec" in e.properties:
|
|
# a single define for the two "sub-events"
|
|
out('#define TRACE_%(name)s_ENABLED %(enabled)d',
|
|
name=e.original.name.upper(),
|
|
enabled=enabled)
|
|
out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled))
|
|
|
|
backend.generate_begin(events)
|
|
|
|
for e in events:
|
|
if "vcpu" in e.properties:
|
|
trace_cpu = next(iter(e.args))[1]
|
|
cond = "trace_event_get_vcpu_state(%(cpu)s,"\
|
|
" TRACE_%(id)s)"\
|
|
% dict(
|
|
cpu=trace_cpu,
|
|
id=e.name.upper())
|
|
else:
|
|
cond = "true"
|
|
|
|
out('',
|
|
'static inline void %(api)s(%(args)s)',
|
|
'{',
|
|
' if (%(cond)s) {',
|
|
api=e.api(),
|
|
args=e.args,
|
|
cond=cond)
|
|
|
|
if "disable" not in e.properties:
|
|
backend.generate(e)
|
|
|
|
out(' }',
|
|
'}')
|
|
|
|
backend.generate_end(events)
|
|
|
|
out('#endif /* TRACE__GENERATED_TRACERS_H */')
|