From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XHCHS-0000fo-QY for qemu-devel@nongnu.org; Tue, 12 Aug 2014 09:38:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XHCHM-00083Z-Kl for qemu-devel@nongnu.org; Tue, 12 Aug 2014 09:38:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43528) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XHCHM-00083F-42 for qemu-devel@nongnu.org; Tue, 12 Aug 2014 09:38:20 -0400 From: Stefan Hajnoczi Date: Tue, 12 Aug 2014 14:37:45 +0100 Message-Id: <1407850675-11890-9-git-send-email-stefanha@redhat.com> In-Reply-To: <1407850675-11890-1-git-send-email-stefanha@redhat.com> References: <1407850675-11890-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 08/18] trace: [tcg] Add 'tcg' event property 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?= , Stefan Hajnoczi From: Llu=C3=ADs Vilanova Transforms event: tcg name(...) "...", "..." into two internal events: tcg-trans name_trans(...) "..." tcg-exec name_exec(...) "..." Signed-off-by: Llu=C3=ADs Vilanova Signed-off-by: Stefan Hajnoczi --- scripts/tracetool/__init__.py | 64 ++++++++++++++++++++++++++++++= +++--- scripts/tracetool/format/events_h.py | 5 +++ 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.p= y index bd3fd85..de48c80 100644 --- a/scripts/tracetool/__init__.py +++ b/scripts/tracetool/__init__.py @@ -19,6 +19,7 @@ import weakref =20 import tracetool.format import tracetool.backend +import tracetool.transform =20 =20 def error_write(*lines): @@ -137,9 +138,14 @@ class Event(object): The event arguments. """ =20 - _CRE =3D re.compile("((?P.*)\s+)?(?P[^(\s]+)\((?P= [^)]*)\)\s*(?P\".*)?") + _CRE =3D re.compile("((?P.*)\s+)?" + "(?P[^(\s]+)" + "\((?P[^)]*)\)" + "\s*" + "(?:(?:(?P\".+),)?\s*(?P\".+))?" + "\s*") =20 - _VALID_PROPS =3D set(["disable"]) + _VALID_PROPS =3D set(["disable", "tcg", "tcg-trans", "tcg-exec"]) =20 def __init__(self, name, props, fmt, args, orig=3DNone): """ @@ -149,8 +155,8 @@ class Event(object): Event name. props : list of str Property names. - fmt : str - Event printing format. + fmt : str, list of str + Event printing format (or formats). args : Arguments Event arguments. orig : Event or None @@ -170,6 +176,7 @@ class Event(object): if len(unknown_props) > 0: raise ValueError("Unknown properties: %s" % ", ".join(unknown_props)) + assert isinstance(self.fmt, str) or len(self.fmt) =3D=3D 2 =20 def copy(self): """Create a new copy.""" @@ -192,16 +199,32 @@ class Event(object): name =3D groups["name"] props =3D groups["props"].split() fmt =3D groups["fmt"] + fmt_trans =3D groups["fmt_trans"] + if len(fmt_trans) > 0: + fmt =3D [fmt_trans, fmt] args =3D Arguments.build(groups["args"]) =20 + if "tcg-trans" in props: + raise ValueError("Invalid property 'tcg-trans'") + if "tcg-exec" in props: + raise ValueError("Invalid property 'tcg-exec'") + if "tcg" not in props and not isinstance(fmt, str): + raise ValueError("Only events with 'tcg' property can have t= wo formats") + if "tcg" in props and isinstance(fmt, str): + raise ValueError("Events with 'tcg' property must have two f= ormats") + return Event(name, props, fmt, args) =20 def __repr__(self): """Evaluable string representation for this object.""" + if isinstance(self.fmt, str): + fmt =3D self.fmt + else: + fmt =3D "%s, %s" % (self.fmt[0], self.fmt[1]) return "Event('%s %s(%s) %s')" % (" ".join(self.properties), self.name, self.args, - self.fmt) + fmt) =20 QEMU_TRACE =3D "trace_%(name)s" =20 @@ -300,4 +323,35 @@ def generate(fevents, format, backends, =20 events =3D _read_events(fevents) =20 + # transform TCG-enabled events + new_events =3D [] + for event in events: + if "tcg" not in event.properties: + new_events.append(event) + else: + event_trans =3D event.copy() + event_trans.name +=3D "_trans" + event_trans.properties +=3D ["tcg-trans"] + event_trans.fmt =3D event.fmt[0] + args_trans =3D [] + for atrans, aorig in zip( + event_trans.transform(tracetool.transform.TCG_2_HOST= ).args, + event.args): + if atrans =3D=3D aorig: + args_trans.append(atrans) + event_trans.args =3D Arguments(args_trans) + event_trans =3D event_trans.copy() + + event_exec =3D event.copy() + event_exec.name +=3D "_exec" + event_exec.properties +=3D ["tcg-exec"] + event_exec.fmt =3D event.fmt[1] + event_exec =3D event_exec.transform(tracetool.transform.TCG_= 2_HOST) + + new_event =3D [event_trans, event_exec] + event.event_trans, event.event_exec =3D new_event + + new_events.extend(new_event) + events =3D new_events + tracetool.format.generate(events, format, backend) diff --git a/scripts/tracetool/format/events_h.py b/scripts/tracetool/for= mat/events_h.py index 25d913b..9f114a3 100644 --- a/scripts/tracetool/format/events_h.py +++ b/scripts/tracetool/format/events_h.py @@ -40,6 +40,11 @@ def generate(events, backend): enabled =3D 0 else: enabled =3D 1 + if "tcg-trans" in e.properties: + # a single define for the two "sub-events" + out('#define TRACE_%(name)s_ENABLED %(enabled)d', + name=3De.original.original.name.upper(), + enabled=3Denabled) out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) =20 out('#include "trace/event-internal.h"', --=20 1.9.3