/* TSDL */ trace { major = 0; minor = 1; uuid = "f816d884-6cea-11e0-ac7a-8f5f4e9f7724"; byte_order = be; /* Assuming big endian streams */ }; /* Architecture with 32-bit pointers, 32-bit integers, 32-bit longs */ typealias integer { size = 32; align = 32; signed = false; } := uint32_t; typealias integer { size = 64; align = 64; signed = false; } := uint64_t; typealias integer { size = 32; align = 32; signed = false; } := void *; stream { event.header := struct { uint32_t id; uint64_t timestamp; }; event.context := struct { /* uint32_t thread_id; * This context belongs to all void *func_called; * events in this stream. void *called_from; */ uint32_t event_count; /* for debug */ }; }; /* * All events have empty context/fields, because their field layout is * replicated for all events of the stream (in this particular trace * layout). See ctf-embedded-2.txt for a more compact layout. */ event { name = invalid; id = 0; }; event { name = func_enter; id = 1; }; event { name = func_exit; id = 2; }; event { name = timer_tick; /* or sync_point... */ id = 3; fields := { uint64_t monotonic_value; uint64_t tsc_value; uint32_t seqnum; }; }; event { name = freq_change; id = 4; fields := { uint64_t new_freq; }; } clock { name = monotonic; uuid = ; }; clock { name = seqnum; uuid = ; }; clock { name = tsc; sync_points = { map { parent.clock = monotonic; parent.value = event.timer_tick.monotonic_value; value = event.timer_tick.tsc_value; }; map { parent.clock = seqnum; parent.value = event.timer_tick.seqnum; value = event.timer_tick.tsc_value; }; }; freq = { update = event.freq_change.new_freq; }; uuid = ; };