Commit 3927fa9e authored by Glauber Costa's avatar Glauber Costa Committed by Ingo Molnar

x86: use frame pointer information on x86_64 profile_pc

Signed-off-by: default avatarGlauber Costa <gcosta@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 097a0788
...@@ -34,11 +34,15 @@ unsigned long profile_pc(struct pt_regs *regs) ...@@ -34,11 +34,15 @@ unsigned long profile_pc(struct pt_regs *regs)
of flags from PUSHF of flags from PUSHF
Eflags always has bits 22 and up cleared unlike kernel addresses. */ Eflags always has bits 22 and up cleared unlike kernel addresses. */
if (!user_mode(regs) && in_lock_functions(pc)) { if (!user_mode(regs) && in_lock_functions(pc)) {
#ifdef CONFIG_FRAME_POINTER
return *(unsigned long *)(regs->bp + sizeof(long));
#else
unsigned long *sp = (unsigned long *)regs->sp; unsigned long *sp = (unsigned long *)regs->sp;
if (sp[0] >> 22) if (sp[0] >> 22)
return sp[0]; return sp[0];
if (sp[1] >> 22) if (sp[1] >> 22)
return sp[1]; return sp[1];
#endif
} }
return pc; return pc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment