[lttng-dev] Tracepoint not compiling with many string event fields

Suchakrapani Datt Sharma suchakrapani.sharma at polymtl.ca
Wed Feb 18 16:53:34 EST 2015


Hi all,

I was doing a small test on filtering traces at runtime based on event  
fields. There may be an elegant ways to define event arguments and  
fields (ctf_sequence_text?) for my usecase for a tracepoint, but I was  
just trying to do something like following, but for more than just 2  
char* arguments:

TRACEPOINT_EVENT(retlif_tp, tpfilt,
     TP_ARGS(

             char*, str0,

             char*, str1,

             int, life
     ),
     TP_FIELDS(

         ctf_string(var0, str0)

         ctf_string(var1, str1)

         ctf_integer(int, lyf, life)
     )
)

Here [1] is what I did. This is generated by a script I wrote so that  
I can run my tests by varying the number of fields my filter needs to  
run upon. I get this error [2] when the arguments are increased to  
more than 10. It is related to macro expansion. Here is a snippet from  
a healthy expanded macro:

/----

  6722 extern struct lttng_ust_tracepoint __tracepoint_retlif_tp___tpfilt;
  6723 static inline __attribute__ ((always_inline, unused))
  6724   __attribute__ ((no_instrument_function))
  6725      void __tracepoint_cb_retlif_tp___tpfilt (char *str0, char *str1,
  6726                           char *str2, char *str3,
  6727                           char *str4, int life);
  6728      static void __tracepoint_cb_retlif_tp___tpfilt (char  
*str0, char *str1,
  6729                              char *str2, char *str3,
  6730                              char *str4, int life)

----/


And here is a snippet from an unhealthy macro:

/----

  6732 extern struct lttng_ust_tracepoint __tracepoint_retlif_tp___tpfilt;
  6733     static inline __attribute__ ((always_inline, unused))
  6734 __attribute__ ((no_instrument_function))
  6735     void
  6736     __tracepoint_cb_retlif_tp___tpfilt (_TP_EXPROTOint
  6737             (char *, str0, char *, str1,
  6738              char *, str2, char *, str3,
  6739              char *, str4, char *, str5,
  6740              char *, str6, char *, str7,
  6741              char *, str8, char *, str9, int,
  6742              life));
  6743 static void
  6744     __tracepoint_cb_retlif_tp___tpfilt (_TP_EXPROTOint
  6745             (char *, str0, char *, str1,
  6746              char *, str2, char *, str3,
  6747              char *, str4, char *, str5,
  6748              char *, str6, char *, str7,
  6749              char *, str8, char *, str9, int,
  6750              life))

----/

Note strings like "(_TP_EXPROTOint" being added at wrong location in  
code. If someone can confirm its a bug, I can file a report and will  
fix it. If its a known limitation, there needs to be error checks added.

[1] Tracepoint : http://ur1.ca/jr6gc
[2] Error : http://ur1.ca/jr6gm

Have a nice evening!

--
Suchakra




More information about the lttng-dev mailing list