From: Szabolcs Nagy <szabolcs.nagy@arm.com>
To: Vincent Whitchurch <vincent.whitchurch@axis.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, <kernel@axis.com>,
Tamas Zsoldos <tamas.zsoldos@arm.com>,
Daniel Kiss <daniel.kiss@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Ard Biesheuvel <ardb@kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] arm64: vdso: Include .eh_frame in debug ELF
Date: Fri, 25 Nov 2022 12:27:14 +0000 [thread overview]
Message-ID: <Y4C0ope66V+0DzYC@arm.com> (raw)
In-Reply-To: <20221125103740.2062285-1-vincent.whitchurch@axis.com>
The 11/25/2022 11:37, Vincent Whitchurch wrote:
> We currently strip out .eh_frame to work around crashes in libgcc when
> it tries to unwind out of signal handlers, see commit 87676cfca141
> ("arm64: vdso: Disable dwarf unwinding through the sigreturn
> trampoline").
>
> The .eh_frame does however have correct unwind information for the
> functions implemented in C in vgettimeofday.c, but currently this
> information is not available even for offline unwinding using the
> vdso.so.dbg. As a result of this, perf built with libdw is unable to
> unwind the stack when the PC is inside one of these functions.
>
> To fix this, strip the .eh_frame section only from the vdso.so and not
> from the vdso.so.dbg. This can be used by offline unwinders with access
> to the debug symbols, and will not affect libgcc since the section will
> still not be present in the normal vDSO.
adding eh_frame to vdso.so.dbg makes sense.
but if libdw correctly unwinds across a signal handler
then libgcc should be able to do so too.
so maybe eh_frame should be added back to vdso.so just
without frame info for __kernel_rt_sigreturn+NOP to
ensure unwinders use heuristics for sigreturn.
(i dont know if this was considered back when eh_frame
was dropped from the vdso)
>
> Cc: Tamas Zsoldos <tamas.zsoldos@arm.com>
> Cc: Szabolcs Nagy <szabolcs.nagy@arm.com>
> Cc: Daniel Kiss <daniel.kiss@arm.com>
> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
> Cc: Ard Biesheuvel <ardb@kernel.org>
> Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
> ---
> arch/arm64/kernel/vdso/Makefile | 2 +-
> arch/arm64/kernel/vdso/vdso.lds.S | 3 ++-
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
> index 619e2dc7ee14..91aac17e11bc 100644
> --- a/arch/arm64/kernel/vdso/Makefile
> +++ b/arch/arm64/kernel/vdso/Makefile
> @@ -65,7 +65,7 @@ $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE
> $(call if_changed,vdsold_and_vdso_check)
>
> # Strip rule for the .so file
> -$(obj)/%.so: OBJCOPYFLAGS := -S
> +$(obj)/%.so: OBJCOPYFLAGS := -S --remove-section=.eh_frame --remove-section=.eh_frame_hdr
> $(obj)/%.so: $(obj)/%.so.dbg FORCE
> $(call if_changed,objcopy)
>
> diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> index 6028f1fe2d1c..66abf70efc58 100644
> --- a/arch/arm64/kernel/vdso/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> @@ -31,6 +31,8 @@ SECTIONS
> .gnu.version : { *(.gnu.version) }
> .gnu.version_d : { *(.gnu.version_d) }
> .gnu.version_r : { *(.gnu.version_r) }
> + .eh_frame : { *(.eh_frame) }
> + .eh_frame_hdr : { *(.eh_frame_hdr) }
>
> /*
> * Discard .note.gnu.property sections which are unused and have
> @@ -78,7 +80,6 @@ SECTIONS
> /DISCARD/ : {
> *(.data .data.* .gnu.linkonce.d.* .sdata*)
> *(.bss .sbss .dynbss .dynsbss)
> - *(.eh_frame .eh_frame_hdr)
> }
> }
>
> --
> 2.34.1
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
To: Vincent Whitchurch <vincent.whitchurch@axis.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>, <kernel@axis.com>,
Tamas Zsoldos <tamas.zsoldos@arm.com>,
Daniel Kiss <daniel.kiss@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Ard Biesheuvel <ardb@kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] arm64: vdso: Include .eh_frame in debug ELF
Date: Fri, 25 Nov 2022 12:27:14 +0000 [thread overview]
Message-ID: <Y4C0ope66V+0DzYC@arm.com> (raw)
In-Reply-To: <20221125103740.2062285-1-vincent.whitchurch@axis.com>
The 11/25/2022 11:37, Vincent Whitchurch wrote:
> We currently strip out .eh_frame to work around crashes in libgcc when
> it tries to unwind out of signal handlers, see commit 87676cfca141
> ("arm64: vdso: Disable dwarf unwinding through the sigreturn
> trampoline").
>
> The .eh_frame does however have correct unwind information for the
> functions implemented in C in vgettimeofday.c, but currently this
> information is not available even for offline unwinding using the
> vdso.so.dbg. As a result of this, perf built with libdw is unable to
> unwind the stack when the PC is inside one of these functions.
>
> To fix this, strip the .eh_frame section only from the vdso.so and not
> from the vdso.so.dbg. This can be used by offline unwinders with access
> to the debug symbols, and will not affect libgcc since the section will
> still not be present in the normal vDSO.
adding eh_frame to vdso.so.dbg makes sense.
but if libdw correctly unwinds across a signal handler
then libgcc should be able to do so too.
so maybe eh_frame should be added back to vdso.so just
without frame info for __kernel_rt_sigreturn+NOP to
ensure unwinders use heuristics for sigreturn.
(i dont know if this was considered back when eh_frame
was dropped from the vdso)
>
> Cc: Tamas Zsoldos <tamas.zsoldos@arm.com>
> Cc: Szabolcs Nagy <szabolcs.nagy@arm.com>
> Cc: Daniel Kiss <daniel.kiss@arm.com>
> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
> Cc: Ard Biesheuvel <ardb@kernel.org>
> Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
> ---
> arch/arm64/kernel/vdso/Makefile | 2 +-
> arch/arm64/kernel/vdso/vdso.lds.S | 3 ++-
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
> index 619e2dc7ee14..91aac17e11bc 100644
> --- a/arch/arm64/kernel/vdso/Makefile
> +++ b/arch/arm64/kernel/vdso/Makefile
> @@ -65,7 +65,7 @@ $(obj)/vdso.so.dbg: $(obj)/vdso.lds $(obj-vdso) FORCE
> $(call if_changed,vdsold_and_vdso_check)
>
> # Strip rule for the .so file
> -$(obj)/%.so: OBJCOPYFLAGS := -S
> +$(obj)/%.so: OBJCOPYFLAGS := -S --remove-section=.eh_frame --remove-section=.eh_frame_hdr
> $(obj)/%.so: $(obj)/%.so.dbg FORCE
> $(call if_changed,objcopy)
>
> diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> index 6028f1fe2d1c..66abf70efc58 100644
> --- a/arch/arm64/kernel/vdso/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> @@ -31,6 +31,8 @@ SECTIONS
> .gnu.version : { *(.gnu.version) }
> .gnu.version_d : { *(.gnu.version_d) }
> .gnu.version_r : { *(.gnu.version_r) }
> + .eh_frame : { *(.eh_frame) }
> + .eh_frame_hdr : { *(.eh_frame_hdr) }
>
> /*
> * Discard .note.gnu.property sections which are unused and have
> @@ -78,7 +80,6 @@ SECTIONS
> /DISCARD/ : {
> *(.data .data.* .gnu.linkonce.d.* .sdata*)
> *(.bss .sbss .dynbss .dynsbss)
> - *(.eh_frame .eh_frame_hdr)
> }
> }
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2022-11-25 12:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-25 10:37 [PATCH] arm64: vdso: Include .eh_frame in debug ELF Vincent Whitchurch
2022-11-25 10:37 ` Vincent Whitchurch
2022-11-25 12:27 ` Szabolcs Nagy [this message]
2022-11-25 12:27 ` Szabolcs Nagy
2022-11-28 10:18 ` Vincent Whitchurch
2022-11-28 10:18 ` Vincent Whitchurch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y4C0ope66V+0DzYC@arm.com \
--to=szabolcs.nagy@arm.com \
--cc=ardb@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=daniel.kiss@arm.com \
--cc=kernel@axis.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tamas.zsoldos@arm.com \
--cc=vincent.whitchurch@axis.com \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.