mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 a76ccf3c1c
			
		
	
	
		a76ccf3c1c
		
	
	
	
	
		
			
			SystemTap reserved words sometimes conflict with QEMU variable names. We escape them to prevent conflicts. Move escaping into its own function so the next patch can reuse it. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| """
 | |
| Generate .stp file (DTrace with SystemTAP only).
 | |
| """
 | |
| 
 | |
| __author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
 | |
| __copyright__  = "Copyright 2012-2014, 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"
 | |
| 
 | |
| 
 | |
| from tracetool import out
 | |
| from tracetool.backend.dtrace import binary, probeprefix
 | |
| 
 | |
| 
 | |
| # Technically 'self' is not used by systemtap yet, but
 | |
| # they recommended we keep it in the reserved list anyway
 | |
| RESERVED_WORDS = (
 | |
|     'break', 'catch', 'continue', 'delete', 'else', 'for',
 | |
|     'foreach', 'function', 'global', 'if', 'in', 'limit',
 | |
|     'long', 'next', 'probe', 'return', 'self', 'string',
 | |
|     'try', 'while'
 | |
|     )
 | |
| 
 | |
| 
 | |
| def stap_escape(identifier):
 | |
|     # Append underscore to reserved keywords
 | |
|     if identifier in RESERVED_WORDS:
 | |
|         return identifier + '_'
 | |
|     return identifier
 | |
| 
 | |
| 
 | |
| def generate(events, backend):
 | |
|     events = [e for e in events
 | |
|               if "disable" not in e.properties]
 | |
| 
 | |
|     out('/* This file is autogenerated by tracetool, do not edit. */',
 | |
|         '')
 | |
| 
 | |
|     for e in events:
 | |
|         # Define prototype for probe arguments
 | |
|         out('probe %(probeprefix)s.%(name)s = process("%(binary)s").mark("%(name)s")',
 | |
|             '{',
 | |
|             probeprefix=probeprefix(),
 | |
|             name=e.name,
 | |
|             binary=binary())
 | |
| 
 | |
|         i = 1
 | |
|         if len(e.args) > 0:
 | |
|             for name in e.args.names():
 | |
|                 name = stap_escape(name)
 | |
|                 out('  %s = $arg%d;' % (name, i))
 | |
|                 i += 1
 | |
| 
 | |
|         out('}')
 | |
| 
 | |
|     out()
 |