From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33287) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WG9Lj-00066Z-5x for qemu-devel@nongnu.org; Wed, 19 Feb 2014 10:46:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WG9Lf-0005fT-7D for qemu-devel@nongnu.org; Wed, 19 Feb 2014 10:46:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38201) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WG9Le-0005fO-VH for qemu-devel@nongnu.org; Wed, 19 Feb 2014 10:46:11 -0500 From: Stefan Hajnoczi Date: Wed, 19 Feb 2014 16:45:55 +0100 Message-Id: <1392824759-7093-3-git-send-email-stefanha@redhat.com> In-Reply-To: <1392824759-7093-1-git-send-email-stefanha@redhat.com> References: <1392824759-7093-1-git-send-email-stefanha@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 2/6] Modified the tracetool framework for LTTng 2.x List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Llu=C3=ADs=20Vilanova?= , Anthony Liguori From: Mohamad Gebai * A new format is required to generate definitions for ust tracepoints. Files ust_events_h.py and ust_events_c.py define common macros, while new function ust_events_h in events.py does the actual definition of each tracepoint. * ust.py generates the new interface for calling userspace tracepoints with LTTng 2.x, replacing trace_name(args) to tracepoint(name, args). * As explained in ust_events_c.py, -Wredundant-decls gives a warning when compiling with gcc 4.7 or older. This is specific to lttng-ust so for now use a pragma clause to avoid getting a warning. Signed-off-by: Mohamad Gebai Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Stefan Hajnoczi --- scripts/tracetool/backend/ust.py | 101 ++++++++++++++-----------= ------ scripts/tracetool/format/ust_events_c.py | 30 +++++++++ scripts/tracetool/format/ust_events_h.py | 57 +++++++++++++++++ 3 files changed, 132 insertions(+), 56 deletions(-) create mode 100644 scripts/tracetool/format/ust_events_c.py create mode 100644 scripts/tracetool/format/ust_events_h.py diff --git a/scripts/tracetool/backend/ust.py b/scripts/tracetool/backend= /ust.py index ea36995..41c1c75 100644 --- a/scripts/tracetool/backend/ust.py +++ b/scripts/tracetool/backend/ust.py @@ -18,76 +18,65 @@ from tracetool import out =20 PUBLIC =3D True =20 - def c(events): - out('#include ', - '#undef mutex_lock', - '#undef mutex_unlock', - '#undef inline', - '#undef wmb', - '#include "trace.h"') + pass + =20 +def h(events): + out('#include ', + '#include "trace/generated-ust-provider.h"', + '') for e in events: argnames =3D ", ".join(e.args.names()) if len(e.args) > 0: - argnames =3D ', ' + argnames - - out('DEFINE_TRACE(ust_%(name)s);', - '', - 'static void ust_%(name)s_probe(%(args)s)', - '{', - ' trace_mark(ust, %(name)s, %(fmt)s%(argnames)s);', - '}', - name =3D e.name, - args =3D e.args, - fmt =3D e.fmt, - argnames =3D argnames, - ) - - else: - out('DEFINE_TRACE(ust_%(name)s);', - '', - 'static void ust_%(name)s_probe(%(args)s)', - '{', - ' trace_mark(ust, %(name)s, UST_MARKER_NOARGS);', - '}', - name =3D e.name, - args =3D e.args, - ) - - # register probes - out('', - 'static void __attribute__((constructor)) trace_init(void)', - '{') + argnames =3D ", " + argnames =20 - for e in events: - out(' register_trace_ust_%(name)s(ust_%(name)s_probe);', + out('static inline void trace_%(name)s(%(args)s)', + '{', + ' tracepoint(qemu, %(name)s%(tp_args)s);', + '}', + '', name =3D e.name, + args =3D e.args, + tp_args =3D argnames, ) =20 - out('}') - - -def h(events): - out('#include ', - '#undef mutex_lock', - '#undef mutex_unlock', - '#undef inline', - '#undef wmb') +def ust_events_c(events): + pass =20 +def ust_events_h(events): for e in events: if len(e.args) > 0: - out('DECLARE_TRACE(ust_%(name)s, TP_PROTO(%(args)s), TP_ARGS= (%(argnames)s));', - '#define trace_%(name)s trace_ust_%(name)s', + out('TRACEPOINT_EVENT(', + ' qemu,', + ' %(name)s,', + ' TP_ARGS(%(args)s),', + ' TP_FIELDS(', name =3D e.name, - args =3D e.args, - argnames =3D ", ".join(e.args.names()), + args =3D ", ".join(", ".join(i) for i in e.args), ) =20 + for t,n in e.args: + if ('int' in t) or ('long' in t) or ('unsigned' in t) or= ('size_t' in t): + out(' ctf_integer(' + t + ', ' + n + ', ' + n = + ')') + elif ('double' in t) or ('float' in t): + out(' ctf_float(' + t + ', ' + n + ', ' + n + = ')') + elif ('char *' in t) or ('char*' in t): + out(' ctf_string(' + n + ', ' + n + ')') + elif ('void *' in t) or ('void*' in t): + out(' ctf_integer_hex(unsigned long, ' + n + '= , ' + n + ')') + + out(' )', + ')', + '') + else: - out('_DECLARE_TRACEPOINT_NOARGS(ust_%(name)s);', - '#define trace_%(name)s trace_ust_%(name)s', + out('TRACEPOINT_EVENT(', + ' qemu,', + ' %(name)s,', + ' TP_ARGS(void),', + ' TP_FIELDS()', + ')', + '', name =3D e.name, - ) - - out() + ) \ No newline at end of file diff --git a/scripts/tracetool/format/ust_events_c.py b/scripts/tracetool= /format/ust_events_c.py new file mode 100644 index 0000000..116e713 --- /dev/null +++ b/scripts/tracetool/format/ust_events_c.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Generate .c for LTTng ust event description. +""" + +__author__ =3D "Mohamad Gebai " +__copyright__ =3D "Copyright 2012, Mohamad Gebai " +__license__ =3D "GPL version 2 or (at your option) any later version" + +__maintainer__ =3D "Stefan Hajnoczi" +__email__ =3D "stefanha@redhat.com" + + +from tracetool import out + + +def begin(events): + out('/* This file is autogenerated by tracetool, do not edit. */', + '', + '#define TRACEPOINT_DEFINE', + '#define TRACEPOINT_CREATE_PROBES', + '', + '/* If gcc version 4.7 or older is used, LTTng ust gives a warni= ng when compiling with', + ' -Wredundant-decls.', + ' */', + '#pragma GCC diagnostic ignored "-Wredundant-decls"', + '', + '#include "generated-ust-provider.h"') diff --git a/scripts/tracetool/format/ust_events_h.py b/scripts/tracetool= /format/ust_events_h.py new file mode 100644 index 0000000..f206eca --- /dev/null +++ b/scripts/tracetool/format/ust_events_h.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Generate .h for LTTng ust event description. +""" + +__author__ =3D "Mohamad Gebai " +__copyright__ =3D "Copyright 2012, Mohamad Gebai " +__license__ =3D "GPL version 2 or (at your option) any later version" + +__maintainer__ =3D "Stefan Hajnoczi" +__email__ =3D "stefanha@redhat.com" + + +from tracetool import out + + +def begin(events): + out('/* This file is autogenerated by tracetool, do not edit. */', + '', + '#undef TRACEPOINT_PROVIDER', + '#define TRACEPOINT_PROVIDER qemu', + '', + '#undef TRACEPOINT_INCLUDE_FILE', + '#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h', + '', + '#if !defined (TRACE__GENERATED_UST_H) || defined(TRACEPOINT_HEA= DER_MULTI_READ)', + '#define TRACE__GENERATED_UST_H', + '', + '#include "qemu-common.h"', + '#include ', + '', + '/*', + ' * LTTng ust 2.0 does not allow you to use TP_ARGS(void) for tr= acepoints', + ' * requiring no arguments. We define these macros introduced in= more recent' + ' * versions of LTTng ust as a workaround', + ' */', + '#ifndef _TP_EXPROTO1', + '#define _TP_EXPROTO1(a) void', + '#endif', + '#ifndef _TP_EXDATA_PROTO1', + '#define _TP_EXDATA_PROTO1(a) void *__tp_data', + '#endif', + '#ifndef _TP_EXDATA_VAR1', + '#define _TP_EXDATA_VAR1(a) __tp_data', + '#endif', + '#ifndef _TP_EXVAR1', + '#define _TP_EXVAR1(a)', + '#endif', + '') + +def end(events): + out('#endif /* TRACE__GENERATED_UST_H */', + '', + '/* This part must be outside ifdef protection */', + '#include ') --=20 1.8.5.3