On Thu, 14 Jan 2021 08:49:57 +0100 Alexander Potapenko <glider@xxxxxxxxxx> wrote: > We'll need to explicitly list the enum values once again in > __print_symbolic(), right? E.g.: > > enum debugging_tool { > TOOL_KFENCE, > TOOL_KASAN, > ... > } > > TP_printk(__print_symbolic(__entry->error_detector, TOOL_KFENCE, > TOOL_KASAN, ...), Usually what is done is to make this into a macro: #define REPORT_TOOL_LIST \ EM(KFENCE, kfence) \ EMe(KASAN, kasan) #undef EM #undef EMe #define EM(a,b) TRACE_DEFINE_ENUM(a) #define EMe(a,b) TRACE_DEFINE_ENUM(a) REPORT_TOOL_LIST #undef EM #undef EMe #define EM(a, b) { a, b }, #define EMe(a, b) { a, b } #define show_report_tool_list(val) \ __print_symbolic(val, REPORT_TOOL_LIST) [..] TP_printk("[%s] %lx", show_report_tool_list(__entry->error_detector), __entry->id) This is done in several other trace event files. For example, see include/trace/events/sock.h -- Steve