|
|
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.