From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bsS70-0004W4-U8 for qemu-devel@nongnu.org; Fri, 07 Oct 2016 06:10:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bsS6w-0004nf-BO for qemu-devel@nongnu.org; Fri, 07 Oct 2016 06:10:41 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48114) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bsS6v-0004nT-Vj for qemu-devel@nongnu.org; Fri, 07 Oct 2016 06:10:38 -0400 From: Stefan Hajnoczi Date: Fri, 7 Oct 2016 11:09:38 +0100 Message-Id: <1475834979-4980-20-git-send-email-stefanha@redhat.com> In-Reply-To: <1475834979-4980-1-git-send-email-stefanha@redhat.com> References: <1475834979-4980-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 19/20] trace: introduce a formal group name for trace events List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , "Daniel P. Berrange" , Stefan Hajnoczi From: "Daniel P. Berrange" The declarations in the generated-tracers.h file are assuming there's only ever going to be one instance of this header, as they are not namespaced. When we have one header per event group, if a single source file needs to include multiple sets of trace events, the symbols will all clash. This change thus introduces a '--group NAME' arg to the 'tracetool' program. This will cause all the symbols in the generated header files to be given a unique namespace. If no group is given, the group name 'common' is used, which is suitable for the current usage where there is only one global trace-events file used for code generation. Reviewed-by: Stefan Hajnoczi Signed-off-by: Daniel P. Berrange Reviewed-by: Llu=C3=ADs Vilanova Message-id: 1475588159-30598-21-git-send-email-berrange@redhat.com Signed-off-by: Stefan Hajnoczi --- scripts/tracetool.py | 15 ++++++++++++++- scripts/tracetool/__init__.py | 6 ++++-- scripts/tracetool/backend/__init__.py | 12 ++++++------ scripts/tracetool/backend/dtrace.py | 4 ++-- scripts/tracetool/backend/ftrace.py | 4 ++-- scripts/tracetool/backend/log.py | 4 ++-- scripts/tracetool/backend/simple.py | 8 ++++---- scripts/tracetool/backend/syslog.py | 4 ++-- scripts/tracetool/backend/ust.py | 4 ++-- scripts/tracetool/format/__init__.py | 4 ++-- scripts/tracetool/format/c.py | 18 ++++++++++-------- scripts/tracetool/format/d.py | 2 +- scripts/tracetool/format/h.py | 14 +++++++------- scripts/tracetool/format/simpletrace_stap.py | 2 +- scripts/tracetool/format/stap.py | 2 +- scripts/tracetool/format/tcg_h.py | 8 ++++---- scripts/tracetool/format/tcg_helper_c.py | 2 +- scripts/tracetool/format/tcg_helper_h.py | 2 +- scripts/tracetool/format/tcg_helper_wrapper_h.py | 2 +- scripts/tracetool/format/ust_events_c.py | 2 +- scripts/tracetool/format/ust_events_h.py | 9 +++++---- 21 files changed, 73 insertions(+), 55 deletions(-) diff --git a/scripts/tracetool.py b/scripts/tracetool.py index f66e767..629b259 100755 --- a/scripts/tracetool.py +++ b/scripts/tracetool.py @@ -15,6 +15,8 @@ __email__ =3D "stefanha@linux.vnet.ibm.com" =20 import sys import getopt +import os.path +import re =20 from tracetool import error_write, out import tracetool.backend @@ -60,6 +62,15 @@ Options: else: sys.exit(1) =20 +def make_group_name(filename): + dirname =3D os.path.realpath(os.path.dirname(filename)) + basedir =3D os.path.join(os.path.dirname(__file__), os.pardir) + basedir =3D os.path.realpath(os.path.abspath(basedir)) + dirname =3D dirname[len(basedir) + 1:] + + if dirname =3D=3D "": + return "common" + return re.sub(r"/|-", "_", dirname) =20 def main(args): global _SCRIPT @@ -134,8 +145,10 @@ def main(args): with open(args[0], "r") as fh: events =3D tracetool.read_events(fh) =20 + group =3D make_group_name(args[0]) + try: - tracetool.generate(events, arg_format, arg_backends, + tracetool.generate(events, group, arg_format, arg_backends, binary=3Dbinary, probe_prefix=3Dprobe_prefix) except tracetool.TracetoolError as e: error_opt(str(e)) diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.p= y index ac2cb8f..365446f 100644 --- a/scripts/tracetool/__init__.py +++ b/scripts/tracetool/__init__.py @@ -364,7 +364,7 @@ def try_import(mod_name, attr_name=3DNone, attr_defau= lt=3DNone): return False, None =20 =20 -def generate(events, format, backends, +def generate(events, group, format, backends, binary=3DNone, probe_prefix=3DNone): """Generate the output for the given (format, backends) pair. =20 @@ -372,6 +372,8 @@ def generate(events, format, backends, ---------- events : list list of Event objects to generate for + group: str + Name of the tracing group format : str Output format name. backends : list @@ -401,4 +403,4 @@ def generate(events, format, backends, tracetool.backend.dtrace.BINARY =3D binary tracetool.backend.dtrace.PROBEPREFIX =3D probe_prefix =20 - tracetool.format.generate(events, format, backend) + tracetool.format.generate(events, format, backend, group) diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/ba= ckend/__init__.py index d4b6dab..f735a25 100644 --- a/scripts/tracetool/backend/__init__.py +++ b/scripts/tracetool/backend/__init__.py @@ -113,11 +113,11 @@ class Wrapper: if func is not None: func(*args, **kwargs) =20 - def generate_begin(self, events): - self._run_function("generate_%s_begin", events) + def generate_begin(self, events, group): + self._run_function("generate_%s_begin", events, group) =20 - def generate(self, event): - self._run_function("generate_%s", event) + def generate(self, event, group): + self._run_function("generate_%s", event, group) =20 - def generate_end(self, events): - self._run_function("generate_%s_end", events) + def generate_end(self, events, group): + self._run_function("generate_%s_end", events, group) diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/back= end/dtrace.py index ab9ecfa..79505c6 100644 --- a/scripts/tracetool/backend/dtrace.py +++ b/scripts/tracetool/backend/dtrace.py @@ -35,12 +35,12 @@ def binary(): return BINARY =20 =20 -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include "trace/generated-tracers-dtrace.h"', '') =20 =20 -def generate_h(event): +def generate_h(event, group): out(' QEMU_%(uppername)s(%(argnames)s);', uppername=3Devent.name.upper(), argnames=3D", ".join(event.args.names())) diff --git a/scripts/tracetool/backend/ftrace.py b/scripts/tracetool/back= end/ftrace.py index 4b83b44..db9fe7a 100644 --- a/scripts/tracetool/backend/ftrace.py +++ b/scripts/tracetool/backend/ftrace.py @@ -19,12 +19,12 @@ from tracetool import out PUBLIC =3D True =20 =20 -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include "trace/ftrace.h"', '') =20 =20 -def generate_h(event): +def generate_h(event, group): argnames =3D ", ".join(event.args.names()) if len(event.args) > 0: argnames =3D ", " + argnames diff --git a/scripts/tracetool/backend/log.py b/scripts/tracetool/backend= /log.py index 426bb6e..4f4a4d3 100644 --- a/scripts/tracetool/backend/log.py +++ b/scripts/tracetool/backend/log.py @@ -19,12 +19,12 @@ from tracetool import out PUBLIC =3D True =20 =20 -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include "qemu/log.h"', '') =20 =20 -def generate_h(event): +def generate_h(event, group): argnames =3D ", ".join(event.args.names()) if len(event.args) > 0: argnames =3D ", " + argnames diff --git a/scripts/tracetool/backend/simple.py b/scripts/tracetool/back= end/simple.py index 1114e35..9885e83 100644 --- a/scripts/tracetool/backend/simple.py +++ b/scripts/tracetool/backend/simple.py @@ -27,7 +27,7 @@ def is_string(arg): return False =20 =20 -def generate_h_begin(events): +def generate_h_begin(events, group): for event in events: out('void _simple_%(api)s(%(args)s);', api=3Devent.api(), @@ -35,13 +35,13 @@ def generate_h_begin(events): out('') =20 =20 -def generate_h(event): +def generate_h(event, group): out(' _simple_%(api)s(%(args)s);', api=3Devent.api(), args=3D", ".join(event.args.names())) =20 =20 -def generate_c_begin(events): +def generate_c_begin(events, group): out('#include "qemu/osdep.h"', '#include "trace.h"', '#include "trace/control.h"', @@ -49,7 +49,7 @@ def generate_c_begin(events): '') =20 =20 -def generate_c(event): +def generate_c(event, group): out('void _simple_%(api)s(%(args)s)', '{', ' TraceBufferRecord rec;', diff --git a/scripts/tracetool/backend/syslog.py b/scripts/tracetool/back= end/syslog.py index 5f693bd..b8ff279 100644 --- a/scripts/tracetool/backend/syslog.py +++ b/scripts/tracetool/backend/syslog.py @@ -19,12 +19,12 @@ from tracetool import out PUBLIC =3D True =20 =20 -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include ', '') =20 =20 -def generate_h(event): +def generate_h(event, group): argnames =3D ", ".join(event.args.names()) if len(event.args) > 0: argnames =3D ", " + argnames diff --git a/scripts/tracetool/backend/ust.py b/scripts/tracetool/backend= /ust.py index ed4c227..4594db6 100644 --- a/scripts/tracetool/backend/ust.py +++ b/scripts/tracetool/backend/ust.py @@ -19,13 +19,13 @@ from tracetool import out PUBLIC =3D True =20 =20 -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include ', '#include "trace/generated-ust-provider.h"', '') =20 =20 -def generate_h(event): +def generate_h(event, group): argnames =3D ", ".join(event.args.names()) if len(event.args) > 0: argnames =3D ", " + argnames diff --git a/scripts/tracetool/format/__init__.py b/scripts/tracetool/for= mat/__init__.py index 812570f..cf6e0e2 100644 --- a/scripts/tracetool/format/__init__.py +++ b/scripts/tracetool/format/__init__.py @@ -74,7 +74,7 @@ def exists(name): return tracetool.try_import("tracetool.format." + name)[1] =20 =20 -def generate(events, format, backend): +def generate(events, format, backend, group): if not exists(format): raise ValueError("unknown format: %s" % format) format =3D format.replace("-", "_") @@ -82,4 +82,4 @@ def generate(events, format, backend): "generate")[1] if func is None: raise AttributeError("format has no 'generate': %s" % format) - func(events, backend) + func(events, backend, group) diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.p= y index 7ac6d4c..47115ed 100644 --- a/scripts/tracetool/format/c.py +++ b/scripts/tracetool/format/c.py @@ -16,7 +16,7 @@ __email__ =3D "stefanha@linux.vnet.ibm.com" from tracetool import out =20 =20 -def generate(events, backend): +def generate(events, backend, group): active_events =3D [e for e in events if "disable" not in e.properties] =20 @@ -47,7 +47,8 @@ def generate(events, backend): sstate =3D "TRACE_%s_ENABLED" % e.name.upper(), dstate =3D e.api(e.QEMU_DSTATE)) =20 - out('TraceEvent *trace_events[] =3D {') + out('TraceEvent *%(group)s_trace_events[] =3D {', + group =3D group.lower()) =20 for e in events: out(' &%(event)s,', event =3D e.api(e.QEMU_EVENT)) @@ -56,13 +57,14 @@ def generate(events, backend): '};', '') =20 - out('static void trace_register_events(void)', + out('static void trace_%(group)s_register_events(void)', '{', - ' trace_event_register_group(trace_events);', + ' trace_event_register_group(%(group)s_trace_events);', '}', - 'trace_init(trace_register_events)') + 'trace_init(trace_%(group)s_register_events)', + group =3D group.lower()) =20 - backend.generate_begin(active_events) + backend.generate_begin(active_events, group) for event in active_events: - backend.generate(event) - backend.generate_end(active_events) + backend.generate(event, group) + backend.generate_end(active_events, group) diff --git a/scripts/tracetool/format/d.py b/scripts/tracetool/format/d.p= y index c77d5b7..78397c2 100644 --- a/scripts/tracetool/format/d.py +++ b/scripts/tracetool/format/d.py @@ -29,7 +29,7 @@ RESERVED_WORDS =3D ( ) =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disable" not in e.properties] =20 diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.p= y index f4748c3..3682f4e 100644 --- a/scripts/tracetool/format/h.py +++ b/scripts/tracetool/format/h.py @@ -16,11 +16,11 @@ __email__ =3D "stefanha@linux.vnet.ibm.com" from tracetool import out =20 =20 -def generate(events, backend): +def generate(events, backend, group): out('/* This file is autogenerated by tracetool, do not edit. */', '', - '#ifndef TRACE__GENERATED_TRACERS_H', - '#define TRACE__GENERATED_TRACERS_H', + '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(), + '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(), '', '#include "qemu-common.h"', '#include "trace/control.h"', @@ -46,7 +46,7 @@ def generate(events, backend): enabled=3Denabled) out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) =20 - backend.generate_begin(events) + backend.generate_begin(events, group) =20 for e in events: if "vcpu" in e.properties: @@ -68,11 +68,11 @@ def generate(events, backend): cond=3Dcond) =20 if "disable" not in e.properties: - backend.generate(e) + backend.generate(e, group) =20 out(' }', '}') =20 - backend.generate_end(events) + backend.generate_end(events, group) =20 - out('#endif /* TRACE__GENERATED_TRACERS_H */') + out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper()) diff --git a/scripts/tracetool/format/simpletrace_stap.py b/scripts/trace= tool/format/simpletrace_stap.py index ac3580f..c35e662 100644 --- a/scripts/tracetool/format/simpletrace_stap.py +++ b/scripts/tracetool/format/simpletrace_stap.py @@ -19,7 +19,7 @@ from tracetool.backend.simple import is_string from tracetool.format.stap import stap_escape =20 =20 -def generate(events, backend): +def generate(events, backend, group): out('/* This file is autogenerated by tracetool, do not edit. */', '', 'global event_name_to_id_map', diff --git a/scripts/tracetool/format/stap.py b/scripts/tracetool/format/= stap.py index 9e780f1..e8ef3e7 100644 --- a/scripts/tracetool/format/stap.py +++ b/scripts/tracetool/format/stap.py @@ -34,7 +34,7 @@ def stap_escape(identifier): return identifier =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disable" not in e.properties] =20 diff --git a/scripts/tracetool/format/tcg_h.py b/scripts/tracetool/format= /tcg_h.py index e2331f2..5f213f6 100644 --- a/scripts/tracetool/format/tcg_h.py +++ b/scripts/tracetool/format/tcg_h.py @@ -27,12 +27,12 @@ def vcpu_transform_args(args): ]) =20 =20 -def generate(events, backend): +def generate(events, backend, group): out('/* This file is autogenerated by tracetool, do not edit. */', '/* You must include this file after the inclusion of helper.h *= /', '', - '#ifndef TRACE__GENERATED_TCG_TRACERS_H', - '#define TRACE__GENERATED_TCG_TRACERS_H', + '#ifndef TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(), + '#define TRACE_%s_GENERATED_TCG_TRACERS_H' % group.upper(), '', '#include "trace.h"', '#include "exec/helper-proto.h"', @@ -63,4 +63,4 @@ def generate(events, backend): out('}') =20 out('', - '#endif /* TRACE__GENERATED_TCG_TRACERS_H */') + '#endif /* TRACE_%s_GENERATED_TCG_TRACERS_H */' % group.upper()) diff --git a/scripts/tracetool/format/tcg_helper_c.py b/scripts/tracetool= /format/tcg_helper_c.py index e3485b7..cc26e03 100644 --- a/scripts/tracetool/format/tcg_helper_c.py +++ b/scripts/tracetool/format/tcg_helper_c.py @@ -40,7 +40,7 @@ def vcpu_transform_args(args, mode): assert False =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disable" not in e.properties] =20 diff --git a/scripts/tracetool/format/tcg_helper_h.py b/scripts/tracetool= /format/tcg_helper_h.py index dc76c15..6b184b6 100644 --- a/scripts/tracetool/format/tcg_helper_h.py +++ b/scripts/tracetool/format/tcg_helper_h.py @@ -18,7 +18,7 @@ from tracetool.transform import * import tracetool.vcpu =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disable" not in e.properties] =20 diff --git a/scripts/tracetool/format/tcg_helper_wrapper_h.py b/scripts/t= racetool/format/tcg_helper_wrapper_h.py index 020f442..ff53447 100644 --- a/scripts/tracetool/format/tcg_helper_wrapper_h.py +++ b/scripts/tracetool/format/tcg_helper_wrapper_h.py @@ -18,7 +18,7 @@ from tracetool.transform import * import tracetool.vcpu =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disable" not in e.properties] =20 diff --git a/scripts/tracetool/format/ust_events_c.py b/scripts/tracetool= /format/ust_events_c.py index 9967c7a..cd87d8a 100644 --- a/scripts/tracetool/format/ust_events_c.py +++ b/scripts/tracetool/format/ust_events_c.py @@ -16,7 +16,7 @@ __email__ =3D "stefanha@redhat.com" from tracetool import out =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disabled" not in e.properties] =20 diff --git a/scripts/tracetool/format/ust_events_h.py b/scripts/tracetool= /format/ust_events_h.py index 3e8a7cd..d853155 100644 --- a/scripts/tracetool/format/ust_events_h.py +++ b/scripts/tracetool/format/ust_events_h.py @@ -16,7 +16,7 @@ __email__ =3D "stefanha@redhat.com" from tracetool import out =20 =20 -def generate(events, backend): +def generate(events, backend, group): events =3D [e for e in events if "disabled" not in e.properties] =20 @@ -28,8 +28,9 @@ def generate(events, backend): '#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', + '#if !defined (TRACE_%s_GENERATED_UST_H) || \\' % group.upper()= , + ' defined(TRACEPOINT_HEADER_MULTI_READ)', + '#define TRACE_%s_GENERATED_UST_H' % group.upper(), '', '#include "qemu-common.h"', '#include ', @@ -94,7 +95,7 @@ def generate(events, backend): '', name=3De.name) =20 - out('#endif /* TRACE__GENERATED_UST_H */', + out('#endif /* TRACE_%s_GENERATED_UST_H */' % group.upper(), '', '/* This part must be outside ifdef protection */', '#include ') --=20 2.7.4