2 # -*- coding: utf-8 -*-
5 Command-line wrapper for the tracetool machinery.
8 __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
9 __copyright__ = "Copyright 2012, Lluís Vilanova <vilanova@ac.upc.edu>"
10 __license__ = "GPL version 2 or (at your option) any later version"
12 __maintainer__ = "Stefan Hajnoczi"
13 __email__ = "stefanha@linux.vnet.ibm.com"
19 from tracetool import error_write, out
20 import tracetool.backend
21 import tracetool.format
26 def error_opt(msg = None):
28 error_write("Error: " + msg + "\n")
30 backend_descr = "\n".join([ " %-15s %s" % (n, d)
31 for n,d in tracetool.backend.get_list() ])
32 format_descr = "\n".join([ " %-15s %s" % (n, d)
33 for n,d in tracetool.format.get_list() ])
35 Usage: %(script)s --format=<format> --backend=<backend> [<options>]
44 --help This help message.
45 --list-backends Print list of available backends.
46 --check-backend Check if the given backend is valid.
47 --binary <path> Full path to QEMU binary.
48 --target-type <type> QEMU emulator target type ('system' or 'user').
49 --target-arch <arch> QEMU emulator target arch.
50 --probe-prefix <prefix> Prefix for dtrace probe names
51 (default: qemu-<target-type>-<target-arch>).\
54 "backends" : backend_descr,
55 "formats" : format_descr,
68 long_opts = [ "backend=", "format=", "help", "list-backends", "check-backend" ]
69 long_opts += [ "binary=", "target-type=", "target-arch=", "probe-prefix=" ]
72 opts, args = getopt.getopt(args[1:], "", long_opts)
73 except getopt.GetoptError, err:
87 elif opt == "--backend":
89 elif opt == "--format":
92 elif opt == "--list-backends":
93 backends = tracetool.backend.get_list()
94 out(", ".join([ b for b,_ in backends ]))
96 elif opt == "--check-backend":
99 elif opt == "--binary":
101 elif opt == '--target-type':
103 elif opt == '--target-arch':
105 elif opt == '--probe-prefix':
109 error_opt("unhandled option: %s" % opt)
111 if arg_backend is None:
112 error_opt("backend not set")
115 if tracetool.backend.exists(arg_backend):
120 if arg_format == "stap":
122 error_opt("--binary is required for SystemTAP tapset generator")
123 if probe_prefix is None and target_type is None:
124 error_opt("--target-type is required for SystemTAP tapset generator")
125 if probe_prefix is None and target_arch is None:
126 error_opt("--target-arch is required for SystemTAP tapset generator")
128 if probe_prefix is None:
129 probe_prefix = ".".join([ "qemu", target_type, target_arch ])
132 tracetool.generate(sys.stdin, arg_format, arg_backend,
133 binary = binary, probe_prefix = probe_prefix)
134 except tracetool.TracetoolError, e:
137 if __name__ == "__main__":