From: Michael Petlan [mailto:mpet...@redhat.com] > >On Tue, 2015-11-24 at 12:08 -0300, Arnaldo Carvalho de Melo wrote: >> Em Tue, Nov 24, 2015 at 12:18:22PM +0100, Michael Petlan escreveu: >> > I have been playing with perf-probe tool and I found out that some bogus >> > values of a function argument are obtained by perf-record. >> > >> > How to reproduce: >> > >> > gcc -O0 -g -o dummy dummy.c >> > perf probe -x ./dummy --add 'isprime a' >> > perf record -e probe_dummy:isprime ./dummy >> > perf script >> > >> > The actual output looks like the following: >> > >> > dummy 32476 [000] 3534401.838454: probe_dummy:isprime: (400530) a=32767 >> > dummy 32476 [000] 3534401.838504: probe_dummy:isprime: (400530) a=32714 >> > dummy 32476 [000] 3534401.838513: probe_dummy:isprime: (400530) a=3 >> > dummy 32476 [000] 3534401.838519: probe_dummy:isprime: (400530) a=4 >> > dummy 32476 [000] 3534401.838525: probe_dummy:isprime: (400530) a=5 >> > dummy 32476 [000] 3534401.838531: probe_dummy:isprime: (400530) a=6 >> > dummy 32476 [000] 3534401.838537: probe_dummy:isprime: (400530) a=7 >> > dummy 32476 [000] 3534401.838543: probe_dummy:isprime: (400530) a=13 >> > dummy 32476 [000] 3534401.838561: probe_dummy:isprime: (400530) a=17
Hmm, very odd. Could you try to use ftrace with user stacktrace on that event? # echo 1 > (debugfs)/tracing/options/stacktrace # echo 1 > (debugfs)/tracing/options/userstacktrace # echo 1 > events/probe_dummy/isprime/enable # ./dummy # cat trace And decode the stack address by using (eu-)addr2line ? Thank you, >> > >> > But if you look into the source, you can see that the function isprime() >> > is called with the following arguments: >> > >> > int numbers[] = { 2, 3, 4, 5, 6, 7, 13, 17, 19 }; >> > >> > So the first and last ones are omitted, there are some bogus numbers >> > instead >> > of them and all that is shifted somehow. >> > >> > Note that when I probe for %ax register it looks correct. >> > >> > The version of kernel/perf is 4.3.0. The architecture is x86_64. >> > Am I missing something or is it a bug? >> >> I'm now trying to bisect that register error I found while trying to >> reproduce the problem reported above, but please consider writing a >> 'perf test' entry that does exactly what you did, i.e. have a simple >> program that you build with a known set of compile flags, then run it >> using perf probe to catch a specific function, its argument, and then >> check that the values it produces are the ones expected. >> >> We would catch bugs in 'perf probe', the DWARF code, etc, much more >> quickly with something like that in place. :-) > >Hi Arnaldo, > >thanks for investigating the issue. I do not use fedora kernel, I use >what I build from git, but of course I am some versions back. So I use >4.3.0 and 4.3.0-rc5 and both do the same thing. > >I have met this when writing new tests for perf-probe into the testsuite >I had been speaking about some time ago [1]. But if needed, I may add it >as a perf-test entry as you wish. > >Michael > >> >> - Arnaldo >