From: Vincenzo Frascino <vincenzo.frascino@arm.com> To: Nathan Chancellor <natechancellor@gmail.com>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>, Masahiro Yamada <masahiroy@kernel.org> Cc: linux-arm-kernel@lists.infradead.org, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, Nick Desaulniers <ndesaulniers@google.com> Subject: Re: [PATCH] arm64: vdso32: Allow ld.lld to properly link the VDSO Date: Mon, 19 Oct 2020 10:59:47 +0100 [thread overview] Message-ID: <53b74ed0-f143-6870-1227-3d9663166068@arm.com> (raw) In-Reply-To: <20201013033947.2257501-1-natechancellor@gmail.com> Hi Nathan, On 10/13/20 4:39 AM, Nathan Chancellor wrote: > As it stands now, the vdso32 Makefile hardcodes the linker to ld.bfd > using -fuse-ld=bfd with $(CC). This was taken from the arm vDSO > Makefile, as the comment notes, done in commit d2b30cd4b722 ("ARM: > 8384/1: VDSO: force use of BFD linker"). > > Commit fe00e50b2db8 ("ARM: 8858/1: vdso: use $(LD) instead of $(CC) to > link VDSO") changed that Makefile to use $(LD) directly instead of > through $(CC), which matches how the rest of the kernel operates. Since > then, LD=ld.lld means that the arm vDSO will be linked with ld.lld, > which has shown no problems so far. > > Allow ld.lld to link this vDSO as we do the regular arm vDSO. To do > this, we need to do a few things: > > * Add a LD_COMPAT variable, which defaults to $(CROSS_COMPILE_COMPAT)ld > with gcc and $(LD) if LLVM is 1, which will be ld.lld, or > $(CROSS_COMPILE_COMPAT)ld if not, which matches the logic of the main > Makefile. It is overrideable for further customization and avoiding > breakage. > > * Eliminate cc32-ldoption, which matches commit 055efab3120b ("kbuild: > drop support for cc-ldoption"). > > With those, we can use $(LD_COMPAT) in cmd_ldvdso and change the flags > from compiler linker flags to linker flags directly. We eliminate > -mfloat-abi=soft because it is not handled by the linker. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1033 > Reported-by: Nick Desaulniers <ndesaulniers@google.com> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> Just a small nit on my side (see below) and as you already stated it requires rebasing if we want to merge it in mainline. Otherwise: Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com> > --- > > NOTE: This patch is currently based on the kbuild tree due to the > --build-id -> --build-id=sha1 change that Bill did. If the arm64 > maintainers would prefer to take this patch, I can rebase it (althought > presumably this won't hit mainline until at least 5.11 so it can > probably just stay as is for now). > > arch/arm64/kernel/vdso32/Makefile | 23 ++++++++++++----------- > 1 file changed, 12 insertions(+), 11 deletions(-) > > diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile > index 7f96a1a9f68c..1cf00c58805d 100644 > --- a/arch/arm64/kernel/vdso32/Makefile > +++ b/arch/arm64/kernel/vdso32/Makefile > @@ -22,16 +22,21 @@ endif > > CC_COMPAT ?= $(CC) > CC_COMPAT += $(CC_COMPAT_CLANG_FLAGS) > + > +ifeq ($(LLVM),1) Nit: Here can we check 'ifneq ($(LLVM),)' for consistency with what the main Makefile does? > +LD_COMPAT ?= $(LD) > +else > +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld > +endif > else > CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc > +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld > endif > > cc32-option = $(call try-run,\ > $(CC_COMPAT) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) > cc32-disable-warning = $(call try-run,\ > $(CC_COMPAT) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) > -cc32-ldoption = $(call try-run,\ > - $(CC_COMPAT) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) > cc32-as-instr = $(call try-run,\ > printf "%b\n" "$(1)" | $(CC_COMPAT) $(VDSO_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) > > @@ -122,14 +127,10 @@ dmbinstr := $(call cc32-as-instr,dmb ishld,-DCONFIG_AS_DMB_ISHLD=1) > VDSO_CFLAGS += $(dmbinstr) > VDSO_AFLAGS += $(dmbinstr) > > -VDSO_LDFLAGS := $(VDSO_CPPFLAGS) > # From arm vDSO Makefile > -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 -mfloat-abi=soft > -VDSO_LDFLAGS += -Wl,--hash-style=sysv > -VDSO_LDFLAGS += -Wl,--build-id=sha1 > -VDSO_LDFLAGS += $(call cc32-ldoption,-fuse-ld=bfd) > +VDSO_LDFLAGS += -Bsymbolic --no-undefined -soname=linux-vdso.so.1 > +VDSO_LDFLAGS += -z max-page-size=4096 -z common-page-size=4096 > +VDSO_LDFLAGS += -nostdlib -shared --hash-style=sysv --build-id=sha1 > > > # Borrow vdsomunge.c from the arm vDSO > @@ -189,8 +190,8 @@ quiet_cmd_vdsold_and_vdso_check = LD32 $@ > cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check) > > quiet_cmd_vdsold = LD32 $@ > - cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \ > - -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@ > + cmd_vdsold = $(LD_COMPAT) $(VDSO_LDFLAGS) \ > + -T $(filter %.lds,$^) $(filter %.o,$^) -o $@ > quiet_cmd_vdsocc = CC32 $@ > cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $< > quiet_cmd_vdsocc_gettimeofday = CC32 $@ > > base-commit: 172aad81a882443eefe1bd860c4eddc81b14dd5b > -- Regards, Vincenzo
WARNING: multiple messages have this Message-ID (diff)
From: Vincenzo Frascino <vincenzo.frascino@arm.com> To: Nathan Chancellor <natechancellor@gmail.com>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>, Masahiro Yamada <masahiroy@kernel.org> Cc: clang-built-linux@googlegroups.com, Nick Desaulniers <ndesaulniers@google.com>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kbuild@vger.kernel.org Subject: Re: [PATCH] arm64: vdso32: Allow ld.lld to properly link the VDSO Date: Mon, 19 Oct 2020 10:59:47 +0100 [thread overview] Message-ID: <53b74ed0-f143-6870-1227-3d9663166068@arm.com> (raw) In-Reply-To: <20201013033947.2257501-1-natechancellor@gmail.com> Hi Nathan, On 10/13/20 4:39 AM, Nathan Chancellor wrote: > As it stands now, the vdso32 Makefile hardcodes the linker to ld.bfd > using -fuse-ld=bfd with $(CC). This was taken from the arm vDSO > Makefile, as the comment notes, done in commit d2b30cd4b722 ("ARM: > 8384/1: VDSO: force use of BFD linker"). > > Commit fe00e50b2db8 ("ARM: 8858/1: vdso: use $(LD) instead of $(CC) to > link VDSO") changed that Makefile to use $(LD) directly instead of > through $(CC), which matches how the rest of the kernel operates. Since > then, LD=ld.lld means that the arm vDSO will be linked with ld.lld, > which has shown no problems so far. > > Allow ld.lld to link this vDSO as we do the regular arm vDSO. To do > this, we need to do a few things: > > * Add a LD_COMPAT variable, which defaults to $(CROSS_COMPILE_COMPAT)ld > with gcc and $(LD) if LLVM is 1, which will be ld.lld, or > $(CROSS_COMPILE_COMPAT)ld if not, which matches the logic of the main > Makefile. It is overrideable for further customization and avoiding > breakage. > > * Eliminate cc32-ldoption, which matches commit 055efab3120b ("kbuild: > drop support for cc-ldoption"). > > With those, we can use $(LD_COMPAT) in cmd_ldvdso and change the flags > from compiler linker flags to linker flags directly. We eliminate > -mfloat-abi=soft because it is not handled by the linker. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1033 > Reported-by: Nick Desaulniers <ndesaulniers@google.com> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> Just a small nit on my side (see below) and as you already stated it requires rebasing if we want to merge it in mainline. Otherwise: Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com> > --- > > NOTE: This patch is currently based on the kbuild tree due to the > --build-id -> --build-id=sha1 change that Bill did. If the arm64 > maintainers would prefer to take this patch, I can rebase it (althought > presumably this won't hit mainline until at least 5.11 so it can > probably just stay as is for now). > > arch/arm64/kernel/vdso32/Makefile | 23 ++++++++++++----------- > 1 file changed, 12 insertions(+), 11 deletions(-) > > diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile > index 7f96a1a9f68c..1cf00c58805d 100644 > --- a/arch/arm64/kernel/vdso32/Makefile > +++ b/arch/arm64/kernel/vdso32/Makefile > @@ -22,16 +22,21 @@ endif > > CC_COMPAT ?= $(CC) > CC_COMPAT += $(CC_COMPAT_CLANG_FLAGS) > + > +ifeq ($(LLVM),1) Nit: Here can we check 'ifneq ($(LLVM),)' for consistency with what the main Makefile does? > +LD_COMPAT ?= $(LD) > +else > +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld > +endif > else > CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc > +LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld > endif > > cc32-option = $(call try-run,\ > $(CC_COMPAT) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) > cc32-disable-warning = $(call try-run,\ > $(CC_COMPAT) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) > -cc32-ldoption = $(call try-run,\ > - $(CC_COMPAT) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) > cc32-as-instr = $(call try-run,\ > printf "%b\n" "$(1)" | $(CC_COMPAT) $(VDSO_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) > > @@ -122,14 +127,10 @@ dmbinstr := $(call cc32-as-instr,dmb ishld,-DCONFIG_AS_DMB_ISHLD=1) > VDSO_CFLAGS += $(dmbinstr) > VDSO_AFLAGS += $(dmbinstr) > > -VDSO_LDFLAGS := $(VDSO_CPPFLAGS) > # From arm vDSO Makefile > -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 -mfloat-abi=soft > -VDSO_LDFLAGS += -Wl,--hash-style=sysv > -VDSO_LDFLAGS += -Wl,--build-id=sha1 > -VDSO_LDFLAGS += $(call cc32-ldoption,-fuse-ld=bfd) > +VDSO_LDFLAGS += -Bsymbolic --no-undefined -soname=linux-vdso.so.1 > +VDSO_LDFLAGS += -z max-page-size=4096 -z common-page-size=4096 > +VDSO_LDFLAGS += -nostdlib -shared --hash-style=sysv --build-id=sha1 > > > # Borrow vdsomunge.c from the arm vDSO > @@ -189,8 +190,8 @@ quiet_cmd_vdsold_and_vdso_check = LD32 $@ > cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check) > > quiet_cmd_vdsold = LD32 $@ > - cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \ > - -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@ > + cmd_vdsold = $(LD_COMPAT) $(VDSO_LDFLAGS) \ > + -T $(filter %.lds,$^) $(filter %.o,$^) -o $@ > quiet_cmd_vdsocc = CC32 $@ > cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $< > quiet_cmd_vdsocc_gettimeofday = CC32 $@ > > base-commit: 172aad81a882443eefe1bd860c4eddc81b14dd5b > -- Regards, Vincenzo _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-10-19 9:57 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-13 3:39 [PATCH] arm64: vdso32: Allow ld.lld to properly link the VDSO Nathan Chancellor 2020-10-13 3:39 ` Nathan Chancellor 2020-10-13 22:37 ` Nick Desaulniers 2020-10-13 22:37 ` Nick Desaulniers 2020-10-19 9:59 ` Vincenzo Frascino [this message] 2020-10-19 9:59 ` Vincenzo Frascino 2020-10-20 1:07 ` Nathan Chancellor 2020-10-20 1:07 ` Nathan Chancellor 2020-10-20 1:14 ` [PATCH v2] " Nathan Chancellor 2020-10-20 1:14 ` Nathan Chancellor 2020-10-20 11:37 ` Will Deacon 2020-10-20 11:37 ` Will Deacon 2020-10-26 14:22 ` Will Deacon 2020-10-26 14:22 ` Will Deacon
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=53b74ed0-f143-6870-1227-3d9663166068@arm.com \ --to=vincenzo.frascino@arm.com \ --cc=catalin.marinas@arm.com \ --cc=clang-built-linux@googlegroups.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kbuild@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=masahiroy@kernel.org \ --cc=natechancellor@gmail.com \ --cc=ndesaulniers@google.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: linkBe 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.