ust_events_h.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. trace/generated-ust-provider.h
  5. """
  6. __author__ = "Mohamad Gebai <mohamad.gebai@polymtl.ca>"
  7. __copyright__ = "Copyright 2012, Mohamad Gebai <mohamad.gebai@polymtl.ca>"
  8. __license__ = "GPL version 2 or (at your option) any later version"
  9. __maintainer__ = "Stefan Hajnoczi"
  10. __email__ = "stefanha@redhat.com"
  11. from tracetool import out
  12. def generate(events, backend):
  13. events = [e for e in events
  14. if "disabled" not in e.properties]
  15. out('/* This file is autogenerated by tracetool, do not edit. */',
  16. '',
  17. '#undef TRACEPOINT_PROVIDER',
  18. '#define TRACEPOINT_PROVIDER qemu',
  19. '',
  20. '#undef TRACEPOINT_INCLUDE_FILE',
  21. '#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h',
  22. '',
  23. '#if !defined (TRACE__GENERATED_UST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)',
  24. '#define TRACE__GENERATED_UST_H',
  25. '',
  26. '#include "qemu-common.h"',
  27. '#include <lttng/tracepoint.h>',
  28. '',
  29. '/*',
  30. ' * LTTng ust 2.0 does not allow you to use TP_ARGS(void) for tracepoints',
  31. ' * requiring no arguments. We define these macros introduced in more recent'
  32. ' * versions of LTTng ust as a workaround',
  33. ' */',
  34. '#ifndef _TP_EXPROTO1',
  35. '#define _TP_EXPROTO1(a) void',
  36. '#endif',
  37. '#ifndef _TP_EXDATA_PROTO1',
  38. '#define _TP_EXDATA_PROTO1(a) void *__tp_data',
  39. '#endif',
  40. '#ifndef _TP_EXDATA_VAR1',
  41. '#define _TP_EXDATA_VAR1(a) __tp_data',
  42. '#endif',
  43. '#ifndef _TP_EXVAR1',
  44. '#define _TP_EXVAR1(a)',
  45. '#endif',
  46. '')
  47. for e in events:
  48. if len(e.args) > 0:
  49. out('TRACEPOINT_EVENT(',
  50. ' qemu,',
  51. ' %(name)s,',
  52. ' TP_ARGS(%(args)s),',
  53. ' TP_FIELDS(',
  54. name=e.name,
  55. args=", ".join(", ".join(i) for i in e.args))
  56. for t, n in e.args:
  57. if ('int' in t) or ('long' in t) or ('unsigned' in t) or ('size_t' in t):
  58. out(' ctf_integer(' + t + ', ' + n + ', ' + n + ')')
  59. elif ('double' in t) or ('float' in t):
  60. out(' ctf_float(' + t + ', ' + n + ', ' + n + ')')
  61. elif ('char *' in t) or ('char*' in t):
  62. out(' ctf_string(' + n + ', ' + n + ')')
  63. elif ('void *' in t) or ('void*' in t):
  64. out(' ctf_integer_hex(unsigned long, ' + n + ', ' + n + ')')
  65. out(' )',
  66. ')',
  67. '')
  68. else:
  69. out('TRACEPOINT_EVENT(',
  70. ' qemu,',
  71. ' %(name)s,',
  72. ' TP_ARGS(void),',
  73. ' TP_FIELDS()',
  74. ')',
  75. '',
  76. name=e.name)
  77. out('#endif /* TRACE__GENERATED_UST_H */',
  78. '',
  79. '/* This part must be outside ifdef protection */',
  80. '#include <lttng/tracepoint-event.h>')