Lluís Vilanova writes: > TCG-enabled events start with two format strings. Delay per-argument format > computation until requested ('Event.formats').
ping Without this fix, QEMU does not compile if an entry in trace-events has the "tcg" property. > Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> > --- > scripts/tracetool/__init__.py | 19 ++++++++++--------- > scripts/tracetool/format/ust_events_h.py | 2 +- > 2 files changed, 11 insertions(+), 10 deletions(-) > diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py > index 36c789d..854fb9e 100644 > --- a/scripts/tracetool/__init__.py > +++ b/scripts/tracetool/__init__.py > @@ -136,8 +136,7 @@ class Event(object): > Properties of the event. > args : Arguments > The event arguments. > - arg_fmts : str > - The format strings for each argument. > + > """ > _CRE = re.compile("((?P<props>.*)\s+)?" > @@ -146,11 +145,10 @@ class Event(object): > "\s*" > "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?" > "\s*") > - _FMT = re.compile("(%\w+|%.*PRI\S+)") > _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec"]) > - def __init__(self, name, props, fmt, args, arg_fmts, orig=None): > + def __init__(self, name, props, fmt, args, orig=None): > """ > Parameters > ---------- > @@ -162,8 +160,6 @@ class Event(object): > Event printing format (or formats). > args : Arguments > Event arguments. > - arg_fmts : list of str > - Format strings for each argument. > orig : Event or None > Original Event before transformation. > @@ -172,7 +168,6 @@ class Event(object): > self.properties = props > self.fmt = fmt > self.args = args > - self.arg_fmts = arg_fmts > if orig is None: > self.original = weakref.ref(self) > @@ -210,7 +205,6 @@ class Event(object): > if len(fmt_trans) > 0: > fmt = [fmt_trans, fmt] > args = Arguments.build(groups["args"]) > - arg_fmts = Event._FMT.findall(fmt) > if "tcg-trans" in props: > raise ValueError("Invalid property 'tcg-trans'") > @@ -221,7 +215,7 @@ class Event(object): > if "tcg" in props and isinstance(fmt, str): > raise ValueError("Events with 'tcg' property must have two > formats") > - return Event(name, props, fmt, args, arg_fmts) > + return Event(name, props, fmt, args) > def __repr__(self): > """Evaluable string representation for this object.""" > @@ -234,6 +228,13 @@ class Event(object): > self.args, > fmt) > + _FMT = re.compile("(%\w+|%.*PRI\S+)") > + > + def formats(self): > + """List of argument print formats.""" > + assert not isinstance(self.fmt, list) > + return self._FMT.findall(self.fmt) > + > QEMU_TRACE = "trace_%(name)s" > QEMU_TRACE_TCG = QEMU_TRACE + "_tcg" > diff --git a/scripts/tracetool/format/ust_events_h.py > b/scripts/tracetool/format/ust_events_h.py > index d189899..3e8a7cd 100644 > --- a/scripts/tracetool/format/ust_events_h.py > +++ b/scripts/tracetool/format/ust_events_h.py > @@ -65,7 +65,7 @@ def generate(events, backend): > types = e.args.types() > names = e.args.names() > - fmts = e.arg_fmts > + fmts = e.formats() > for t,n,f in zip(types, names, fmts): > if ('char *' in t) or ('char*' in t): > out(' ctf_string(' + n + ', ' + n + ')') -- "And it's much the same thing with knowledge, for whenever you learn something new, the whole world becomes that much richer." -- The Princess of Pure Reason, as told by Norton Juster in The Phantom Tollbooth