From patchwork Fri Feb 10 14:28:38 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Llu=C3=ADs_Vilanova?= X-Patchwork-Id: 140655 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 63FCEB6EF3 for ; Sat, 11 Feb 2012 01:29:16 +1100 (EST) Received: from localhost ([::1]:56710 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvrTO-0006qc-9E for incoming@patchwork.ozlabs.org; Fri, 10 Feb 2012 09:29:14 -0500 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 Received: from localhost (unknown [10.8.0.22]) by gw.ac.upc.edu (Postfix) with ESMTP id 92BC62D0001; Fri, 10 Feb 2012 15:28:45 +0100 (CET) To: qemu-devel@nongnu.org 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> User-Agent: StGit/0.15 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 147.83.30.3 Cc: blauwirbel@gmail.com, stefanha@gmail.com Subject: [Qemu-devel] [PATCH v3 1/6] trace: Provide a generic tracing event descriptor X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Uses tracetool to generate a backend-independent tracing event description. Signed-off-by: Lluís 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=$(CURDIR) GENERATED_HEADERS = config-host.h trace.h qemu-options.def + +GENERATED_HEADERS += trace-events.h +GENERATED_SOURCES += trace-events.c + ifeq ($(TRACE_BACKEND),dtrace) GENERATED_HEADERS += trace-dtrace.h endif + GENERATED_HEADERS += qmp-commands.h qapi-types.h qapi-visit.h GENERATED_SOURCES += qmp-marshal.c qapi-types.c qapi-visit.c trace.c 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) += sparc-dis.o ###################################################################### # trace +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 += trace-events.o + + ifeq ($(TRACE_BACKEND),dtrace) TRACE_H_EXTRA_DEPS=trace-dtrace.h endif @@ -389,7 +402,7 @@ trace/simple.o: trace/simple.c $(GENERATED_HEADERS) trace-obj-$(CONFIG_TRACE_DTRACE) += trace-dtrace.o ifneq ($(TRACE_BACKEND),dtrace) -trace-obj-y = trace.o +trace-obj-y += trace.o endif trace-nested-$(CONFIG_TRACE_DEFAULT) += 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 ################################################## +# 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 = 0 + else: + enabled = 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] = {\ +""" + for e in events: + print """\ + { .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(), + } + print """\ +}; +""" + + +################################################## # format: h @for_format("h", BEGIN, "Generate .h file") @@ -131,13 +198,6 @@ def trace_h_begin(events): @for_format("h", END) def trace_h_end(events): - for e in events: - if 'disable' in e.properties: - enabled = 0 - else: - enabled = 1 - print "#define TRACE_%s_ENABLED %d" % (e.name.upper(), enabled) - print print '#endif /* TRACE_H */' @@ -154,6 +214,26 @@ def trace_c_begin(events): # backends ################################################## +# 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 @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ís Vilanova + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * 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 */