]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
configure: Check linker for --image-base support
authorNicholas Vinson <nvinson234@gmail.com>
Wed, 19 Nov 2025 00:38:07 +0000 (19:38 -0500)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 20 Nov 2025 16:03:27 +0000 (17:03 +0100)
In several scenarios, configure tests assume it's safe to use
"-Wl,-Ttext,<address>", 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 <nvinson234@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
acinclude.m4
configure.ac

index fa7840f09af5f29bd7f023baba56497a049cdc8a..70c1912f80c94e2483bcd5cdc5e94fe1c9793cea 100644 (file)
@@ -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)
index 17937baf444a345aa3326454e41907cb8adf5de2..a282bf7bfbc7ba3335af45fbae96acc5af0b451a 100644 (file)
@@ -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