2017-10-29 0:00 GMT+09:00 Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx>: > 2017-10-28 5:13 GMT+09:00 Nick Desaulniers <ndesaulniers@xxxxxxxxxx>: >> I was not seeing my linker flags getting added when using ld-option when >> cross compiling with Clang. Upon investigation, this seems to be due to >> a difference in how GCC vs Clang handle cross compilation. >> >> GCC is configured at build time to support one backend, that is implicit >> when compiling. Clang is explicit via the use of `-target <triple>` and >> ships with all supported backends by default. >> >> GNU Make feature test macros that compile then link will always fail >> when cross compiling with Clang unless Clang's triple is passed along to >> the compiler. For example: >> >> $ clang -x c /dev/null -c -o temp.o >> $ aarch64-linux-android/bin/ld -E temp.o >> aarch64-linux-android/bin/ld: >> unknown architecture of input file `temp.o' is incompatible with >> aarch64 output >> aarch64-linux-android/bin/ld: >> warning: cannot find entry symbol _start; defaulting to >> 0000000000400078 >> $ echo $? >> 1 >> >> $ clang -target aarch64-linux-android- -x c /dev/null -c -o temp.o >> $ aarch64-linux-android/bin/ld -E temp.o >> aarch64-linux-android/bin/ld: >> warning: cannot find entry symbol _start; defaulting to 00000000004002e4 >> $ echo $? >> 0 >> >> This causes conditional checks that invoke $(CC) without the target >> triple, then $(LD) on the result, to always fail. >> >> Suggested-by: Masahiro Yamada <yamada.masahiro@xxxxxxxxxxxxx> >> Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> >> Reviewed-by: Matthias Kaehlcke <mka@xxxxxxxxxxxx> >> --- >> Changes since v1: >> * base patch off of >> git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git >> kbuild branch, per Masahiro. >> * Use $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) rather than $(CLANG_TRIPLE), per >> Masahiro. >> >> scripts/Kbuild.include | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include >> index 064f477dfdca..0f09e4508554 100644 >> --- a/scripts/Kbuild.include >> +++ b/scripts/Kbuild.include >> @@ -228,12 +228,13 @@ cc-if-fullversion = $(shell [ $(cc-fullversion) $(1) $(2) ] && echo $(3) || echo >> # cc-ldoption >> # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both) >> cc-ldoption = $(call try-run-cached,\ >> - $(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) >> + $(CC) $(1) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) >> >> # ld-option >> # Usage: LDFLAGS += $(call ld-option, -X) >> ld-option = $(call try-run-cached,\ >> - $(CC) -x c /dev/null -c -o "$$TMPO" ; $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2)) >> + $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -x c /dev/null -c -o "$$TMPO"; \ >> + $(LD) $(1) "$$TMPO" -o "$$TMP",$(1),$(2)) >> >> # ar-option >> # Usage: KBUILD_ARFLAGS := $(call ar-option,D) >> -- >> 2.15.0.rc2.357.g7e34df9404-goog >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > > Applied to linux-kbuild/kbuild. Thanks! I do not know the cause of the problem reported by the 0-day bot, but if the problem happens in the following line, ifeq ($(CONFIG_X86_32),y) LDFLAGS += $(call ld-option, -pie) $(call ld-option, --no-dynamic-linker) else Does the following solve the issue? (adding $(LDFLAGS)) ld-option = $(call try-run,\ $(CC) $(KBUILD_CPPFLAGS) $(CC_OPTION_CFLAGS) -x c /dev/null -c -o "$$TMPO"; \ $(LD) $(LDFLAGS) $(1) "$$TMPO" -o "$$TMP",$(1),$(2)) -- Best Regards Masahiro Yamada -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html