Annotation of qemu/scripts/tracetool.py, revision 1.1.1.1

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)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.