| From 6f1a6ae87c0c60d7c462ef8fd071f291aa7a9abb Mon Sep 17 00:00:00 2001 |
| From: Will Deacon <will.deacon@arm.com> |
| Date: Fri, 19 Jun 2015 13:56:33 +0100 |
| Subject: arm64: vdso: work-around broken ELF toolchains in Makefile |
| |
| From: Will Deacon <will.deacon@arm.com> |
| |
| commit 6f1a6ae87c0c60d7c462ef8fd071f291aa7a9abb upstream. |
| |
| When building the kernel with a bare-metal (ELF) toolchain, the -shared |
| option may not be passed down to collect2, resulting in silent corruption |
| of the vDSO image (in particular, the DYNAMIC section is omitted). |
| |
| The effect of this corruption is that the dynamic linker fails to find |
| the vDSO symbols and libc is instead used for the syscalls that we |
| intended to optimise (e.g. gettimeofday). Functionally, there is no |
| issue as the sigreturn trampoline is still intact and located by the |
| kernel. |
| |
| This patch fixes the problem by explicitly passing -shared to the linker |
| when building the vDSO. |
| |
| Reported-by: Szabolcs Nagy <Szabolcs.Nagy@arm.com> |
| Reported-by: James Greenlaigh <james.greenhalgh@arm.com> |
| Signed-off-by: Will Deacon <will.deacon@arm.com> |
| Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/arm64/kernel/vdso/Makefile | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/arch/arm64/kernel/vdso/Makefile |
| +++ b/arch/arm64/kernel/vdso/Makefile |
| @@ -15,6 +15,10 @@ ccflags-y := -shared -fno-common -fno-bu |
| ccflags-y += -nostdlib -Wl,-soname=linux-vdso.so.1 \ |
| $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) |
| |
| +# Workaround for bare-metal (ELF) toolchains that neglect to pass -shared |
| +# down to collect2, resulting in silent corruption of the vDSO image. |
| +ccflags-y += -Wl,-shared |
| + |
| obj-y += vdso.o |
| extra-y += vdso.lds vdso-offsets.h |
| CPPFLAGS_vdso.lds += -P -C -U$(ARCH) |