mirror of
				https://git.proxmox.com/git/qemu
				synced 2025-10-31 15:09:27 +00:00 
			
		
		
		
	 662da3854e
			
		
	
	
		662da3854e
		
	
	
	
	
		
			
			The newer "except <exception-type> as <exception>:" syntax is not supported by Python 2.4, we need to use "except <exception-type>, <exception>:". Tested all trace backends with Python 2.4. Reported-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Reviewed-by: Lluís Vilanova <vilanova@ac.upc.edu>
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| """
 | |
| Command-line wrapper for the tracetool machinery.
 | |
| """
 | |
| 
 | |
| __author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
 | |
| __copyright__  = "Copyright 2012, Lluís Vilanova <vilanova@ac.upc.edu>"
 | |
| __license__    = "GPL version 2 or (at your option) any later version"
 | |
| 
 | |
| __maintainer__ = "Stefan Hajnoczi"
 | |
| __email__      = "stefanha@linux.vnet.ibm.com"
 | |
| 
 | |
| 
 | |
| import sys
 | |
| import getopt
 | |
| 
 | |
| from tracetool import error_write, out
 | |
| import tracetool.backend
 | |
| import tracetool.format
 | |
| 
 | |
| 
 | |
| _SCRIPT = ""
 | |
| 
 | |
| def error_opt(msg = None):
 | |
|     if msg is not None:
 | |
|         error_write("Error: " + msg + "\n")
 | |
| 
 | |
|     backend_descr = "\n".join([ "    %-15s %s" % (n, d)
 | |
|                                 for n,d in tracetool.backend.get_list() ])
 | |
|     format_descr = "\n".join([ "    %-15s %s" % (n, d)
 | |
|                                for n,d in tracetool.format.get_list() ])
 | |
|     error_write("""\
 | |
| Usage: %(script)s --format=<format> --backend=<backend> [<options>]
 | |
| 
 | |
| Backends:
 | |
| %(backends)s
 | |
| 
 | |
| Formats:
 | |
| %(formats)s
 | |
| 
 | |
| Options:
 | |
|     --help                   This help message.
 | |
|     --list-backends          Print list of available backends.
 | |
|     --check-backend          Check if the given backend is valid.
 | |
|     --binary <path>          Full path to QEMU binary.
 | |
|     --target-type <type>     QEMU emulator target type ('system' or 'user').
 | |
|     --target-arch <arch>     QEMU emulator target arch.
 | |
|     --probe-prefix <prefix>  Prefix for dtrace probe names
 | |
|                              (default: qemu-<target-type>-<target-arch>).\
 | |
| """ % {
 | |
|             "script" : _SCRIPT,
 | |
|             "backends" : backend_descr,
 | |
|             "formats" : format_descr,
 | |
|             })
 | |
| 
 | |
|     if msg is None:
 | |
|         sys.exit(0)
 | |
|     else:
 | |
|         sys.exit(1)
 | |
| 
 | |
| 
 | |
| def main(args):
 | |
|     global _SCRIPT
 | |
|     _SCRIPT = args[0]
 | |
| 
 | |
|     long_opts  = [ "backend=", "format=", "help", "list-backends", "check-backend" ]
 | |
|     long_opts += [ "binary=", "target-type=", "target-arch=", "probe-prefix=" ]
 | |
| 
 | |
|     try:
 | |
|         opts, args = getopt.getopt(args[1:], "", long_opts)
 | |
|     except getopt.GetoptError, err:
 | |
|         error_opt(str(err))
 | |
| 
 | |
|     check_backend = False
 | |
|     arg_backend = ""
 | |
|     arg_format = ""
 | |
|     binary = None
 | |
|     target_type = None
 | |
|     target_arch = None
 | |
|     probe_prefix = None
 | |
|     for opt, arg in opts:
 | |
|         if opt == "--help":
 | |
|             error_opt()
 | |
| 
 | |
|         elif opt == "--backend":
 | |
|             arg_backend = arg
 | |
|         elif opt == "--format":
 | |
|             arg_format = arg
 | |
| 
 | |
|         elif opt == "--list-backends":
 | |
|             backends = tracetool.backend.get_list()
 | |
|             out(", ".join([ b for b,_ in backends ]))
 | |
|             sys.exit(0)
 | |
|         elif opt == "--check-backend":
 | |
|             check_backend = True
 | |
| 
 | |
|         elif opt == "--binary":
 | |
|             binary = arg
 | |
|         elif opt == '--target-type':
 | |
|             target_type = arg
 | |
|         elif opt == '--target-arch':
 | |
|             target_arch = arg
 | |
|         elif opt == '--probe-prefix':
 | |
|             probe_prefix = arg
 | |
| 
 | |
|         else:
 | |
|             error_opt("unhandled option: %s" % opt)
 | |
| 
 | |
|     if arg_backend is None:
 | |
|         error_opt("backend not set")
 | |
| 
 | |
|     if check_backend:
 | |
|         if tracetool.backend.exists(arg_backend):
 | |
|             sys.exit(0)
 | |
|         else:
 | |
|             sys.exit(1)
 | |
| 
 | |
|     if arg_format == "stap":
 | |
|         if binary is None:
 | |
|             error_opt("--binary is required for SystemTAP tapset generator")
 | |
|         if probe_prefix is None and target_type is None:
 | |
|             error_opt("--target-type is required for SystemTAP tapset generator")
 | |
|         if probe_prefix is None and target_arch is None:
 | |
|             error_opt("--target-arch is required for SystemTAP tapset generator")
 | |
| 
 | |
|         if probe_prefix is None:
 | |
|             probe_prefix = ".".join([ "qemu", target_type, target_arch ])
 | |
| 
 | |
|     try:
 | |
|         tracetool.generate(sys.stdin, arg_format, arg_backend,
 | |
|                            binary = binary, probe_prefix = probe_prefix)
 | |
|     except tracetool.TracetoolError, e:
 | |
|         error_opt(str(e))
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main(sys.argv)
 |