/* This file is autogenerated by tracetool, do not edit. */
/* SPDX-License-Identifier: GPL-2.0-or-later */

#ifndef TRACE_TESTSUITE_GENERATED_TRACERS_H
#define TRACE_TESTSUITE_GENERATED_TRACERS_H

#include "trace/control.h"

extern TraceEvent _TRACE_TEST_BLAH_EVENT;
extern TraceEvent _TRACE_TEST_WIBBLE_EVENT;
extern uint16_t _TRACE_TEST_BLAH_DSTATE;
extern uint16_t _TRACE_TEST_WIBBLE_DSTATE;
#define TRACE_TEST_BLAH_ENABLED 1
#define TRACE_TEST_WIBBLE_ENABLED 1
#ifndef SDT_USE_VARIADIC
#define SDT_USE_VARIADIC 1
#endif
#include "trace-dtrace-testsuite.h"

#undef SDT_USE_VARIADIC
#ifndef QEMU_TEST_BLAH_ENABLED
#define QEMU_TEST_BLAH_ENABLED() true
#endif
#ifndef QEMU_TEST_WIBBLE_ENABLED
#define QEMU_TEST_WIBBLE_ENABLED() true
#endif

#define TRACE_TEST_BLAH_BACKEND_DSTATE() ( \
    QEMU_TEST_BLAH_ENABLED() || \
    false)

static inline void trace_test_blah(void *context, const char *filename)
{
    QEMU_TEST_BLAH(context, filename);
}

#define TRACE_TEST_WIBBLE_BACKEND_DSTATE() ( \
    QEMU_TEST_WIBBLE_ENABLED() || \
    false)

static inline void trace_test_wibble(void *context, int value)
{
    QEMU_TEST_WIBBLE(context, value);
}
#endif /* TRACE_TESTSUITE_GENERATED_TRACERS_H */
