Skip to content

Commit

Permalink
tracetool: add output filename command-line argument
Browse files Browse the repository at this point in the history
The tracetool.py script writes to stdout. This means the output filename
is not available to the script. Add the output filename to the
command-line so that the script has access to the filename.

This also simplifies the tracetool.py invocation. It's no longer
necessary to use meson's custom_build(capture : true) to save output.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20200827142915.108730-2-stefanha@redhat.com>
  • Loading branch information
stefanhaRH committed Jan 4, 2021
1 parent 6745c8a commit c05012a
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 24 deletions.
3 changes: 2 additions & 1 deletion docs/devel/tracing.txt
Expand Up @@ -318,7 +318,8 @@ probes:
--target-type system \
--target-name x86_64 \
--group=all \
trace-events-all >qemu.stp
trace-events-all \
qemu.stp

To facilitate simple usage of systemtap where there merely needs to be printf
logging of certain probes, a helper script "qemu-trace-stap" is provided.
Expand Down
3 changes: 1 addition & 2 deletions meson.build
Expand Up @@ -1901,7 +1901,6 @@ foreach target : target_dirs
custom_target(exe['name'] + stp['ext'],
input: trace_events_all,
output: exe['name'] + stp['ext'],
capture: true,
install: stp['install'],
install_dir: get_option('datadir') / 'systemtap/tapset',
command: [
Expand All @@ -1910,7 +1909,7 @@ foreach target : target_dirs
'--target-name=' + target_name,
'--target-type=' + target_type,
'--probe-prefix=qemu.' + target_type + '.' + target_name,
'@INPUT@',
'@INPUT@', '@OUTPUT@'
])
endforeach
endif
Expand Down
12 changes: 7 additions & 5 deletions scripts/tracetool.py
Expand Up @@ -16,7 +16,7 @@
import sys
import getopt

from tracetool import error_write, out
from tracetool import error_write, out, out_open
import tracetool.backend
import tracetool.format

Expand All @@ -32,7 +32,7 @@ def error_opt(msg = None):
format_descr = "\n".join([ " %-15s %s" % (n, d)
for n,d in tracetool.format.get_list() ])
error_write("""\
Usage: %(script)s --format=<format> --backends=<backends> [<options>]
Usage: %(script)s --format=<format> --backends=<backends> [<options>] <trace-events> ... <output>
Backends:
%(backends)s
Expand Down Expand Up @@ -135,13 +135,15 @@ def main(args):
if probe_prefix is None:
probe_prefix = ".".join(["qemu", target_type, target_name])

if len(args) < 1:
error_opt("missing trace-events filepath")
if len(args) < 2:
error_opt("missing trace-events and output filepaths")
events = []
for arg in args:
for arg in args[:-1]:
with open(arg, "r") as fh:
events.extend(tracetool.read_events(fh, arg))

out_open(args[-1])

try:
tracetool.generate(events, arg_group, arg_format, arg_backends,
binary=binary, probe_prefix=probe_prefix)
Expand Down
18 changes: 16 additions & 2 deletions scripts/tracetool/__init__.py
Expand Up @@ -31,14 +31,28 @@ def error(*lines):
sys.exit(1)


out_filename = '<none>'
out_fobj = sys.stdout

def out_open(filename):
global out_filename, out_fobj
out_filename = filename
out_fobj = open(filename, 'wt')

def out(*lines, **kwargs):
"""Write a set of output lines.
You can use kwargs as a shorthand for mapping variables when formatting all
the strings in lines.
The 'out_filename' kwarg is automatically added with the output filename.
"""
lines = [ l % kwargs for l in lines ]
sys.stdout.writelines("\n".join(lines) + "\n")
output = []
for l in lines:
kwargs['out_filename'] = out_filename
output.append(l % kwargs)

out_fobj.writelines("\n".join(output) + "\n")

# We only want to allow standard C types or fixed sized
# integer types. We don't want QEMU specific types
Expand Down
21 changes: 7 additions & 14 deletions trace/meson.build
Expand Up @@ -11,20 +11,17 @@ foreach dir : [ '.' ] + trace_events_subdirs
trace_h = custom_target(fmt.format('trace', 'h'),
output: fmt.format('trace', 'h'),
input: trace_events_file,
command: [ tracetool, group, '--format=h', '@INPUT@' ],
capture: true)
command: [ tracetool, group, '--format=h', '@INPUT@', '@OUTPUT@' ])
genh += trace_h
trace_c = custom_target(fmt.format('trace', 'c'),
output: fmt.format('trace', 'c'),
input: trace_events_file,
command: [ tracetool, group, '--format=c', '@INPUT@' ],
capture: true)
command: [ tracetool, group, '--format=c', '@INPUT@', '@OUTPUT@' ])
if 'CONFIG_TRACE_UST' in config_host
trace_ust_h = custom_target(fmt.format('trace-ust', 'h'),
output: fmt.format('trace-ust', 'h'),
input: trace_events_file,
command: [ tracetool, group, '--format=ust-events-h', '@INPUT@' ],
capture: true)
command: [ tracetool, group, '--format=ust-events-h', '@INPUT@', '@OUTPUT@' ])
trace_ss.add(trace_ust_h, lttng, urcubp)
genh += trace_ust_h
endif
Expand All @@ -33,8 +30,7 @@ foreach dir : [ '.' ] + trace_events_subdirs
trace_dtrace = custom_target(fmt.format('trace-dtrace', 'dtrace'),
output: fmt.format('trace-dtrace', 'dtrace'),
input: trace_events_file,
command: [ tracetool, group, '--format=d', '@INPUT@' ],
capture: true)
command: [ tracetool, group, '--format=d', '@INPUT@', '@OUTPUT@' ])
trace_dtrace_h = custom_target(fmt.format('trace-dtrace', 'h'),
output: fmt.format('trace-dtrace', 'h'),
input: trace_dtrace,
Expand Down Expand Up @@ -69,22 +65,19 @@ foreach d : [
gen = custom_target(d[0],
output: d[0],
input: meson.source_root() / 'trace-events',
command: [ tracetool, '--group=root', '--format=@0@'.format(d[1]), '@INPUT@' ],
capture: true)
command: [ tracetool, '--group=root', '--format=@0@'.format(d[1]), '@INPUT@', '@OUTPUT@' ])
specific_ss.add(gen)
endforeach

if 'CONFIG_TRACE_UST' in config_host
trace_ust_all_h = custom_target('trace-ust-all.h',
output: 'trace-ust-all.h',
input: trace_events_files,
command: [ tracetool, '--group=all', '--format=ust-events-h', '@INPUT@' ],
capture: true)
command: [ tracetool, '--group=all', '--format=ust-events-h', '@INPUT@', '@OUTPUT@' ])
trace_ust_all_c = custom_target('trace-ust-all.c',
output: 'trace-ust-all.c',
input: trace_events_files,
command: [ tracetool, '--group=all', '--format=ust-events-c', '@INPUT@' ],
capture: true)
command: [ tracetool, '--group=all', '--format=ust-events-c', '@INPUT@', '@OUTPUT@' ])
trace_ss.add(trace_ust_all_h, trace_ust_all_c)
genh += trace_ust_all_h
endif
Expand Down

0 comments on commit c05012a

Please sign in to comment.