Messages in this thread | | | Date | Wed, 18 Nov 2015 16:00:17 +0800 | From | "Wangnan (F)" <> | Subject | Re: [BUG REPORT] perf tools: x86_64: Broken calllchain when sampling taken at 'callq' instruction |
| |
On 2015/11/18 15:20, Wangnan (F) wrote: > Hi all, > > When analysising Jiri's patchset [1] I found a dwarf unwind problem. > On x86 platform, when sample is at a 'callq' instruction, dwarf based > stack unwind always fail. > > I compile a small C source file with debug information, turn off > frame pointer and disable optimization: > > $ gcc -g -O0 -fomit-frame-pointer ./test_dwarf_unwind.c -o > ./test_dwarf_unwind
For whom want to test it: here is the test code I used.
#include <stdio.h> #include <unistd.h> #include <sys/time.h>
static volatile int x = 0;
int funcc(void) { struct timeval tv1, tv2; unsigned long us1, us2;
gettimeofday(&tv1, NULL);
us1 = tv1.tv_sec * 1000000 + tv1.tv_usec;
while(1) { x = x + 100; gettimeofday(&tv2, NULL); us2 = tv2.tv_sec * 1000000 + tv2.tv_usec; if (us2 - us1 >= 3000000) break; } return x; } int funcb(void) { return funcc();} int funca(void) { return funcb();} int main() { funca(); return 0;}
| |