/* 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
#include <syslog.h>


#define TRACE_TEST_BLAH_BACKEND_DSTATE() ( \
    trace_event_get_state_dynamic_by_id(TRACE_TEST_BLAH) || \
    false)

static inline void trace_test_blah(void *context, const char *filename)
{
    if (trace_event_get_state(TRACE_TEST_BLAH)) {
#line 4 "trace-events"
        syslog(LOG_INFO, "test_blah " "Blah context=%p filename=%s" , context, filename);
#line 28 "syslog.h"
    }
}

#define TRACE_TEST_WIBBLE_BACKEND_DSTATE() ( \
    trace_event_get_state_dynamic_by_id(TRACE_TEST_WIBBLE) || \
    false)

static inline void trace_test_wibble(void *context, int value)
{
    if (trace_event_get_state(TRACE_TEST_WIBBLE)) {
#line 5 "trace-events"
        syslog(LOG_INFO, "test_wibble " "Wibble context=%p value=%d" , context, value);
#line 41 "syslog.h"
    }
}
#endif /* TRACE_TESTSUITE_GENERATED_TRACERS_H */
