diff options
author | Seung-Woo Kim <sw0312.kim@samsung.com> | 2019-12-11 09:57:56 +0900 |
---|---|---|
committer | Seung-Woo Kim <sw0312.kim@samsung.com> | 2019-11-21 07:20:54 +0000 |
commit | 8e6cdb86f627a70a5b9083874288f1daec4f0746 (patch) | |
tree | 46d64935e0e405c793dee0820bbdfbe25c2e8e30 | |
parent | 6980d8e5797b10049cdea415bf5c46b09a883832 (diff) | |
download | linux-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.c | 2 |
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) |