12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- # -*- coding: utf-8 -*-
- """
- trace/generated-tracers.h
- """
- __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
- __copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
- __license__ = "GPL version 2 or (at your option) any later version"
- __maintainer__ = "Stefan Hajnoczi"
- __email__ = "stefanha@redhat.com"
- from tracetool import out
- def generate(events, backend, group):
- header = "trace/control.h"
- out('/* This file is autogenerated by tracetool, do not edit. */',
- '',
- '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
- '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
- '',
- '#include "%s"' % header,
- '')
- 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, group)
- for e in events:
- # tracer-specific dstate
- out('',
- '#define %(api)s() ( \\',
- api=e.api(e.QEMU_BACKEND_DSTATE))
- if "disable" not in e.properties:
- backend.generate_backend_dstate(e, group)
- out(' false)')
- # tracer without checks
- out('',
- 'static inline void %(api)s(%(args)s)',
- '{',
- api=e.api(e.QEMU_TRACE_NOCHECK),
- args=e.args)
- if "disable" not in e.properties:
- backend.generate(e, group)
- out('}')
- cond = "true"
- out('',
- 'static inline void %(api)s(%(args)s)',
- '{',
- ' if (%(cond)s) {',
- ' %(api_nocheck)s(%(names)s);',
- ' }',
- '}',
- api=e.api(),
- api_nocheck=e.api(e.QEMU_TRACE_NOCHECK),
- args=e.args,
- names=", ".join(e.args.names()),
- cond=cond)
- backend.generate_end(events, group)
- out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper())
|