qemu-devel
[Top][All Lists]
Advanced

[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
  void
  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;
                  rcu_read_lock_bp();
                  __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, 
ptr);
                      } while ((++__tp_it_probe_ptr)->func); }
                  rcu_read_unlock_bp();
              } 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, 
ptr));
  #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
parameters:

  DECLARE_TRACE(ust_slavio_misc_update_irq_raise, TP_PROTO(void), TP_ARGS());
  #define trace_slavio_misc_update_irq_raise 
trace_ust_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 
*))__tp_it_func’

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).


Lluis

-- 
 "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
 Tollbooth



reply via email to

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