summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeung-Woo Kim <sw0312.kim@samsung.com>2019-12-11 09:57:56 +0900
committerSeung-Woo Kim <sw0312.kim@samsung.com>2019-11-21 07:20:54 +0000
commit8e6cdb86f627a70a5b9083874288f1daec4f0746 (patch)
tree46d64935e0e405c793dee0820bbdfbe25c2e8e30
parent6980d8e5797b10049cdea415bf5c46b09a883832 (diff)
downloadlinux-4.9-exynos9110-8e6cdb86f627a70a5b9083874288f1daec4f0746.tar.gz
linux-4.9-exynos9110-8e6cdb86f627a70a5b9083874288f1daec4f0746.tar.bz2
linux-4.9-exynos9110-8e6cdb86f627a70a5b9083874288f1daec4f0746.zip
[LOCAL] arm64: perf: Report arm pc registers for compat perf
If perf is built as arm 32-bit, it only reads 15 registers as arm 32-bit register map and this breaks dwarf call-chain in compat perf because pc register information is not filled. Report arm pc registers for 32-bit compat perf. Without this, arm 32-bit perf dwarf call-graph shows below verbose message: unwind: reg 15, val 0 unwind: reg 13, val ffbc6360 unwind: no map for 0 Posted to mainline[1] but never merged. [1]: https://patchwork.kernel.org/patch/11238463/ Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> Change-Id: I8c35067224707b3077d7bfd14efda7c20c8d2869
-rw-r--r--arch/arm64/kernel/perf_regs.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm64/kernel/perf_regs.c b/arch/arm64/kernel/perf_regs.c
index 3f62b35fb6f1..e72148c4df8a 100644
--- a/arch/arm64/kernel/perf_regs.c
+++ b/arch/arm64/kernel/perf_regs.c
@@ -22,6 +22,8 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
return regs->compat_sp;
if ((u32)idx == PERF_REG_ARM64_LR)
return regs->compat_lr;
+ if ((u32)idx == 15) /* PERF_REG_ARM_PC */
+ return regs->pc;
}
if ((u32)idx == PERF_REG_ARM64_SP)