From 5b808275f3bbe8cc95bb9301f4d5a41331d0e0e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Vilanova?= Date: Tue, 27 May 2014 15:02:14 +0200 Subject: trace: Multi-backend tracing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds support to compile QEMU with multiple tracing backends at the same time. For example, you can compile QEMU with: $ ./configure --enable-trace-backends=ftrace,dtrace Where 'ftrace' can be handy for having an in-flight record of events, and 'dtrace' can be later used to extract more information from the system. This patch allows having both available without recompiling QEMU. Signed-off-by: Lluís Vilanova Signed-off-by: Stefan Hajnoczi --- scripts/tracetool.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'scripts/tracetool.py') diff --git a/scripts/tracetool.py b/scripts/tracetool.py index 5f4890f3ab..83bde7bda9 100755 --- a/scripts/tracetool.py +++ b/scripts/tracetool.py @@ -6,7 +6,7 @@ Command-line wrapper for the tracetool machinery. """ __author__ = "Lluís Vilanova " -__copyright__ = "Copyright 2012, Lluís Vilanova " +__copyright__ = "Copyright 2012-2014, Lluís Vilanova " __license__ = "GPL version 2 or (at your option) any later version" __maintainer__ = "Stefan Hajnoczi" @@ -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= --backend= [] +Usage: %(script)s --format= --backends= [] Backends: %(backends)s @@ -43,7 +43,7 @@ Formats: Options: --help This help message. --list-backends Print list of available backends. - --check-backend Check if the given backend is valid. + --check-backends Check if the given backend is valid. --binary Full path to QEMU binary. --target-type QEMU emulator target type ('system' or 'user'). --target-name QEMU emulator target name. @@ -65,16 +65,17 @@ def main(args): global _SCRIPT _SCRIPT = args[0] - long_opts = [ "backend=", "format=", "help", "list-backends", "check-backend" ] - long_opts += [ "binary=", "target-type=", "target-name=", "probe-prefix=" ] + long_opts = ["backends=", "format=", "help", "list-backends", + "check-backends"] + long_opts += ["binary=", "target-type=", "target-name=", "probe-prefix="] try: opts, args = getopt.getopt(args[1:], "", long_opts) except getopt.GetoptError, err: error_opt(str(err)) - check_backend = False - arg_backend = "" + check_backends = False + arg_backends = [] arg_format = "" binary = None target_type = None @@ -84,8 +85,8 @@ def main(args): if opt == "--help": error_opt() - elif opt == "--backend": - arg_backend = arg + elif opt == "--backends": + arg_backends = arg.split(",") elif opt == "--format": arg_format = arg @@ -93,8 +94,8 @@ def main(args): public_backends = tracetool.backend.get_list(only_public = True) out(", ".join([ b for b,_ in public_backends ])) sys.exit(0) - elif opt == "--check-backend": - check_backend = True + elif opt == "--check-backends": + check_backends = True elif opt == "--binary": binary = arg @@ -108,14 +109,14 @@ def main(args): else: error_opt("unhandled option: %s" % opt) - if arg_backend is None: - error_opt("backend not set") + if len(arg_backends) == 0: + error_opt("no backends specified") - if check_backend: - if tracetool.backend.exists(arg_backend): - sys.exit(0) - else: - sys.exit(1) + if check_backends: + for backend in arg_backends: + if not tracetool.backend.exists(backend): + sys.exit(1) + sys.exit(0) if arg_format == "stap": if binary is None: @@ -126,11 +127,11 @@ def main(args): error_opt("--target-name is required for SystemTAP tapset generator") if probe_prefix is None: - probe_prefix = ".".join([ "qemu", target_type, target_name ]) + probe_prefix = ".".join(["qemu", target_type, target_name]) try: - tracetool.generate(sys.stdin, arg_format, arg_backend, - binary = binary, probe_prefix = probe_prefix) + tracetool.generate(sys.stdin, arg_format, arg_backends, + binary=binary, probe_prefix=probe_prefix) except tracetool.TracetoolError, e: error_opt(str(e)) -- cgit v1.2.1