xref: /openbmc/qemu/scripts/tracetool/format/stap.py (revision beafab86a3062489cffd58d6608e64df98e256f1)
152ef093aSLluís Vilanova# -*- coding: utf-8 -*-
252ef093aSLluís Vilanova
352ef093aSLluís Vilanova"""
452ef093aSLluís VilanovaGenerate .stp file (DTrace with SystemTAP only).
552ef093aSLluís Vilanova"""
652ef093aSLluís Vilanova
752ef093aSLluís Vilanova__author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
81dad2ce9SLluís Vilanova__copyright__  = "Copyright 2012-2014, Lluís Vilanova <vilanova@ac.upc.edu>"
952ef093aSLluís Vilanova__license__    = "GPL version 2 or (at your option) any later version"
1052ef093aSLluís Vilanova
1152ef093aSLluís Vilanova__maintainer__ = "Stefan Hajnoczi"
12*f892b494SPhilippe Mathieu-Daudé__email__      = "stefanha@redhat.com"
1352ef093aSLluís Vilanova
1452ef093aSLluís Vilanova
1552ef093aSLluís Vilanovafrom tracetool import out
161dad2ce9SLluís Vilanovafrom tracetool.backend.dtrace import binary, probeprefix
1752ef093aSLluís Vilanova
1852ef093aSLluís Vilanova
191dad2ce9SLluís Vilanova# Technically 'self' is not used by systemtap yet, but
201dad2ce9SLluís Vilanova# they recommended we keep it in the reserved list anyway
211dad2ce9SLluís VilanovaRESERVED_WORDS = (
221dad2ce9SLluís Vilanova    'break', 'catch', 'continue', 'delete', 'else', 'for',
231dad2ce9SLluís Vilanova    'foreach', 'function', 'global', 'if', 'in', 'limit',
241dad2ce9SLluís Vilanova    'long', 'next', 'probe', 'return', 'self', 'string',
251dad2ce9SLluís Vilanova    'try', 'while'
261dad2ce9SLluís Vilanova    )
271dad2ce9SLluís Vilanova
281dad2ce9SLluís Vilanova
29a76ccf3cSStefan Hajnoczidef stap_escape(identifier):
30a76ccf3cSStefan Hajnoczi    # Append underscore to reserved keywords
31a76ccf3cSStefan Hajnoczi    if identifier in RESERVED_WORDS:
32a76ccf3cSStefan Hajnoczi        return identifier + '_'
33a76ccf3cSStefan Hajnoczi    return identifier
34a76ccf3cSStefan Hajnoczi
35a76ccf3cSStefan Hajnoczi
3680dd5c49SDaniel P. Berrangedef generate(events, backend, group):
371dad2ce9SLluís Vilanova    events = [e for e in events
381dad2ce9SLluís Vilanova              if "disable" not in e.properties]
391dad2ce9SLluís Vilanova
401dad2ce9SLluís Vilanova    out('/* This file is autogenerated by tracetool, do not edit. */',
411dad2ce9SLluís Vilanova        '')
421dad2ce9SLluís Vilanova
431dad2ce9SLluís Vilanova    for e in events:
441dad2ce9SLluís Vilanova        # Define prototype for probe arguments
451dad2ce9SLluís Vilanova        out('probe %(probeprefix)s.%(name)s = process("%(binary)s").mark("%(name)s")',
461dad2ce9SLluís Vilanova            '{',
471dad2ce9SLluís Vilanova            probeprefix=probeprefix(),
481dad2ce9SLluís Vilanova            name=e.name,
491dad2ce9SLluís Vilanova            binary=binary())
501dad2ce9SLluís Vilanova
511dad2ce9SLluís Vilanova        i = 1
521dad2ce9SLluís Vilanova        if len(e.args) > 0:
531dad2ce9SLluís Vilanova            for name in e.args.names():
54a76ccf3cSStefan Hajnoczi                name = stap_escape(name)
551dad2ce9SLluís Vilanova                out('  %s = $arg%d;' % (name, i))
561dad2ce9SLluís Vilanova                i += 1
571dad2ce9SLluís Vilanova
581dad2ce9SLluís Vilanova        out('}')
591dad2ce9SLluís Vilanova
601dad2ce9SLluís Vilanova    out()
61