123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # -*- coding: utf-8 -*-
- """
- DTrace/SystemTAP backend.
- """
- __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
- __copyright__ = "Copyright 2012-2017, 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
- PUBLIC = True
- PROBEPREFIX = None
- def probeprefix():
- if PROBEPREFIX is None:
- raise ValueError("you must set PROBEPREFIX")
- return PROBEPREFIX
- BINARY = None
- def binary():
- if BINARY is None:
- raise ValueError("you must set BINARY")
- return BINARY
- def generate_h_begin(events, group):
- if group == "root":
- header = "trace-dtrace-root.h"
- else:
- header = "trace-dtrace-%s.h" % group
- # Workaround for ust backend, which also includes <sys/sdt.h> and may
- # require SDT_USE_VARIADIC to be defined. If dtrace includes <sys/sdt.h>
- # first without defining SDT_USE_VARIADIC then ust breaks because the
- # STAP_PROBEV() macro is not defined.
- out('#ifndef SDT_USE_VARIADIC')
- out('#define SDT_USE_VARIADIC 1')
- out('#endif')
- out('#include "%s"' % header,
- '')
- out('#undef SDT_USE_VARIADIC')
- # SystemTap defines <provider>_<name>_ENABLED() but other DTrace
- # implementations might not.
- for e in events:
- out('#ifndef QEMU_%(uppername)s_ENABLED',
- '#define QEMU_%(uppername)s_ENABLED() true',
- '#endif',
- uppername=e.name.upper())
- def generate_h(event, group):
- out(' QEMU_%(uppername)s(%(argnames)s);',
- uppername=event.name.upper(),
- argnames=", ".join(event.args.names()))
- def generate_h_backend_dstate(event, group):
- out(' QEMU_%(uppername)s_ENABLED() || \\',
- uppername=event.name.upper())
|