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 public_backends
= tracetool
.backend
.get_list(only_public
= True)
94 out(", ".join([ b
for b
,_
in public_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__":