diff options
author | Lluís Vilanova <vilanova@ac.upc.edu> | 2013-03-05 14:47:32 +0100 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2013-03-28 14:19:57 +0100 |
commit | 45be2f5d0dcdd314cd0c70a11220e5e09a44d654 (patch) | |
tree | 1352451c027991b2809a2bcb5e70f1a4b13af334 /scripts/tracetool | |
parent | 93fba1618ddbbef8bedd8d684cf356586c94bbb1 (diff) | |
download | qemu-45be2f5d0dcdd314cd0c70a11220e5e09a44d654.tar.gz qemu-45be2f5d0dcdd314cd0c70a11220e5e09a44d654.tar.bz2 qemu-45be2f5d0dcdd314cd0c70a11220e5e09a44d654.zip |
trace: Provide a generic tracing event descriptor
Uses tracetool to generate a backend-independent tracing event description
(struct TraceEvent).
The values for such structure are generated with the non-public "events"
backend ("events-c" frontend).
The generation of the defines to check if an event is statically enabled is also
moved to the "events" backend ("events-h" frontend).
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'scripts/tracetool')
-rw-r--r-- | scripts/tracetool/backend/events.py | 23 | ||||
-rw-r--r-- | scripts/tracetool/format/events_c.py | 39 | ||||
-rw-r--r-- | scripts/tracetool/format/events_h.py | 50 | ||||
-rw-r--r-- | scripts/tracetool/format/h.py | 9 |
4 files changed, 113 insertions, 8 deletions
diff --git a/scripts/tracetool/backend/events.py b/scripts/tracetool/backend/events.py new file mode 100644 index 0000000000..5afce3e8da --- /dev/null +++ b/scripts/tracetool/backend/events.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Generic event description. + +This is a dummy backend to establish appropriate frontend/backend compatibility +checks. +""" + +__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" +__copyright__ = "Copyright 2012, 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" + + +def events_h(events): + pass + +def events_c(events): + pass diff --git a/scripts/tracetool/format/events_c.py b/scripts/tracetool/format/events_c.py new file mode 100644 index 0000000000..d670ec83d5 --- /dev/null +++ b/scripts/tracetool/format/events_c.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Generate .c for event description. +""" + +__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" +__copyright__ = "Copyright 2012, 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 begin(events): + out('/* This file is autogenerated by tracetool, do not edit. */', + '', + '#include "trace.h"', + '#include "trace/generated-events.h"', + '#include "trace/control.h"', + '', + ) + + out('TraceEvent trace_events[TRACE_EVENT_COUNT] = {') + + for e in events: + out(' { .id = %(id)s, .name = \"%(name)s\", .sstate = %(sstate)s, .dstate = 0 },', + id = "TRACE_" + e.name.upper(), + name = e.name, + sstate = "TRACE_%s_ENABLED" % e.name.upper(), + ) + + out('};', + '', + ) diff --git a/scripts/tracetool/format/events_h.py b/scripts/tracetool/format/events_h.py new file mode 100644 index 0000000000..d30ccea8a1 --- /dev/null +++ b/scripts/tracetool/format/events_h.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Generate .h for event description. +""" + +__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" +__copyright__ = "Copyright 2012, 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 begin(events): + out('/* This file is autogenerated by tracetool, do not edit. */', + '', + '#ifndef TRACE__GENERATED_EVENTS_H', + '#define TRACE__GENERATED_EVENTS_H', + '', + '#include <stdbool.h>', + '' + ) + + # event identifiers + out('typedef enum {') + + for e in events: + out(' TRACE_%s,' % e.name.upper()) + + out(' TRACE_EVENT_COUNT', + '} TraceEventID;', + ) + + # static state + for e in events: + if 'disable' in e.properties: + enabled = 0 + else: + enabled = 1 + out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) + + out('#include "trace/event-internal.h"', + '', + '#endif /* TRACE__GENERATED_EVENTS_H */', + ) diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py index 9a58de1331..93132fceaf 100644 --- a/scripts/tracetool/format/h.py +++ b/scripts/tracetool/format/h.py @@ -25,14 +25,7 @@ def begin(events): '#include "qemu-common.h"') def end(events): - for e in events: - if "disable" in e.properties: - enabled = 0 - else: - enabled = 1 - out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) - out('', - '#endif /* TRACE__GENERATED_TRACERS_H */') + out('#endif /* TRACE__GENERATED_TRACERS_H */') def nop(events): for e in events: |