|  | # -*- coding: utf-8 -*- | 
|  |  | 
|  | """ | 
|  | Generate .stp file (DTrace with SystemTAP only). | 
|  | """ | 
|  |  | 
|  | __author__     = "Lluís Vilanova <vilanova@ac.upc.edu>" | 
|  | __copyright__  = "Copyright 2012-2014, Lluís Vilanova <vilanova@ac.upc.edu>" | 
|  | __license__    = "GPL version 2 or (at your option) any later version" | 
|  |  | 
|  | __maintainer__ = "Stefan Hajnoczi" | 
|  | __email__      = "stefanha@redhat.com" | 
|  |  | 
|  |  | 
|  | 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 | 
|  | RESERVED_WORDS = ( | 
|  | '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 e.properties] | 
|  |  | 
|  | 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")', | 
|  | '{', | 
|  | probeprefix=probeprefix(), | 
|  | name=e.name, | 
|  | binary=binary()) | 
|  |  | 
|  | 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 | 
|  |  | 
|  | out('}') | 
|  |  | 
|  | out() |