Public backends are those printed by "--list-backends" and thus considered valid by the configure script. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.4 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):
 | 
						|
    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()
 |