* A new format is required to generate definitions for ust tracepoints. Files ust_events_h.py and ust_events_c.py define common macros, while new function ust_events_h in events.py does the actual definition of each tracepoint. * ust.py generates the new interface for calling userspace tracepoints with LTTng 2.x, replacing trace_name(args) to tracepoint(name, args). * As explained in ust_events_c.py, -Wredundant-decls gives a warning when compiling with gcc 4.7 or older. This is specific to lttng-ust so for now use a pragma clause to avoid getting a warning. Signed-off-by: Mohamad Gebai <mohamad.gebai@polymtl.ca> Reviewed-by: Alex Bennée <alex@bennee.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.2 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
 | |
| 
 | |
| 
 | |
| PUBLIC = True
 | |
| 
 | |
| def c(events):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| def h(events):
 | |
|     out('#include <lttng/tracepoint.h>',
 | |
|         '#include "trace/generated-ust-provider.h"',
 | |
|         '')
 | |
|     for e in events:
 | |
|         argnames = ", ".join(e.args.names())
 | |
|         if len(e.args) > 0:
 | |
|             argnames = ", " + argnames
 | |
| 
 | |
|         out('static inline void trace_%(name)s(%(args)s)',
 | |
|             '{',
 | |
|             '    tracepoint(qemu, %(name)s%(tp_args)s);',
 | |
|             '}',
 | |
|             '',
 | |
|             name = e.name,
 | |
|             args = e.args,
 | |
|             tp_args = argnames,
 | |
|             )
 | |
| 
 | |
| def ust_events_c(events):
 | |
|     pass
 | |
| 
 | |
| def ust_events_h(events):
 | |
|     for e in events:
 | |
|         if len(e.args) > 0:
 | |
|             out('TRACEPOINT_EVENT(',
 | |
|                 '   qemu,',
 | |
|                 '   %(name)s,',
 | |
|                 '   TP_ARGS(%(args)s),',
 | |
|                 '   TP_FIELDS(',
 | |
|                 name = e.name,
 | |
|                 args = ", ".join(", ".join(i) for i in e.args),
 | |
|                 )
 | |
| 
 | |
|             for t,n in e.args:
 | |
|                 if ('int' in t) or ('long' in t) or ('unsigned' in t) or ('size_t' in t):
 | |
|                     out('       ctf_integer(' + t + ', ' + n + ', ' + n + ')')
 | |
|                 elif ('double' in t) or ('float' in t):
 | |
|                     out('       ctf_float(' + t + ', ' + n + ', ' + n + ')')
 | |
|                 elif ('char *' in t) or ('char*' in t):
 | |
|                     out('       ctf_string(' + n + ', ' + n + ')')
 | |
|                 elif ('void *' in t) or ('void*' in t):
 | |
|                     out('       ctf_integer_hex(unsigned long, ' + n + ', ' + n + ')')
 | |
| 
 | |
|             out('   )',
 | |
|                 ')',
 | |
|                 '')
 | |
| 
 | |
|         else:
 | |
|             out('TRACEPOINT_EVENT(',
 | |
|                 '   qemu,',
 | |
|                 '   %(name)s,',
 | |
|                 '   TP_ARGS(void),',
 | |
|                 '   TP_FIELDS()',
 | |
|                 ')',
 | |
|                 '',
 | |
|                 name = e.name,
 | |
|                 ) |