summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean Pihet <jean.pihet@linaro.org>2014-02-03 19:18:29 +0100
committerChanho Park <chanho61.park@samsung.com>2014-04-16 21:36:50 +0900
commit290a3ddd86861ddd8299ad3884ceb59f85fc8033 (patch)
treeaaeeb013b3e95d3c35fff957ed3cb37f531266f4
parentf5cb6ed3328c3e41ea641266e60e3eed9ec105a7 (diff)
downloadlinux-3.10-290a3ddd86861ddd8299ad3884ceb59f85fc8033.tar.gz
linux-3.10-290a3ddd86861ddd8299ad3884ceb59f85fc8033.tar.bz2
linux-3.10-290a3ddd86861ddd8299ad3884ceb59f85fc8033.zip
ARM64: perf: support dwarf unwinding in compat mode
Add support for unwinding using the dwarf information in compat mode. Using the correct user stack pointer allows perf to record the frames correctly in the native and compat modes. Note that although the dwarf frame unwinding works ok using libunwind in native mode (on ARMv7 & ARMv8), some changes are required to the libunwind code for the compat mode. Those changes are posted separately on the libunwind mailing list. Tested on ARMv8 platform with v8 and compat v7 binaries, the latter are statically built. Signed-off-by: Jean Pihet <jean.pihet@linaro.org> Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
-rw-r--r--arch/arm64/include/asm/compat.h2
-rw-r--r--arch/arm64/include/asm/ptrace.h2
2 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
index fda2704b3f9..e71f81fe127 100644
--- a/arch/arm64/include/asm/compat.h
+++ b/arch/arm64/include/asm/compat.h
@@ -228,7 +228,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr)
return (u32)(unsigned long)uptr;
}
-#define compat_user_stack_pointer() (current_pt_regs()->compat_sp)
+#define compat_user_stack_pointer() (user_stack_pointer(current_pt_regs()))
static inline void __user *arch_compat_alloc_user_space(long len)
{
diff --git a/arch/arm64/include/asm/ptrace.h b/arch/arm64/include/asm/ptrace.h
index 35ff2f9de07..c7ba261dd4b 100644
--- a/arch/arm64/include/asm/ptrace.h
+++ b/arch/arm64/include/asm/ptrace.h
@@ -133,7 +133,7 @@ struct pt_regs {
(!((regs)->pstate & PSR_F_BIT))
#define user_stack_pointer(regs) \
- ((regs)->sp)
+ (!compat_user_mode(regs)) ? ((regs)->sp) : ((regs)->compat_sp)
/*
* Are the current registers suitable for user mode? (used to maintain