| From f634ca650f724347892068489c7920631a3aac6a Mon Sep 17 00:00:00 2001 |
| From: Nathan Chancellor <nathan@kernel.org> |
| Date: Thu, 22 Apr 2021 13:19:14 -0700 |
| Subject: kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test |
| |
| From: Nathan Chancellor <nathan@kernel.org> |
| |
| commit f634ca650f724347892068489c7920631a3aac6a upstream. |
| |
| 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> |
| Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> |
| Cc: Paul Barker <paul.barker@sancloud.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| Makefile | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -1073,7 +1073,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) |