| From d9de5372e8e1c28c95e8272b3c551d36afeb6f61 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 18 Apr 2019 10:57:49 +0100 |
| Subject: ARM: 8858/1: vdso: use $(LD) instead of $(CC) to link VDSO |
| |
| From: Masahiro Yamada <yamada.masahiro@socionext.com> |
| |
| [ Upstream commit fe00e50b2db8c60e4ec90befad1f5bab8ca2c800 ] |
| |
| We use $(LD) to link vmlinux, modules, decompressors, etc. |
| |
| VDSO is the only exceptional case where $(CC) is used as the linker |
| driver, but I do not know why we need to do so. VDSO uses a special |
| linker script, and does not link standard libraries at all. |
| |
| I changed the Makefile to use $(LD) rather than $(CC). I confirmed |
| the same vdso.so.raw was still produced. |
| |
| Users will be able to use their favorite linker (e.g. lld instead of |
| of bfd) by passing LD= from the command line. |
| |
| My plan is to rewrite all VDSO Makefiles to use $(LD), then delete |
| |
| cc-ldoption. |
| |
| Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> |
| Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/arm/vdso/Makefile | 21 ++++++++------------- |
| 1 file changed, 8 insertions(+), 13 deletions(-) |
| |
| diff --git a/arch/arm/vdso/Makefile b/arch/arm/vdso/Makefile |
| index f4efff9d3afbb..fadf554d93917 100644 |
| --- a/arch/arm/vdso/Makefile |
| +++ b/arch/arm/vdso/Makefile |
| @@ -10,12 +10,12 @@ obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) |
| ccflags-y := -fPIC -fno-common -fno-builtin -fno-stack-protector |
| ccflags-y += -DDISABLE_BRANCH_PROFILING |
| |
| -VDSO_LDFLAGS := -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1 |
| -VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096 |
| -VDSO_LDFLAGS += -nostdlib -shared |
| -VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) |
| -VDSO_LDFLAGS += $(call cc-ldoption, -Wl$(comma)--build-id) |
| -VDSO_LDFLAGS += $(call cc-ldoption, -fuse-ld=bfd) |
| +ldflags-y = -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \ |
| + -z max-page-size=4096 -z common-page-size=4096 \ |
| + -nostdlib -shared \ |
| + $(call ld-option, --hash-style=sysv) \ |
| + $(call ld-option, --build-id) \ |
| + -T |
| |
| obj-$(CONFIG_VDSO) += vdso.o |
| extra-$(CONFIG_VDSO) += vdso.lds |
| @@ -37,8 +37,8 @@ KCOV_INSTRUMENT := n |
| $(obj)/vdso.o : $(obj)/vdso.so |
| |
| # Link rule for the .so file |
| -$(obj)/vdso.so.raw: $(src)/vdso.lds $(obj-vdso) FORCE |
| - $(call if_changed,vdsold) |
| +$(obj)/vdso.so.raw: $(obj)/vdso.lds $(obj-vdso) FORCE |
| + $(call if_changed,ld) |
| |
| $(obj)/vdso.so.dbg: $(obj)/vdso.so.raw $(obj)/vdsomunge FORCE |
| $(call if_changed,vdsomunge) |
| @@ -48,11 +48,6 @@ $(obj)/%.so: OBJCOPYFLAGS := -S |
| $(obj)/%.so: $(obj)/%.so.dbg FORCE |
| $(call if_changed,objcopy) |
| |
| -# Actual build commands |
| -quiet_cmd_vdsold = VDSO $@ |
| - cmd_vdsold = $(CC) $(c_flags) $(VDSO_LDFLAGS) \ |
| - -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@ |
| - |
| quiet_cmd_vdsomunge = MUNGE $@ |
| cmd_vdsomunge = $(objtree)/$(obj)/vdsomunge $< $@ |
| |
| -- |
| 2.25.1 |
| |