perf, x86: Fix callgraphs of 32-bit processes on 64-bit kernels
authorTorok Edwin <edwintorok@gmail.com>
Wed, 17 Mar 2010 10:07:16 +0000 (12:07 +0200)
committerIngo Molnar <mingo@elte.hu>
Fri, 2 Apr 2010 17:30:03 +0000 (19:30 +0200)
commit257ef9d21f1b008a6c7425544b36641c4325a922
tree4ffda980fe6a93acd24efcc04cd10e130caae4c1
parentb38b24ead33417146e051453d04bf60b8d2d7e25
perf, x86: Fix callgraphs of 32-bit processes on 64-bit kernels

When profiling a 32-bit process on a 64-bit kernel, callgraph tracing
stopped after the first function, because it has seen a garbage memory
address (tried to interpret the frame pointer, and return address as a
64-bit pointer).

Fix this by using a struct stack_frame with 32-bit pointers when the
TIF_IA32 flag is set.

Note that TIF_IA32 flag must be used, and not is_compat_task(), because
the latter is only set when the 32-bit process is executing a syscall,
which may not always be the case (when tracing page fault events for
example).

Signed-off-by: Török Edwin <edwintorok@gmail.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: x86@kernel.org
Cc: linux-kernel@vger.kernel.org
LKML-Reference: <1268820436-13145-1-git-send-email-edwintorok@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/cpu/perf_event.c
arch/x86/kernel/dumpstack.h