Skip to content

Commit 1a5417f

Browse files
nvinsonDaniel Kiper
authored andcommitted
configure: Check linker for --image-base support
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>
1 parent f41c896 commit 1a5417f

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

acinclude.m4

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
7979
[AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
8080
AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
8181
[cat > conftest.c <<\EOF
82+
asm (
83+
".globl start, _start, __start\n"
84+
".ifdef cmain; .set start = _start = __start = cmain\n.endif\n"
85+
".ifdef _cmain; .set start = _start = __start = _cmain\n.endif\n"
86+
);
8287
void cmain (void);
8388
void
8489
cmain (void)

configure.ac

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,15 +1461,13 @@ elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_c
14611461
TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/i386-cygwin-img-ld.sc"
14621462
TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
14631463
TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/i386-cygwin-img-ld.sc"
1464-
TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
14651464
TARGET_IMG_CFLAGS=
14661465
else
14671466
TARGET_APPLE_LINKER=0
14681467
TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
14691468
TARGET_IMG_LDSCRIPT=
14701469
TARGET_IMG_LDFLAGS='-Wl,-N'
14711470
TARGET_IMG_LDFLAGS_AC='-Wl,-N'
1472-
TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
14731471
TARGET_IMG_CFLAGS=
14741472
fi
14751473

@@ -1795,6 +1793,18 @@ LIBS=""
17951793
grub_ASM_USCORE
17961794
grub_PROG_TARGET_CC
17971795
if test "x$TARGET_APPLE_LINKER" != x1 ; then
1796+
AX_CHECK_LINK_FLAG([-Wl,--image-base,0x400000],
1797+
[TARGET_IMG_BASE_LDOPT="-Wl,--image-base"],
1798+
[TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"],
1799+
[],
1800+
[AC_LANG_SOURCE([
1801+
asm (".globl start; start:");
1802+
asm (".globl _start; _start:");
1803+
asm (".globl __start; __start:");
1804+
void __main (void);
1805+
void __main (void) {}
1806+
int main (void);
1807+
])])
17981808
grub_PROG_OBJCOPY_ABSOLUTE
17991809
fi
18001810
grub_PROG_LD_BUILD_ID_NONE

0 commit comments

Comments
 (0)