import sys
import getopt
+import os.path
+import re
from tracetool import error_write, out
import tracetool.backend
else:
sys.exit(1)
+def make_group_name(filename):
+ dirname = os.path.realpath(os.path.dirname(filename))
+ basedir = os.path.join(os.path.dirname(__file__), os.pardir)
+ basedir = os.path.realpath(os.path.abspath(basedir))
+ dirname = dirname[len(basedir) + 1:]
+
+ if dirname == "":
+ return "common"
+ return re.sub(r"/|-", "_", dirname)
def main(args):
global _SCRIPT
with open(args[0], "r") as fh:
events = tracetool.read_events(fh)
+ group = make_group_name(args[0])
+
try:
- tracetool.generate(events, arg_format, arg_backends,
+ tracetool.generate(events, group, arg_format, arg_backends,
binary=binary, probe_prefix=probe_prefix)
except tracetool.TracetoolError as e:
error_opt(str(e))
return False, None
-def generate(events, format, backends,
+def generate(events, group, format, backends,
binary=None, probe_prefix=None):
"""Generate the output for the given (format, backends) pair.
----------
events : list
list of Event objects to generate for
+ group: str
+ Name of the tracing group
format : str
Output format name.
backends : list
tracetool.backend.dtrace.BINARY = binary
tracetool.backend.dtrace.PROBEPREFIX = probe_prefix
- tracetool.format.generate(events, format, backend)
+ tracetool.format.generate(events, format, backend, group)
if func is not None:
func(*args, **kwargs)
- 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)
- def generate(self, event):
- self._run_function("generate_%s", event)
+ def generate(self, event, group):
+ self._run_function("generate_%s", event, group)
- 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)
return BINARY
-def generate_h_begin(events):
+def generate_h_begin(events, group):
out('#include "trace/generated-tracers-dtrace.h"',
'')
-def generate_h(event):
+def generate_h(event, group):
out(' QEMU_%(uppername)s(%(argnames)s);',
uppername=event.name.upper(),
argnames=", ".join(event.args.names()))
PUBLIC = True
-def generate_h_begin(events):
+def generate_h_begin(events, group):
out('#include "trace/ftrace.h"',
'')
-def generate_h(event):
+def generate_h(event, group):
argnames = ", ".join(event.args.names())
if len(event.args) > 0:
argnames = ", " + argnames
PUBLIC = True
-def generate_h_begin(events):
+def generate_h_begin(events, group):
out('#include "qemu/log.h"',
'')
-def generate_h(event):
+def generate_h(event, group):
argnames = ", ".join(event.args.names())
if len(event.args) > 0:
argnames = ", " + argnames
return False
-def generate_h_begin(events):
+def generate_h_begin(events, group):
for event in events:
out('void _simple_%(api)s(%(args)s);',
api=event.api(),
out('')
-def generate_h(event):
+def generate_h(event, group):
out(' _simple_%(api)s(%(args)s);',
api=event.api(),
args=", ".join(event.args.names()))
-def generate_c_begin(events):
+def generate_c_begin(events, group):
out('#include "qemu/osdep.h"',
'#include "trace.h"',
'#include "trace/control.h"',
'')
-def generate_c(event):
+def generate_c(event, group):
out('void _simple_%(api)s(%(args)s)',
'{',
' TraceBufferRecord rec;',
PUBLIC = True
-def generate_h_begin(events):
+def generate_h_begin(events, group):
out('#include <syslog.h>',
'')
-def generate_h(event):
+def generate_h(event, group):
argnames = ", ".join(event.args.names())
if len(event.args) > 0:
argnames = ", " + argnames
PUBLIC = True
-def generate_h_begin(events):
+def generate_h_begin(events, group):
out('#include <lttng/tracepoint.h>',
'#include "trace/generated-ust-provider.h"',
'')
-def generate_h(event):
+def generate_h(event, group):
argnames = ", ".join(event.args.names())
if len(event.args) > 0:
argnames = ", " + argnames
return tracetool.try_import("tracetool.format." + name)[1]
-def generate(events, format, backend):
+def generate(events, format, backend, group):
if not exists(format):
raise ValueError("unknown format: %s" % format)
format = format.replace("-", "_")
"generate")[1]
if func is None:
raise AttributeError("format has no 'generate': %s" % format)
- func(events, backend)
+ func(events, backend, group)
from tracetool import out
-def generate(events, backend):
+def generate(events, backend, group):
active_events = [e for e in events
if "disable" not in e.properties]
sstate = "TRACE_%s_ENABLED" % e.name.upper(),
dstate = e.api(e.QEMU_DSTATE))
- out('TraceEvent *trace_events[] = {')
+ out('TraceEvent *%(group)s_trace_events[] = {',
+ group = group.lower())
for e in events:
out(' &%(event)s,', event = e.api(e.QEMU_EVENT))
'};',
'')
- 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 = group.lower())
- 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)
)
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disable" not in e.properties]
from tracetool import out
-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"',
enabled=enabled)
out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled))
- backend.generate_begin(events)
+ backend.generate_begin(events, group)
for e in events:
if "vcpu" in e.properties:
cond=cond)
if "disable" not in e.properties:
- backend.generate(e)
+ backend.generate(e, group)
out(' }',
'}')
- backend.generate_end(events)
+ backend.generate_end(events, group)
- out('#endif /* TRACE__GENERATED_TRACERS_H */')
+ out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper())
from tracetool.format.stap import stap_escape
-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',
return identifier
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disable" not in e.properties]
])
-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"',
out('}')
out('',
- '#endif /* TRACE__GENERATED_TCG_TRACERS_H */')
+ '#endif /* TRACE_%s_GENERATED_TCG_TRACERS_H */' % group.upper())
assert False
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disable" not in e.properties]
import tracetool.vcpu
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disable" not in e.properties]
import tracetool.vcpu
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disable" not in e.properties]
from tracetool import out
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disabled" not in e.properties]
from tracetool import out
-def generate(events, backend):
+def generate(events, backend, group):
events = [e for e in events
if "disabled" not in e.properties]
'#undef TRACEPOINT_INCLUDE_FILE',
'#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h',
'',
- '#if !defined (TRACE__GENERATED_UST_H) || defined(TRACEPOINT_HEADER_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 <lttng/tracepoint.h>',
'',
name=e.name)
- out('#endif /* TRACE__GENERATED_UST_H */',
+ out('#endif /* TRACE_%s_GENERATED_UST_H */' % group.upper(),
'',
'/* This part must be outside ifdef protection */',
'#include <lttng/tracepoint-event.h>')