From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel.Thibault@drdc-rddc.gc.ca (Thibault, Daniel) Date: Tue, 11 Feb 2014 16:45:59 +0000 Subject: [lttng-dev] Instrumenting a module? Message-ID: <48CF5AC71E61DB46B70D0F388054EFFD267E60F9@VAL-E-01.valcartier.drdc-rddc.gc.ca> ---------------------------------------------------------------------- > Date: Mon, 10 Feb 2014 17:10:37 +0000 > From: "Thibault, Daniel" > > I'm trying to find out the recipe for instrumenting a kernel module with some custom LTTng tracepoints. > Oddly, writing the LTTng tracepoint provider kernel module turned out not too bad (the READMEs help), > but I have seen no documentation of the process of instrumenting a module. Update. Looking at the instrumented kernel compilation units and define_trace.h, I've come to think I must #define CREATE_TRACE_POINTS just before #include in the instrumented module. What I find bizarre, though, is that this works for an integer payload field (instrumented module and LTTng tracepoint provider kernel module compile, tracing the new kernel events works as expected) but fails miserably with a string payload field. Looking at other kernel tracepoints that have string payload fields, I just don't see what I'm doing wrong. The integer tracepoint: TRACE_EVENT(hello_init, TP_PROTO(int anint), TP_ARGS(anint), TP_STRUCT__entry( __field(int, aninteger) ), TP_fast_assign( __entry->aninteger = anint; ), TP_printk( "hello=%d", __entry->aninteger ) ); The string tracepoint: TRACE_EVENT(hello_init, TP_PROTO(const char * astring), TP_ARGS(astring), TP_STRUCT__entry( __string(hello_string, astring) ), TP_fast_assign( __assign_str(hello_string, astring); ), TP_printk( "hello=%s", __entry->hello_string ) ); This time the make says: make -C /lib/modules/3.2.0-53-virtual/build M=/home/daniel/Documents/mymodule modules make[1]: entrant dans le r?pertoire ? /usr/src/linux-headers-3.2.0-53-virtual ? CC [M] /home/daniel/Documents/mymodule/hello.o In file included from include/trace/ftrace.h:296:0, from include/trace/define_trace.h:86, from include/trace/events/hello.h:110, from /home/daniel/Documents/mymodule/hello.c:5: include/trace/events/hello.h: In function 'ftrace_raw_output_hello_init': include/trace/events/hello.h:57:1: erreur: 'struct ftrace_raw_hello_init' has no member named 'hello_string' make[2]: *** [/home/daniel/Documents/mymodule/hello.o] Erreur 1 make[1]: *** [_module_/home/daniel/Documents/mymodule] Erreur 2 make[1]: quittant le r?pertoire ? /usr/src/linux-headers-3.2.0-53-virtual ? make: *** [all] Erreur 2 Daniel U. Thibault Protection des syst?mes et contremesures (PSC) | Systems Protection & Countermeasures (SPC) Cyber s?curit? pour les missions essentielles (CME) | Mission Critical Cyber Security (MCCS) R & D pour la d?fense Canada - Valcartier (RDDC Valcartier) | Defence R&D Canada - Valcartier (DRDC Valcartier) 2459 route de la Bravoure Qu?bec QC G3J 1X5 CANADA Vox : (418) 844-4000 x4245 Fax : (418) 844-4538 NAC : 918V QSDJ Gouvernement du Canada | Government of Canada