blob: 8fc808f2efcc2fd97f3d9b1c55cf6523baaee2c9 [file] [log] [blame]
# -*- coding: utf-8 -*-
Generate .stp file (DTrace with SystemTAP only).
__author__ = "Lluís Vilanova <>"
__copyright__ = "Copyright 2012-2014, Lluís Vilanova <>"
__license__ = "GPL version 2 or (at your option) any later version"
__maintainer__ = "Stefan Hajnoczi"
__email__ = ""
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
'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, group):
events = [e for e in events
if "disable" not in]
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")',
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