• Andrew Lutomirski's avatar
    perf symbols: Fix vsyscall symbol lookup · 6c6804fb
    Andrew Lutomirski authored
    Perf can't currently trace into the vsyscall page.  It looks like it was
    meant to work.
    
    Tested on 2.6.38 and today's -git.
    
    The bug is easy to reproduce.  Compile this:
    
    int main()
    {
    	int i;
    	struct timespec t;
    	for(i = 0; i < 10000000; i++)
    		clock_gettime(CLOCK_MONOTONIC, &t);
    	return 0;
    }
    
    and run it through perf record; perf report.  The top entry shows
    "[unknown]" and you can't zoom in.
    
    It looks like there are two issues.  The first is a that a test for user
    mode executing in kernel space is backwards.  (That's the first hunk
    below).  The second (I think) is that something's wrong with the code
    that generates lots of little struct dso objects for different sections
    -- when it runs on vmlinux it results in bogus long_name values which
    cause objdump to fail.
    
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    LPU-Reference: <AANLkTikxSw5+wJZUWNz++nL7mgivCh_Zf=2Kq6=f9Ce_@mail.gmail.com>
    Signed-off-by: default avatarAndy Lutomirski <luto@mit.edu>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    6c6804fb
symbol.c 59.3 KB