Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| """
 | |
| LTTng User Space Tracing backend.
 | |
| """
 | |
| 
 | |
| __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"
 | |
| 
 | |
| 
 | |
| from tracetool import out
 | |
| 
 | |
| 
 | |
| def c(events):
 | |
|     out('#include <ust/marker.h>',
 | |
|         '#undef mutex_lock',
 | |
|         '#undef mutex_unlock',
 | |
|         '#undef inline',
 | |
|         '#undef wmb',
 | |
|         '#include "trace.h"')
 | |
| 
 | |
|     for e in events:
 | |
|         argnames = ", ".join(e.args.names())
 | |
|         if len(e.args) > 0:
 | |
|             argnames = ', ' + argnames
 | |
| 
 | |
|             out('DEFINE_TRACE(ust_%(name)s);',
 | |
|                 '',
 | |
|                 'static void ust_%(name)s_probe(%(args)s)',
 | |
|                 '{',
 | |
|                 '    trace_mark(ust, %(name)s, %(fmt)s%(argnames)s);',
 | |
|                 '}',
 | |
|                 name = e.name,
 | |
|                 args = e.args,
 | |
|                 fmt = e.fmt,
 | |
|                 argnames = argnames,
 | |
|                 )
 | |
| 
 | |
|         else:
 | |
|             out('DEFINE_TRACE(ust_%(name)s);',
 | |
|                 '',
 | |
|                 'static void ust_%(name)s_probe(%(args)s)',
 | |
|                 '{',
 | |
|                 '    trace_mark(ust, %(name)s, UST_MARKER_NOARGS);',
 | |
|                 '}',
 | |
|                 name = e.name,
 | |
|                 args = e.args,
 | |
|                 )
 | |
| 
 | |
|     # register probes
 | |
|     out('',
 | |
|         'static void __attribute__((constructor)) trace_init(void)',
 | |
|         '{')
 | |
| 
 | |
|     for e in events:
 | |
|         out('    register_trace_ust_%(name)s(ust_%(name)s_probe);',
 | |
|             name = e.name,
 | |
|             )
 | |
| 
 | |
|     out('}')
 | |
| 
 | |
| 
 | |
| def h(events):
 | |
|     out('#include <ust/tracepoint.h>',
 | |
|         '#undef mutex_lock',
 | |
|         '#undef mutex_unlock',
 | |
|         '#undef inline',
 | |
|         '#undef wmb')
 | |
| 
 | |
|     for e in events:
 | |
|         if len(e.args) > 0:
 | |
|             out('DECLARE_TRACE(ust_%(name)s, TP_PROTO(%(args)s), TP_ARGS(%(argnames)s));',
 | |
|                 '#define trace_%(name)s trace_ust_%(name)s',
 | |
|                 name = e.name,
 | |
|                 args = e.args,
 | |
|                 argnames = ", ".join(e.args.names()),
 | |
|                 )
 | |
| 
 | |
|         else:
 | |
|             out('_DECLARE_TRACEPOINT_NOARGS(ust_%(name)s);',
 | |
|                 '#define trace_%(name)s trace_ust_%(name)s',
 | |
|                 name = e.name,
 | |
|                 )
 | |
| 
 | |
|     out()
 |