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


_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to