| From 9702970c7bd3e2d6fecb642a190269131d4ac16c Mon Sep 17 00:00:00 2001 |
| From: Will Deacon <will.deacon@arm.com> |
| Date: Wed, 28 Oct 2015 16:56:13 +0000 |
| Subject: Revert "ARM64: unwind: Fix PC calculation" |
| |
| From: Will Deacon <will.deacon@arm.com> |
| |
| commit 9702970c7bd3e2d6fecb642a190269131d4ac16c upstream. |
| |
| This reverts commit e306dfd06fcb44d21c80acb8e5a88d55f3d1cf63. |
| |
| With this patch applied, we were the only architecture making this sort |
| of adjustment to the PC calculation in the unwinder. This causes |
| problems for ftrace, where the PC values are matched against the |
| contents of the stack frames in the callchain and fail to match any |
| records after the address adjustment. |
| |
| Whilst there has been some effort to change ftrace to workaround this, |
| those patches are not yet ready for mainline and, since we're the odd |
| architecture in this regard, let's just step in line with other |
| architectures (like arch/arm/) for now. |
| |
| Signed-off-by: Will Deacon <will.deacon@arm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c |
| index 407991bf79f5..ccb6078ed9f2 100644 |
| --- a/arch/arm64/kernel/stacktrace.c |
| +++ b/arch/arm64/kernel/stacktrace.c |
| @@ -48,11 +48,7 @@ int notrace unwind_frame(struct stackframe *frame) |
| |
| frame->sp = fp + 0x10; |
| frame->fp = *(unsigned long *)(fp); |
| - /* |
| - * -4 here because we care about the PC at time of bl, |
| - * not where the return will go. |
| - */ |
| - frame->pc = *(unsigned long *)(fp + 8) - 4; |
| + frame->pc = *(unsigned long *)(fp + 8); |
| |
| return 0; |
| } |