|
|
1.1 root 1: #!/usr/bin/env python
2: # -*- coding: utf-8 -*-
3:
4: """
5: Command-line wrapper for the tracetool machinery.
6: """
7:
8: __author__ = "Lluís Vilanova <[email protected]>"
9: __copyright__ = "Copyright 2012, Lluís Vilanova <[email protected]>"
10: __license__ = "GPL version 2 or (at your option) any later version"
11:
12: __maintainer__ = "Stefan Hajnoczi"
13: __email__ = "[email protected]"
14:
15:
16: import sys
17: import getopt
18:
19: from tracetool import error_write, out
20: import tracetool.backend
21: import tracetool.format
22:
23:
24: _SCRIPT = ""
25:
26: def error_opt(msg = None):
27: if msg is not None:
28: error_write("Error: " + msg + "\n")
29:
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() ])
34: error_write("""\
35: Usage: %(script)s --format=<format> --backend=<backend> [<options>]
36:
37: Backends:
38: %(backends)s
39:
40: Formats:
41: %(formats)s
42:
43: 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>).\
52: """ % {
53: "script" : _SCRIPT,
54: "backends" : backend_descr,
55: "formats" : format_descr,
56: })
57:
58: if msg is None:
59: sys.exit(0)
60: else:
61: sys.exit(1)
62:
63:
64: def main(args):
65: global _SCRIPT
66: _SCRIPT = args[0]
67:
68: long_opts = [ "backend=", "format=", "help", "list-backends", "check-backend" ]
69: long_opts += [ "binary=", "target-type=", "target-arch=", "probe-prefix=" ]
70:
71: try:
72: opts, args = getopt.getopt(args[1:], "", long_opts)
73: except getopt.GetoptError, err:
74: error_opt(str(err))
75:
76: check_backend = False
77: arg_backend = ""
78: arg_format = ""
79: binary = None
80: target_type = None
81: target_arch = None
82: probe_prefix = None
83: for opt, arg in opts:
84: if opt == "--help":
85: error_opt()
86:
87: elif opt == "--backend":
88: arg_backend = arg
89: elif opt == "--format":
90: arg_format = arg
91:
92: elif opt == "--list-backends":
93: backends = tracetool.backend.get_list()
94: out(", ".join([ b for b,_ in backends ]))
95: sys.exit(0)
96: elif opt == "--check-backend":
97: check_backend = True
98:
99: elif opt == "--binary":
100: binary = arg
101: elif opt == '--target-type':
102: target_type = arg
103: elif opt == '--target-arch':
104: target_arch = arg
105: elif opt == '--probe-prefix':
106: probe_prefix = arg
107:
108: else:
109: error_opt("unhandled option: %s" % opt)
110:
111: if arg_backend is None:
112: error_opt("backend not set")
113:
114: if check_backend:
115: if tracetool.backend.exists(arg_backend):
116: sys.exit(0)
117: else:
118: sys.exit(1)
119:
120: if arg_format == "stap":
121: if binary is None:
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")
127:
128: if probe_prefix is None:
129: probe_prefix = ".".join([ "qemu", target_type, target_arch ])
130:
131: try:
132: tracetool.generate(sys.stdin, arg_format, arg_backend,
133: binary = binary, probe_prefix = probe_prefix)
134: except tracetool.TracetoolError, e:
135: error_opt(str(e))
136:
137: if __name__ == "__main__":
138: main(sys.argv)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.