2
0

h.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # -*- coding: utf-8 -*-
  2. """
  3. trace/generated-tracers.h
  4. """
  5. __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
  6. __copyright__ = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>"
  7. __license__ = "GPL version 2 or (at your option) any later version"
  8. __maintainer__ = "Stefan Hajnoczi"
  9. __email__ = "stefanha@redhat.com"
  10. from tracetool import out
  11. def generate(events, backend, group):
  12. header = "trace/control.h"
  13. out('/* This file is autogenerated by tracetool, do not edit. */',
  14. '',
  15. '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
  16. '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(),
  17. '',
  18. '#include "%s"' % header,
  19. '')
  20. for e in events:
  21. out('extern TraceEvent %(event)s;',
  22. event = e.api(e.QEMU_EVENT))
  23. for e in events:
  24. out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))
  25. # static state
  26. for e in events:
  27. if 'disable' in e.properties:
  28. enabled = 0
  29. else:
  30. enabled = 1
  31. if "tcg-exec" in e.properties:
  32. # a single define for the two "sub-events"
  33. out('#define TRACE_%(name)s_ENABLED %(enabled)d',
  34. name=e.original.name.upper(),
  35. enabled=enabled)
  36. out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled))
  37. backend.generate_begin(events, group)
  38. for e in events:
  39. # tracer-specific dstate
  40. out('',
  41. '#define %(api)s() ( \\',
  42. api=e.api(e.QEMU_BACKEND_DSTATE))
  43. if "disable" not in e.properties:
  44. backend.generate_backend_dstate(e, group)
  45. out(' false)')
  46. # tracer without checks
  47. out('',
  48. 'static inline void %(api)s(%(args)s)',
  49. '{',
  50. api=e.api(e.QEMU_TRACE_NOCHECK),
  51. args=e.args)
  52. if "disable" not in e.properties:
  53. backend.generate(e, group)
  54. out('}')
  55. cond = "true"
  56. out('',
  57. 'static inline void %(api)s(%(args)s)',
  58. '{',
  59. ' if (%(cond)s) {',
  60. ' %(api_nocheck)s(%(names)s);',
  61. ' }',
  62. '}',
  63. api=e.api(),
  64. api_nocheck=e.api(e.QEMU_TRACE_NOCHECK),
  65. args=e.args,
  66. names=", ".join(e.args.names()),
  67. cond=cond)
  68. backend.generate_end(events, group)
  69. out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper())