ust_events_h.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. types = e.args.types()
  57. names = e.args.names()
  58. fmts = e.formats()
  59. for t,n,f in zip(types, names, fmts):
  60. if ('char *' in t) or ('char*' in t):
  61. out(' ctf_string(' + n + ', ' + n + ')')
  62. elif ("%p" in f) or ("x" in f) or ("PRIx" in f):
  63. out(' ctf_integer_hex('+ t + ', ' + n + ', ' + n + ')')
  64. elif ("ptr" in t) or ("*" in t):
  65. out(' ctf_integer_hex('+ t + ', ' + n + ', ' + n + ')')
  66. elif ('int' in t) or ('long' in t) or ('unsigned' in t) or ('size_t' in t):
  67. out(' ctf_integer(' + t + ', ' + n + ', ' + n + ')')
  68. elif ('double' in t) or ('float' in t):
  69. out(' ctf_float(' + t + ', ' + n + ', ' + n + ')')
  70. elif ('void *' in t) or ('void*' in t):
  71. out(' ctf_integer_hex(unsigned long, ' + n + ', ' + n + ')')
  72. out(' )',
  73. ')',
  74. '')
  75. else:
  76. out('TRACEPOINT_EVENT(',
  77. ' qemu,',
  78. ' %(name)s,',
  79. ' TP_ARGS(void),',
  80. ' TP_FIELDS()',
  81. ')',
  82. '',
  83. name=e.name)
  84. out('#endif /* TRACE__GENERATED_UST_H */',
  85. '',
  86. '/* This part must be outside ifdef protection */',
  87. '#include <lttng/tracepoint-event.h>')