linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test
@ 2021-04-22 20:19 Nathan Chancellor
  2021-04-24 21:13 ` Masahiro Yamada
  0 siblings, 1 reply; 2+ messages in thread
From: Nathan Chancellor @ 2021-04-22 20:19 UTC (permalink / raw)
  To: Masahiro Yamada, Michal Marek, Nick Desaulniers
  Cc: linux-kbuild, linux-kernel, clang-built-linux, Nathan Chancellor

Normally, invocations of $(HOSTCC) include $(KBUILD_HOSTLDFLAGS), which
in turn includes $(HOSTLDFLAGS), which allows users to pass in their own
flags when linking. However, the 'has_libelf' test does not, meaning
that if a user requests a specific linker via HOSTLDFLAGS=-fuse-ld=...,
it is not respected and the build might error.

For example, if a user building with clang wants to use all of the LLVM
tools without any GNU tools, they might remove all of the GNU tools from
their system or PATH then build with

$ make HOSTLDFLAGS=-fuse-ld=lld LLVM=1 LLVM_IAS=1

which says use all of the LLVM tools, the integrated assembler, and
ld.lld for linking host executables. Without this change, the build will
error because $(HOSTCC) uses its default linker, rather than the one
requested via -fuse-ld=..., which is GNU ld in clang's case in a default
configuration.

error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please
install libelf-dev, libelf-devel or elfutils-libelf-devel
make[1]: *** [Makefile:1260: prepare-objtool] Error 1

Add $(KBUILD_HOSTLDFLAGS) to the 'has_libelf' test so that the linker
choice is respected.

Link: https://github.com/ClangBuiltLinux/linux/issues/479
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index bc19584fee59..1535b32c8baa 100644
--- a/Makefile
+++ b/Makefile
@@ -1092,7 +1092,7 @@ export mod_sign_cmd
 HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
 
 has_libelf = $(call try-run,\
-               echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
+               echo "int main() {}" | $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
 
 ifdef CONFIG_STACK_VALIDATION
   ifeq ($(has_libelf),1)

base-commit: bf05bf16c76bb44ab5156223e1e58e26dfe30a88
-- 
2.31.1.362.g311531c9de


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test
  2021-04-22 20:19 [PATCH] kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test Nathan Chancellor
@ 2021-04-24 21:13 ` Masahiro Yamada
  0 siblings, 0 replies; 2+ messages in thread
From: Masahiro Yamada @ 2021-04-24 21:13 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Michal Marek, Nick Desaulniers, Linux Kbuild mailing list,
	Linux Kernel Mailing List, clang-built-linux

On Fri, Apr 23, 2021 at 5:19 AM Nathan Chancellor <nathan@kernel.org> wrote:
>
> Normally, invocations of $(HOSTCC) include $(KBUILD_HOSTLDFLAGS), which
> in turn includes $(HOSTLDFLAGS), which allows users to pass in their own
> flags when linking. However, the 'has_libelf' test does not, meaning
> that if a user requests a specific linker via HOSTLDFLAGS=-fuse-ld=...,
> it is not respected and the build might error.
>
> For example, if a user building with clang wants to use all of the LLVM
> tools without any GNU tools, they might remove all of the GNU tools from
> their system or PATH then build with
>
> $ make HOSTLDFLAGS=-fuse-ld=lld LLVM=1 LLVM_IAS=1
>
> which says use all of the LLVM tools, the integrated assembler, and
> ld.lld for linking host executables. Without this change, the build will
> error because $(HOSTCC) uses its default linker, rather than the one
> requested via -fuse-ld=..., which is GNU ld in clang's case in a default
> configuration.
>
> error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please
> install libelf-dev, libelf-devel or elfutils-libelf-devel
> make[1]: *** [Makefile:1260: prepare-objtool] Error 1
>
> Add $(KBUILD_HOSTLDFLAGS) to the 'has_libelf' test so that the linker
> choice is respected.
>
> Link: https://github.com/ClangBuiltLinux/linux/issues/479
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> ---

I applied this since the MW is opening shortly.

However, I believe the right thing to do is
to kill the pointless check entirely.




>  Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index bc19584fee59..1535b32c8baa 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1092,7 +1092,7 @@ export mod_sign_cmd
>  HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
>
>  has_libelf = $(call try-run,\
> -               echo "int main() {}" | $(HOSTCC) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
> +               echo "int main() {}" | $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
>
>  ifdef CONFIG_STACK_VALIDATION
>    ifeq ($(has_libelf),1)
>
> base-commit: bf05bf16c76bb44ab5156223e1e58e26dfe30a88
> --
> 2.31.1.362.g311531c9de
>


-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-04-24 21:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-22 20:19 [PATCH] kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test Nathan Chancellor
2021-04-24 21:13 ` Masahiro Yamada

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).