From: Nicholas Vinson Date: Wed, 19 Nov 2025 00:38:07 +0000 (-0500) Subject: configure: Check linker for --image-base support X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a5417f39a0ccefcdd5440f2a67f84d2d2e26960;p=thirdparty%2Fgrub.git configure: Check linker for --image-base support In several scenarios, configure tests assume it's safe to use "-Wl,-Ttext,
", but starting with ld.lld-21, blindly using that flag may result in configure-test failures due to ld.lld failing to link. The failure is because ld.lld-21 no longer allows the specified address is less than the base address. However, ld.lld-21+ and ld.bfd-2.44+ both provide support for the --image-base flag making it preferable over the older -Ttext flag. Fixes: https://savannah.gnu.org/bugs/?67662 Signed-off-by: Nicholas Vinson Reviewed-by: Daniel Kiper --- diff --git a/acinclude.m4 b/acinclude.m4 index fa7840f09..70c1912f8 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -79,6 +79,11 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE], [AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses]) AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, [cat > conftest.c <<\EOF +asm ( + ".globl start, _start, __start\n" + ".ifdef cmain; .set start = _start = __start = cmain\n.endif\n" + ".ifdef _cmain; .set start = _start = __start = _cmain\n.endif\n" +); void cmain (void); void cmain (void) diff --git a/configure.ac b/configure.ac index 17937baf4..a282bf7bf 100644 --- a/configure.ac +++ b/configure.ac @@ -1461,7 +1461,6 @@ elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_c TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/i386-cygwin-img-ld.sc" TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/i386-cygwin-img-ld.sc" - TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" TARGET_IMG_CFLAGS= else TARGET_APPLE_LINKER=0 @@ -1469,7 +1468,6 @@ else TARGET_IMG_LDSCRIPT= TARGET_IMG_LDFLAGS='-Wl,-N' TARGET_IMG_LDFLAGS_AC='-Wl,-N' - TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" TARGET_IMG_CFLAGS= fi @@ -1795,6 +1793,18 @@ LIBS="" grub_ASM_USCORE grub_PROG_TARGET_CC if test "x$TARGET_APPLE_LINKER" != x1 ; then +AX_CHECK_LINK_FLAG([-Wl,--image-base,0x400000], + [TARGET_IMG_BASE_LDOPT="-Wl,--image-base"], + [TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"], + [], + [AC_LANG_SOURCE([ +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); + ])]) grub_PROG_OBJCOPY_ABSOLUTE fi grub_PROG_LD_BUILD_ID_NONE