+ CTF_CLOCK_freq = (1U << 1),
+ } field_mask;
+};
+
+#define CTF_CALLSITE_SET_FIELD(ctf_callsite, field) \
+ do { \
+ (ctf_callsite)->field_mask |= CTF_CALLSITE_ ## field; \
+ } while (0)
+
+#define CTF_CALLSITE_FIELD_IS_SET(ctf_callsite, field) \
+ ((ctf_callsite)->field_mask & CTF_CALLSITE_ ## field)
+
+#define CTF_CALLSITE_GET_FIELD(ctf_callsite, field) \
+ ({ \
+ assert(CTF_CALLSITE_FIELD_IS_SET(ctf_callsite, field)); \
+ (ctf_callsite)->(field); \
+ })
+
+struct ctf_callsite {
+ GQuark name; /* event name associated with callsite */
+ char *func;
+ char *file;
+ uint64_t line;
+ uint64_t ip;
+ struct bt_list_head node;
+ enum { /* Fields populated mask */
+ CTF_CALLSITE_name = (1U << 0),
+ CTF_CALLSITE_func = (1U << 1),
+ CTF_CALLSITE_file = (1U << 2),
+ CTF_CALLSITE_line = (1U << 3),
+ CTF_CALLSITE_ip = (1U << 4),