[ltt-dev] [Qemu-devel] [PATCH 2/3] trace: [ust] Do not use 'm' in event argument names (used by ust macros)

Mathieu Desnoyers compudj at krystal.dyndns.org
Tue Sep 20 12:22:53 EDT 2011


* Stefan Hajnoczi (stefanha at gmail.com) wrote:
> 2011/9/20 Mathieu Desnoyers <compudj at krystal.dyndns.org>:
> > * Lluís Vilanova (vilanova at ac.upc.edu) wrote:
> >> Stefan Hajnoczi writes:
> >>
> >> > On Fri, Sep 16, 2011 at 06:59:38PM +0200, Lluís Vilanova wrote:
> >> >> Signed-off-by: Lluís Vilanova <vilanova at ac.upc.edu>
> >> >> ---
> >> >> trace-events |    4 ++--
> >> >> 1 files changed, 2 insertions(+), 2 deletions(-)
> >> >>
> >> >> diff --git a/trace-events b/trace-events
> >> >> index 9d1fbbb..b653d70 100644
> >> >> --- a/trace-events
> >> >> +++ b/trace-events
> >> >> @@ -418,8 +418,8 @@ milkymist_pfpu_pulse_irq(void) "Pulse IRQ"
> >> >> # hw/milkymist-softusb.c
> >> >> milkymist_softusb_memory_read(uint32_t addr, uint32_t value) "addr %08x value %08x"
> >> >> milkymist_softusb_memory_write(uint32_t addr, uint32_t value) "addr %08x value %08x"
> >> >> -milkymist_softusb_mevt(uint8_t m) "m %d"
> >> >> -milkymist_softusb_kevt(uint8_t m) "m %d"
> >> >> +milkymist_softusb_mevt(uint8_t _m) "m %d"
> >> >> +milkymist_softusb_kevt(uint8_t _m) "m %d"
> >>
> >> > The LTTng community has been very responsive in addressing namespace
> >> > issues with libust.  Let's post more details and see if it can be fixed
> >> > in libust.
> >>
> >> > Could you please post your gcc and libust versions?
> >>
> >> > I have not been able to reproduce the problem on Debian libust-dev
> >> > 0.15-3.  My gcc version is Debian gcc 4.6.1-4.
> >>
> >> Yup, I was using libust-dev 0.5 (debian stable). After switching to 0.15 (debian
> >> testing) other problems arise.
> >>
> >> For example, in my box compiling osdep.c yields lots of "variable ‘__tp_cb_data’
> >> set but not used", but using a minimal example does not raise such problems, so
> >> I'm assuming this is related to some namespace problems related to some other
> >> code in qemu's headers.
> >
> > If you can find a few minutes to provide:
> >
> > 1) a link to the git repository/commit ID you are testing
> > 2) the exact configuration you use (detailed way to reproduce the
> >   problem, as a sequence of commands from a pristine repository)
> >
> > It will allow me to look into this warning and fix it.
> 
> 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:
> 
> #include <stdint.h>
> #include <ust/tracepoint.h>
> 
> DECLARE_TRACE(ust_milkymist_softusb_mevt, TP_PROTO(uint8_t m),
> TP_ARGS(m));
> 
> int main(int argc, char **argv)
> {
>        return 0;
> }
> 
> You will get an error with gcc 4.6 and libust 0.15:
> 
> $ gcc -o a -Wall a.c

Ah, I see. This is due to the backward compatibility API I added in
0.15 for qemu. It skips using the __tp_cb_data private data. So it does
make sense that the compiler complains about this. I can add a
__attribute__((unused)), as proposed by Lluís.

> 
> QEMU itself does have one problem with libust 0.15.  We do
> DECLARE_TRACE(name, TP_PROTO(void), TP_ARGS()).  This results in a
> compiler error but we can fix this my changing our tracepoints to use
> DECLARE_TRACE(name, TP_PROTO(), TP_ARGS()) I think.  Perhaps libust's
> behavior here has changed, it shouldn't be hard to update QEMU's
> tracetool tracepoint generator though.

For tracepoints without arguments, you need to use something like:

TRACEPOINT_EVENT_NOARGS(name, TP_FIELDS())

(note: the full support of TP_FIELDS() declaration will come in UST 2.0.
For UST 0.15, it's just ignored)

The _NOARGS variant lets you handle the (void) 0 parameter case.

Thanks,

Mathieu

> 
> If you adapt the example program I used above to use TP_PROTO(void),
> TP_ARGS() then you get this error:
> 
> a.c: In function ‘__trace_ust_milkymist_softusb_mevt’:
> a.c:4:1: error: expected declaration specifiers or ‘...’ before ‘)’ token
> a.c:4:1: error: expected ‘)’ before ‘__tp_it_func’
> a.c:4:1: error: expected expression before ‘)’ token
> a.c:4:1: warning: variable ‘__tp_it_func’ set but not used
> [-Wunused-but-set-variable]
> a.c: At top level:
> a.c:4:1: error: expected declaration specifiers or ‘...’ before ‘)’ token
> a.c:4:1: error: expected ‘;’, ‘,’ or ‘)’ before ‘void’
> a.c:4:1: error: expected declaration specifiers or ‘...’ before ‘)’ token
> a.c:4:1: error: expected ‘;’, ‘,’ or ‘)’ before ‘void’
> a.c: In function ‘trace_ust_milkymist_softusb_mevt’:
> a.c:4:1: warning: variable ‘__tp_cb_data’ set but not used
> [-Wunused-but-set-variable]
> 
> I can't say for sure whether I ever tested old libust versions with
> void tracepoints.  Perhaps we simply never had any and the tracetool
> generator has always been broken.  Or perhaps libust changed its
> behavior.
> 
> Stefan
> 

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com




More information about the lttng-dev mailing list