mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 14:00:30 +00:00
configure: Allow LD to be LLD 13.0.0 or above [BZ #26558]
When using LLD (LLVM linker) as the linker, configure prints a confusing message. *** These critical programs are missing or too old: GNU ld LLD>=13.0.0 can build glibc --enable-static-pie. (8.0.0 needs one workaround for -Wl,-defsym=_begin=0. 9.0.0 works with --disable-static-pie). XFAIL two tests sysdeps/x86/tst-ifunc-isa-* which have the BZ #28154 issue (LLD follows the PowerPC port of GNU ld for ifunc by placing IRELATIVE relocations in .rela.dyn, triggering a glibc ifunc fragility). The set of dynamic symbols is the same with GNU ld and LLD, modulo unused SHN_ABS version node symbols. For comparison, gold does not support --enable-static-pie yet (--no-dynamic-linker is unsupported BZ #22221), yet has 6 failures more than LLD. gold linked libc.so has larger .dynsym differences with GNU ld and LLD (non-default version symbols are changed to default versions by a version script BZ #28196).
This commit is contained in:
parent
60dfb30976
commit
224edada60
77
configure
vendored
77
configure
vendored
@ -4664,7 +4664,9 @@ if test $ac_verc_fail = yes; then
|
||||
fi
|
||||
|
||||
|
||||
if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
|
||||
libc_cv_with_lld=no
|
||||
case $($LD --version) in
|
||||
"GNU gold"*)
|
||||
# Accept gold 1.14 or higher
|
||||
for ac_prog in $LD
|
||||
do
|
||||
@ -4729,7 +4731,75 @@ if test $ac_verc_fail = yes; then
|
||||
LD=: critic_missing="$critic_missing GNU gold"
|
||||
fi
|
||||
|
||||
;;
|
||||
"LLD"*)
|
||||
# Accept LLD 13.0.0 or higher
|
||||
for ac_prog in $LD
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||
$as_echo_n "checking for $ac_word... " >&6; }
|
||||
if ${ac_cv_prog_LD+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if test -n "$LD"; then
|
||||
ac_cv_prog_LD="$LD" # Let the user override the test.
|
||||
else
|
||||
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||
for as_dir in $PATH
|
||||
do
|
||||
IFS=$as_save_IFS
|
||||
test -z "$as_dir" && as_dir=.
|
||||
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||
ac_cv_prog_LD="$ac_prog"
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
IFS=$as_save_IFS
|
||||
|
||||
fi
|
||||
fi
|
||||
LD=$ac_cv_prog_LD
|
||||
if test -n "$LD"; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
|
||||
$as_echo "$LD" >&6; }
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
fi
|
||||
|
||||
|
||||
test -n "$LD" && break
|
||||
done
|
||||
|
||||
if test -z "$LD"; then
|
||||
ac_verc_fail=yes
|
||||
else
|
||||
# Found it, now check the version.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $LD" >&5
|
||||
$as_echo_n "checking version of $LD... " >&6; }
|
||||
ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*LLD.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
case $ac_prog_version in
|
||||
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
1[3-9].*|[2-9][0-9].*)
|
||||
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
||||
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
||||
|
||||
esac
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
|
||||
$as_echo "$ac_prog_version" >&6; }
|
||||
fi
|
||||
if test $ac_verc_fail = yes; then
|
||||
LD=: critic_missing="$critic_missing LLD"
|
||||
fi
|
||||
|
||||
libc_cv_with_lld=yes
|
||||
;;
|
||||
*)
|
||||
for ac_prog in $LD
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
@ -4793,7 +4863,10 @@ if test $ac_verc_fail = yes; then
|
||||
LD=: critic_missing="$critic_missing GNU ld"
|
||||
fi
|
||||
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
config_vars="$config_vars
|
||||
with-lld = $libc_cv_with_lld"
|
||||
|
||||
# These programs are version sensitive.
|
||||
for ac_prog in gnumake gmake make
|
||||
|
19
configure.ac
19
configure.ac
@ -995,18 +995,31 @@ AC_CHECK_PROG_VER(AS, $AS, --version,
|
||||
[2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
|
||||
AS=: critic_missing="$critic_missing as")
|
||||
|
||||
if test -n "`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"; then
|
||||
libc_cv_with_lld=no
|
||||
case $($LD --version) in
|
||||
"GNU gold"*)
|
||||
# Accept gold 1.14 or higher
|
||||
AC_CHECK_PROG_VER(LD, $LD, --version,
|
||||
[GNU gold.* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
[1.1[4-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-9][0-9]*],
|
||||
LD=: critic_missing="$critic_missing GNU gold")
|
||||
else
|
||||
;;
|
||||
"LLD"*)
|
||||
# Accept LLD 13.0.0 or higher
|
||||
AC_CHECK_PROG_VER(LD, $LD, --version,
|
||||
[LLD.* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
[1[3-9].*|[2-9][0-9].*],
|
||||
LD=: critic_missing="$critic_missing LLD")
|
||||
libc_cv_with_lld=yes
|
||||
;;
|
||||
*)
|
||||
AC_CHECK_PROG_VER(LD, $LD, --version,
|
||||
[GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
[2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
|
||||
LD=: critic_missing="$critic_missing GNU ld")
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
LIBC_CONFIG_VAR([with-lld], [$libc_cv_with_lld])
|
||||
|
||||
# These programs are version sensitive.
|
||||
AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
|
||||
|
@ -22,12 +22,16 @@ tests += \
|
||||
tst-ifunc-isa-1-static
|
||||
tests-static += \
|
||||
tst-ifunc-isa-1-static
|
||||
test-xfail-tst-ifunc-isa-1 = $(with-lld)
|
||||
test-xfail-tst-ifunc-isa-1-static = $(with-lld)
|
||||
ifneq ($(have-tunables),no)
|
||||
tests += \
|
||||
tst-ifunc-isa-2 \
|
||||
tst-ifunc-isa-2-static
|
||||
tests-static += \
|
||||
tst-ifunc-isa-2-static
|
||||
test-xfail-tst-ifunc-isa-2 = $(with-lld)
|
||||
test-xfail-tst-ifunc-isa-2-static = $(with-lld)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
Loading…
Reference in New Issue
Block a user