diff mbox series

arm64: vdso: Fix CFI info in sigreturn.

Message ID DDD18BB4-B773-4471-B5E0-9DDD839B7D46@arm.com (mailing list archive)
State New, archived
Headers show
Series arm64: vdso: Fix CFI info in sigreturn. | expand

Commit Message

Daniel Kiss May 8, 2020, 9:52 a.m. UTC
[PATCH] arm64: vdso: Fix CFI info in sigreturn.

When the signal handler is called the registers set up as the return address
points to the __kernel_rt_sigreturn. The NOP here is the placeholder of the
branch and link instruction that "calls" the signal handler. In case of a
return address the unwinder identifies the location of the caller because
in some cases the return address might not exist. Since the .cfi_startproc
is after the NOP, it won't be associated with any location and the
unwinder will stop walking.
This change corrects the generated EHFrames only.
Signed-off-by: Daniel Kiss <daniel.kiss@arm.com(opens in new tab)>
Signed-off-by: Tamas Zsoldos <tamas.zsoldos@arm.com(opens in new tab)>
---
arch/arm64/kernel/vdso/sigreturn.S | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Mark Rutland May 15, 2020, 3:23 p.m. UTC | #1
Hi Daniel,

On Fri, May 08, 2020 at 09:52:14AM +0000, Daniel Kiss wrote:
> [PATCH] arm64: vdso: Fix CFI info in sigreturn.
> 
> When the signal handler is called the registers set up as the return address
> points to the __kernel_rt_sigreturn. The NOP here is the placeholder of the
> branch and link instruction that "calls" the signal handler. In case of a
> return address the unwinder identifies the location of the caller because
> in some cases the return address might not exist. Since the .cfi_startproc
> is after the NOP, it won't be associated with any location and the
> unwinder will stop walking.
> This change corrects the generated EHFrames only.
> Signed-off-by: Daniel Kiss <daniel.kiss@arm.com(opens in new tab)>
> Signed-off-by: Tamas Zsoldos <tamas.zsoldos@arm.com(opens in new tab)>

Something appears to have gone wrong here; was this copy-pasted from
somewhere?

> ---
> arch/arm64/kernel/vdso/sigreturn.S | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
> diff --git a/arch/arm64/kernel/vdso/sigreturn.S b/arch/arm64/kernel/vdso/sigreturn.S
> index 12324863d5c2..5d50ee92faa4 100644
> --- a/arch/arm64/kernel/vdso/sigreturn.S
> +++ b/arch/arm64/kernel/vdso/sigreturn.S
> @@ -13,13 +13,13 @@
> .text
> - nop
> -SYM_FUNC_START(__kernel_rt_sigreturn)
> .cfi_startproc
> .cfi_signal_frame
> .cfi_def_cfa x29, 0
> .cfi_offset x29, 0 * 8
> .cfi_offset x30, 1 * 8
> + nop /* placeholder for bl signalhandler */
> +SYM_FUNC_START(__kernel_rt_sigreturn)
> mov x8, #__NR_rt_sigreturn
> svc #0
> .cfi_endproc

This appears to have been whitespace damaged (leading tabs have gone).

Can you please resend this via git-send-email?

Thanks,
Mark.
diff mbox series

Patch

diff --git a/arch/arm64/kernel/vdso/sigreturn.S b/arch/arm64/kernel/vdso/sigreturn.S
index 12324863d5c2..5d50ee92faa4 100644
--- a/arch/arm64/kernel/vdso/sigreturn.S
+++ b/arch/arm64/kernel/vdso/sigreturn.S
@@ -13,13 +13,13 @@ 
.text
- nop
-SYM_FUNC_START(__kernel_rt_sigreturn)
.cfi_startproc
.cfi_signal_frame
.cfi_def_cfa x29, 0
.cfi_offset x29, 0 * 8
.cfi_offset x30, 1 * 8
+ nop /* placeholder for bl signalhandler */
+SYM_FUNC_START(__kernel_rt_sigreturn)
mov x8, #__NR_rt_sigreturn
svc #0
.cfi_endproc
-- 
2.17.1