This makes the UST backend pay attention to the format string arguments that are defined when defining payload data. With this you can now ensure integers are reported in hex mode if you want. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
trace/generated-ust-provider.h
|
|
"""
|
|
|
|
__author__ = "Mohamad Gebai <mohamad.gebai@polymtl.ca>"
|
|
__copyright__ = "Copyright 2012, Mohamad Gebai <mohamad.gebai@polymtl.ca>"
|
|
__license__ = "GPL version 2 or (at your option) any later version"
|
|
|
|
__maintainer__ = "Stefan Hajnoczi"
|
|
__email__ = "stefanha@redhat.com"
|
|
|
|
|
|
from tracetool import out
|
|
|
|
|
|
def generate(events, backend):
|
|
events = [e for e in events
|
|
if "disabled" not in e.properties]
|
|
|
|
out('/* This file is autogenerated by tracetool, do not edit. */',
|
|
'',
|
|
'#undef TRACEPOINT_PROVIDER',
|
|
'#define TRACEPOINT_PROVIDER qemu',
|
|
'',
|
|
'#undef TRACEPOINT_INCLUDE_FILE',
|
|
'#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h',
|
|
'',
|
|
'#if !defined (TRACE__GENERATED_UST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)',
|
|
'#define TRACE__GENERATED_UST_H',
|
|
'',
|
|
'#include "qemu-common.h"',
|
|
'#include <lttng/tracepoint.h>',
|
|
'',
|
|
'/*',
|
|
' * LTTng ust 2.0 does not allow you to use TP_ARGS(void) for tracepoints',
|
|
' * requiring no arguments. We define these macros introduced in more recent'
|
|
' * versions of LTTng ust as a workaround',
|
|
' */',
|
|
'#ifndef _TP_EXPROTO1',
|
|
'#define _TP_EXPROTO1(a) void',
|
|
'#endif',
|
|
'#ifndef _TP_EXDATA_PROTO1',
|
|
'#define _TP_EXDATA_PROTO1(a) void *__tp_data',
|
|
'#endif',
|
|
'#ifndef _TP_EXDATA_VAR1',
|
|
'#define _TP_EXDATA_VAR1(a) __tp_data',
|
|
'#endif',
|
|
'#ifndef _TP_EXVAR1',
|
|
'#define _TP_EXVAR1(a)',
|
|
'#endif',
|
|
'')
|
|
|
|
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))
|
|
|
|
types = e.args.types()
|
|
names = e.args.names()
|
|
fmts = e.arg_fmts
|
|
for t,n,f in zip(types, names, fmts):
|
|
if ('char *' in t) or ('char*' in t):
|
|
out(' ctf_string(' + n + ', ' + n + ')')
|
|
elif ("%p" in f) or ("x" in f) or ("PRIx" in f):
|
|
out(' ctf_integer_hex('+ t + ', ' + n + ', ' + n + ')')
|
|
elif ("ptr" in t) or ("*" in t):
|
|
out(' ctf_integer_hex('+ t + ', ' + n + ', ' + n + ')')
|
|
elif ('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 ('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)
|
|
|
|
out('#endif /* TRACE__GENERATED_UST_H */',
|
|
'',
|
|
'/* This part must be outside ifdef protection */',
|
|
'#include <lttng/tracepoint-event.h>')
|