summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean Pihet <jean.pihet@linaro.org>2014-02-03 18:18:29 (GMT)
committerChanho Park <chanho61.park@samsung.com>2014-04-16 12:36:50 (GMT)
commit290a3ddd86861ddd8299ad3884ceb59f85fc8033 (patch)
treeaaeeb013b3e95d3c35fff957ed3cb37f531266f4
parentf5cb6ed3328c3e41ea641266e60e3eed9ec105a7 (diff)
downloadlinux-3.10-290a3ddd86861ddd8299ad3884ceb59f85fc8033.zip
linux-3.10-290a3ddd86861ddd8299ad3884ceb59f85fc8033.tar.gz
linux-3.10-290a3ddd86861ddd8299ad3884ceb59f85fc8033.tar.bz2
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 fda2704..e71f81f 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 35ff2f9..c7ba261 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