[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [ltt-dev] [PATCH 2/3] trace: [ust] Do not use 'm' in ev

From: Lluís Vilanova
Subject: Re: [Qemu-devel] [ltt-dev] [PATCH 2/3] trace: [ust] Do not use 'm' in event argument names (used by ust macros)
Date: Tue, 20 Sep 2011 17:12:10 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux)

Stefan Hajnoczi writes:

> AFAICT the only problem with libust is the __tp_cb_data set but not
> used warning that gcc 4.6 emits, see my test program:

Here's a prettified version of the failing (pre-processed) code:

  static inline
  trace_ust_g_malloc(size_t size, void* ptr)
      do {
          if (__builtin_expect(!!(__tracepoint_ust_g_malloc.state), 0))
              do {
                  struct tracepoint_probe *__tp_it_probe_ptr;
                  void *__tp_it_func;
                  void *__tp_cb_data;
                  __tp_it_probe_ptr = ({ 
typeof((&__tracepoint_ust_g_malloc)->probes) _________p1 = 
rcu_dereference_sym((void *)((&__tracepoint_ust_g_malloc)->probes)); 
(_________p1); });
                  if (__tp_it_probe_ptr) {
                      do {
                          __tp_it_func = __tp_it_probe_ptr->func;
                          __tp_cb_data = __tp_it_probe_ptr->data;
                          ((void(*)(size_t size, void* ptr))__tp_it_func)(size, 
                      } while ((++__tp_it_probe_ptr)->func); }
              } while (0);
      } while (0);

Which is produced by the "__DO_TRACE" macro in "ust/tracepoint.h". The original
code is:

  DECLARE_TRACE(ust_g_malloc, TP_PROTO(size_t size, void* ptr), TP_ARGS(size, 
  #define trace_g_malloc trace_ust_g_malloc

I don't know about the portability requirements in UST, but if supporting only
gcc is an option, you can simply use this line in the macro:

                  void *__tp_cb_data __attribute__((unused));

Even with this fixed, there still seem to be problems with events without

  DECLARE_TRACE(ust_slavio_misc_update_irq_raise, TP_PROTO(void), TP_ARGS());
  #define trace_slavio_misc_update_irq_raise 

  ./trace.h: In function ‘__trace_ust_slavio_misc_update_irq_raise’:
  ./trace.h:361:1: error: ‘void’ must be the only parameter
  ./trace.h:361:1: error: expected expression before ‘)’ token
  ./trace.h:361:1: error: too many arguments to function ‘(void (*)(void 

The debian/testing version of ust is 0.15, and the sources have a ChangeLog with
this at the top:

  2011-07-15 ust 0.15
      * Add backward compability for tracepoint API (still planned for
        deprecation, but should make the transition smoother).


 "And it's much the same thing with knowledge, for whenever you learn
 something new, the whole world becomes that much richer."
 -- The Princess of Pure Reason, as told by Norton Juster in The Phantom

reply via email to

[Prev in Thread] Current Thread [Next in Thread]