https://bugs.kde.org/show_bug.cgi?id=439046 --- diff --git a/configure.ac b/configure.ac index 4582fb5d0..63fd6c25e 100755 --- a/configure.ac +++ b/configure.ac @@ -2639,30 +2639,52 @@ CFLAGS=$safe_CFLAGS # will reside. -Ttext aligns just the .text section start (but not any # other section). # -# So test for -Ttext-segment which is supported by all bfd ld versions +# LLVM ld.lld 10.0 changed the semantics of its -Ttext. See "Breaking changes" +# in https://releases.llvm.org/10.0.0/tools/lld/docs/ReleaseNotes.html +# The --image-base option (since version 6.0?) provides the semantics needed. +# -Ttext-segment generates an error, but -Ttext now more closely +# follows the GNU (bfd) ld's -Ttext. +# +# So test first for --image-base support, and if that fails then +# for -Ttext-segment which is supported by all bfd ld versions # and use that if it exists. If it doesn't exist it must be an older # version of gold and we can fall back to using -Ttext which has the # right semantics. -AC_MSG_CHECKING([if the linker accepts -Wl,-Ttext-segment]) - safe_CFLAGS=$CFLAGS -CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,-Ttext-segment=$valt_load_address_pri_norml -Werror" +AC_MSG_CHECKING([if the linker accepts -Wl,--image-base]) + +CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,--image-base=$valt_load_address_pri_norml -Werror" AC_LINK_IFELSE( [AC_LANG_SOURCE([int _start () { return 0; }])], [ linker_using_t_text="no" - AC_SUBST([FLAG_T_TEXT], ["-Ttext-segment"]) + AC_SUBST([FLAG_T_TEXT], ["--image-base"]) AC_MSG_RESULT([yes]) ], [ - linker_using_t_text="yes" - AC_SUBST([FLAG_T_TEXT], ["-Ttext"]) AC_MSG_RESULT([no]) + + AC_MSG_CHECKING([if the linker accepts -Wl,-Ttext-segment]) + + CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,-Ttext-segment=$valt_load_address_pri_norml -Werror" + + AC_LINK_IFELSE( + [AC_LANG_SOURCE([int _start () { return 0; }])], + [ + linker_using_t_text="no" + AC_SUBST([FLAG_T_TEXT], ["-Ttext-segment"]) + AC_MSG_RESULT([yes]) + ], [ + linker_using_t_text="yes" + AC_SUBST([FLAG_T_TEXT], ["-Ttext"]) + AC_MSG_RESULT([no]) + ]) ]) + CFLAGS=$safe_CFLAGS -# If the linker only supports -Ttext (not -Ttext-segment) then we will +# If the linker only supports -Ttext (not -Ttext-segment or --image-base) then we will # have to strip any build-id ELF NOTEs from the statically linked tools. # Otherwise the build-id NOTE might end up at the default load address. # (Pedantically if the linker is gold then -Ttext is fine, but newer @@ -2688,7 +2710,7 @@ AC_LINK_IFELSE( AC_MSG_RESULT([no]) ]) else -AC_MSG_NOTICE([ld -Ttext-segment used, no need to strip build-id NOTEs.]) +AC_MSG_NOTICE([ld --image-base or -Ttext-segment used, no need to strip build-id NOTEs.]) AC_SUBST([FLAG_NO_BUILD_ID], [""]) fi CFLAGS=$safe_CFLAGS --