diff mbox series

arm64: vdso: Add --eh-frame-hdr to ldflags

Message ID 20200507104049.47834-1-vincenzo.frascino@arm.com (mailing list archive)
State New, archived
Headers show
Series arm64: vdso: Add --eh-frame-hdr to ldflags | expand

Commit Message

Vincenzo Frascino May 7, 2020, 10:40 a.m. UTC
LLVM's unwinder depends on the .eh_frame_hdr being present for
unwinding. However, when compiling Linux with GCC, the section
is not present in the vdso library object and when compiling
with Clang, it is present, but it has zero length.

With GCC the problem was not spotted because libgcc unwinder does
not require the .eh_frame_hdr section to be present.

Add --eh-frame-hdr to ldflags to correctly generate and populate
the section for both GCC and LLVM.

Fixes: 28b1a824a4f44 ("arm64: vdso: Substitute gettimeofday() with C implementation")
Cc: Will Deacon <will@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Reported-by: Tamas Zsoldos <tamas.zsoldos@arm.com>
Tested-by: Tamas Zsoldos <tamas.zsoldos@arm.com>
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/kernel/vdso/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Will Deacon May 7, 2020, 2:04 p.m. UTC | #1
On Thu, 7 May 2020 11:40:49 +0100, Vincenzo Frascino wrote:
> LLVM's unwinder depends on the .eh_frame_hdr being present for
> unwinding. However, when compiling Linux with GCC, the section
> is not present in the vdso library object and when compiling
> with Clang, it is present, but it has zero length.
> 
> With GCC the problem was not spotted because libgcc unwinder does
> not require the .eh_frame_hdr section to be present.
> 
> [...]

Applied to arm64 (for-next/vdso), thanks!

[1/1] arm64: vdso: Add --eh-frame-hdr to ldflags
      https://git.kernel.org/arm64/c/7e9f5e6629f6

Cheers,
diff mbox series

Patch

diff --git a/arch/arm64/kernel/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
index 3862cad2410c..54008ec39e3a 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
@@ -18,7 +18,7 @@  targets := $(obj-vdso) vdso.so vdso.so.dbg
 obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
 
 ldflags-y := -shared -nostdlib -soname=linux-vdso.so.1 --hash-style=sysv \
-		--build-id -n -T
+		--eh-frame-hdr --build-id -n -T
 
 ccflags-y := -fno-common -fno-builtin -fno-stack-protector -ffixed-x18
 ccflags-y += -DDISABLE_BRANCH_PROFILING