xref: /qemu/trace/simple.h (revision 62bab73213ba885426a781eb2741670b9f3cae36)
126f7227bSStefan Hajnoczi /*
226f7227bSStefan Hajnoczi  * Simple trace backend
326f7227bSStefan Hajnoczi  *
426f7227bSStefan Hajnoczi  * Copyright IBM, Corp. 2010
526f7227bSStefan Hajnoczi  *
626f7227bSStefan Hajnoczi  * This work is licensed under the terms of the GNU GPL, version 2.  See
726f7227bSStefan Hajnoczi  * the COPYING file in the top-level directory.
826f7227bSStefan Hajnoczi  *
926f7227bSStefan Hajnoczi  */
1026f7227bSStefan Hajnoczi 
11edb47ec4SLluís #ifndef TRACE_SIMPLE_H
12edb47ec4SLluís #define TRACE_SIMPLE_H
1326f7227bSStefan Hajnoczi 
1426f7227bSStefan Hajnoczi #include <stdint.h>
1522890ab5SPrerna Saxena #include <stdbool.h>
1622890ab5SPrerna Saxena #include <stdio.h>
1726f7227bSStefan Hajnoczi 
1826f7227bSStefan Hajnoczi typedef uint64_t TraceEventID;
1926f7227bSStefan Hajnoczi 
2022890ab5SPrerna Saxena typedef struct {
2122890ab5SPrerna Saxena     const char *tp_name;
2222890ab5SPrerna Saxena     bool state;
2322890ab5SPrerna Saxena } TraceEvent;
2422890ab5SPrerna Saxena 
250b2c5088SStefan Weil void st_print_trace_file_status(FILE *stream, fprintf_function stream_printf);
26c5ceb523SStefan Hajnoczi void st_set_trace_file_enabled(bool enable);
27c5ceb523SStefan Hajnoczi bool st_set_trace_file(const char *file);
28c5ceb523SStefan Hajnoczi void st_flush_trace_buffer(void);
2926f7227bSStefan Hajnoczi 
30*62bab732SHarsh Prateek Bora typedef struct {
31*62bab732SHarsh Prateek Bora     unsigned int tbuf_idx;
32*62bab732SHarsh Prateek Bora     unsigned int next_tbuf_idx;
33*62bab732SHarsh Prateek Bora     unsigned int rec_off;
34*62bab732SHarsh Prateek Bora } TraceBufferRecord;
35*62bab732SHarsh Prateek Bora 
36*62bab732SHarsh Prateek Bora /* Note for hackers: Make sure MAX_TRACE_LEN < sizeof(uint32_t) */
37*62bab732SHarsh Prateek Bora #define MAX_TRACE_STRLEN 512
38*62bab732SHarsh Prateek Bora /**
39*62bab732SHarsh Prateek Bora  * Initialize a trace record and claim space for it in the buffer
40*62bab732SHarsh Prateek Bora  *
41*62bab732SHarsh Prateek Bora  * @arglen  number of bytes required for arguments
42*62bab732SHarsh Prateek Bora  */
43*62bab732SHarsh Prateek Bora int trace_record_start(TraceBufferRecord *rec, TraceEventID id, size_t arglen);
44*62bab732SHarsh Prateek Bora 
45*62bab732SHarsh Prateek Bora /**
46*62bab732SHarsh Prateek Bora  * Append a 64-bit argument to a trace record
47*62bab732SHarsh Prateek Bora  */
48*62bab732SHarsh Prateek Bora void trace_record_write_u64(TraceBufferRecord *rec, uint64_t val);
49*62bab732SHarsh Prateek Bora 
50*62bab732SHarsh Prateek Bora /**
51*62bab732SHarsh Prateek Bora  * Append a string argument to a trace record
52*62bab732SHarsh Prateek Bora  */
53*62bab732SHarsh Prateek Bora void trace_record_write_str(TraceBufferRecord *rec, const char *s, uint32_t slen);
54*62bab732SHarsh Prateek Bora 
55*62bab732SHarsh Prateek Bora /**
56*62bab732SHarsh Prateek Bora  * Mark a trace record completed
57*62bab732SHarsh Prateek Bora  *
58*62bab732SHarsh Prateek Bora  * Don't append any more arguments to the trace record after calling this.
59*62bab732SHarsh Prateek Bora  */
60*62bab732SHarsh Prateek Bora void trace_record_finish(TraceBufferRecord *rec);
61*62bab732SHarsh Prateek Bora 
62edb47ec4SLluís #endif /* TRACE_SIMPLE_H */
63