From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:60527) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvrT7-0006Tv-Iv for qemu-devel@nongnu.org; Fri, 10 Feb 2012 09:29:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RvrSx-0006eK-Nt for qemu-devel@nongnu.org; Fri, 10 Feb 2012 09:28:57 -0500 Received: from gw.ac.upc.edu ([147.83.30.3]:51687) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvrSx-0006bG-6P for qemu-devel@nongnu.org; Fri, 10 Feb 2012 09:28:47 -0500 From: =?utf-8?b?TGx1w61z?= Vilanova Date: Fri, 10 Feb 2012 15:28:38 +0100 Message-ID: <20120210142837.13518.106.stgit@ginnungagap.bsc.es> In-Reply-To: <20120210142832.13518.22003.stgit@ginnungagap.bsc.es> References: <20120210142832.13518.22003.stgit@ginnungagap.bsc.es> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v3 1/6] trace: Provide a generic tracing event descriptor List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: blauwirbel@gmail.com, stefanha@gmail.com Uses tracetool to generate a backend-independent tracing event descriptio= n. Signed-off-by: Llu=C3=ADs Vilanova --- Makefile | 5 +++ Makefile.objs | 15 +++++++- scripts/tracetool.py | 94 ++++++++++++++++++++++++++++++++++++++++++= ++---- trace/event-internal.h | 28 ++++++++++++++ 4 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 trace/event-internal.h diff --git a/Makefile b/Makefile index a9f3c7e..13e603c 100644 --- a/Makefile +++ b/Makefile @@ -4,9 +4,14 @@ BUILD_DIR=3D$(CURDIR) =20 GENERATED_HEADERS =3D config-host.h trace.h qemu-options.def + +GENERATED_HEADERS +=3D trace-events.h +GENERATED_SOURCES +=3D trace-events.c + ifeq ($(TRACE_BACKEND),dtrace) GENERATED_HEADERS +=3D trace-dtrace.h endif + GENERATED_HEADERS +=3D qmp-commands.h qapi-types.h qapi-visit.h GENERATED_SOURCES +=3D qmp-marshal.c qapi-types.c qapi-visit.c trace.c =20 diff --git a/Makefile.objs b/Makefile.objs index e6644c6..31abd21 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -348,6 +348,19 @@ libdis-$(CONFIG_SPARC_DIS) +=3D sparc-dis.o ###################################################################### # trace =20 +trace-events.h: trace-events.h-timestamp +trace-events.h-timestamp: $(SRC_PATH)/trace-events $(TRACETOOL) + $(call tracetool-gen,events-h,events) + $(call tracetool-ci) + +trace-events.c: trace-events.c-timestamp +trace-events.c-timestamp: $(SRC_PATH)/trace-events $(TRACETOOL) + $(call tracetool-gen,events-c,events) + $(call tracetool-ci) + +trace-obj-y +=3D trace-events.o + + ifeq ($(TRACE_BACKEND),dtrace) TRACE_H_EXTRA_DEPS=3Dtrace-dtrace.h endif @@ -389,7 +402,7 @@ trace/simple.o: trace/simple.c $(GENERATED_HEADERS) =20 trace-obj-$(CONFIG_TRACE_DTRACE) +=3D trace-dtrace.o ifneq ($(TRACE_BACKEND),dtrace) -trace-obj-y =3D trace.o +trace-obj-y +=3D trace.o endif =20 trace-nested-$(CONFIG_TRACE_DEFAULT) +=3D default.o diff --git a/scripts/tracetool.py b/scripts/tracetool.py index 7053a74..724b595 100755 --- a/scripts/tracetool.py +++ b/scripts/tracetool.py @@ -118,6 +118,73 @@ def get_backend_descr(backend): # formats =20 ################################################## +# format: events-h + +@for_format("events-h", BEGIN, "Generate .h for event description") +def process(events): + print """\ +/* This file is autogenerated by tracetool, do not edit. */ + +#ifndef TRACE_EVENTS_H +#define TRACE_EVENTS_H + +#include +""" + + # event identifiers + print """ +typedef enum {\ +""" + for event in events: + print " TRACE_%s," % event.name.upper() + print """\ + TRACE_EVENT_COUNT +} TraceEventID; +""" + + # static state + for e in events: + if 'disable' in e.properties: + enabled =3D 0 + else: + enabled =3D 1 + print "#define TRACE_%s_ENABLED %d" % (e.name.upper(), enabled) + + print """\ +#include "trace/event-internal.h" + +#endif /* TRACE_EVENTS_H */\ +""" + + +################################################## +# format: events-c + +@for_format("events-c", BEGIN, "Generate .h for event description") +def process(events): + print """\ +/* This file is autogenerated by tracetool, do not edit. */ + +#include "trace.h" +#include "trace-events.h" +#include "trace/control.h" + + +TraceEvent trace_events[TRACE_EVENT_COUNT] =3D {\ +""" + for e in events: + print """\ + { .id =3D %(id)s, .name =3D \"%(name)s\", .sstate =3D %(sstate)s, .d= state =3D 0 },\ +""" % { "id": "TRACE_" + e.name.upper(), + "name": e.name, + "sstate": "TRACE_%s_ENABLED" % e.name.upper(), + } + print """\ +}; +""" + + +################################################## # format: h =20 @for_format("h", BEGIN, "Generate .h file") @@ -131,13 +198,6 @@ def trace_h_begin(events): =20 @for_format("h", END) def trace_h_end(events): - for e in events: - if 'disable' in e.properties: - enabled =3D 0 - else: - enabled =3D 1 - print "#define TRACE_%s_ENABLED %d" % (e.name.upper(), enabled) - print print '#endif /* TRACE_H */' =20 =20 @@ -154,6 +214,26 @@ def trace_c_begin(events): # backends =20 ################################################## +# backend: events + +@for_backend("events", "events-h", "Generic event description") +def process(events): + pass + +@for_backend("nop", "events-h") +def process(events): + pass + +@for_backend("events", "events-c") +def process(events): + pass + +@for_backend("nop", "events-c") +def process(events): + pass + + +################################################## # backend: nop =20 @for_backend("nop", "h", "Tracing disabled") diff --git a/trace/event-internal.h b/trace/event-internal.h new file mode 100644 index 0000000..d62e82f --- /dev/null +++ b/trace/event-internal.h @@ -0,0 +1,28 @@ +/* + * Interface for configuring and controlling the state of tracing events= . + * + * Copyright (C) 2012 Llu=C3=ADs Vilanova + * + * This work is licensed under the terms of the GNU GPL, version 2 or la= ter. + * See the COPYING file in the top-level directory. + */ + +#ifndef TRACE__EVENT_H +#define TRACE__EVENT_H + +#include "trace-events.h" + + +typedef struct TraceEvent { + /** Unique event identifier. */ + TraceEventID id; + /** Event name. */ + const char * name; + /** Static instrumentation state. */ + const bool sstate; + /** Dynamic instrumentation state. */ + bool dstate; +} TraceEvent; + + +#endif /* TRACE__EVENT_H */