Files
graphene/LibOS/glibc-ld.gold.patch

204 lines
6.6 KiB
Diff

diff --git a/configure b/configure
index fc023d0..b71c1f9 100755
--- a/configure
+++ b/configure
@@ -630,7 +630,8 @@ SED
MAKEINFO
MSGFMT
MAKE
-LD
+LD_GOLD
+LD_BFD
AS
OBJCOPY
OBJDUMP
@@ -4593,17 +4594,22 @@ if test $ac_verc_fail = yes; then
AS=: critic_missing="$critic_missing as"
fi
-for ac_prog in $LD
+LD_BFD=
+LD_GOLD=
+ld_is_gold="`$LD --version | sed -n 's/^GNU \(gold\).*$/\1/p'`"
+if test -z "$ld_is_gold"; then
+ LD_BFD=$LD
+ for ac_prog in $LD_BFD
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 :
+if ${ac_cv_prog_LD_BFD+:} false; then :
$as_echo_n "(cached) " >&6
else
- if test -n "$LD"; then
- ac_cv_prog_LD="$LD" # Let the user override the test.
+ if test -n "$LD_BFD"; then
+ ac_cv_prog_LD_BFD="$LD_BFD" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -4612,7 +4618,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_LD="$ac_prog"
+ ac_cv_prog_LD_BFD="$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -4622,26 +4628,26 @@ 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; }
+LD_BFD=$ac_cv_prog_LD_BFD
+if test -n "$LD_BFD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD_BFD" >&5
+$as_echo "$LD_BFD" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
- test -n "$LD" && break
+ test -n "$LD_BFD" && break
done
-if test -z "$LD"; then
+if test -z "$LD_BFD"; 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/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $LD_BFD" >&5
+$as_echo_n "checking version of $LD_BFD... " >&6; }
+ ac_prog_version=`$LD_BFD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*)
@@ -4653,9 +4659,80 @@ $as_echo_n "checking version of $LD... " >&6; }
$as_echo "$ac_prog_version" >&6; }
fi
if test $ac_verc_fail = yes; then
- LD=: critic_missing="$critic_missing ld"
+ LD_BFD=:
fi
+else
+# Accept gold 1.11 or higher.
+ LD_GOLD=$LD
+ for ac_prog in $LD_GOLD
+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_GOLD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LD_GOLD"; then
+ ac_cv_prog_LD_GOLD="$LD_GOLD" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LD_GOLD="$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_GOLD=$ac_cv_prog_LD_GOLD
+if test -n "$LD_GOLD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD_GOLD" >&5
+$as_echo "$LD_GOLD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$LD_GOLD" && break
+done
+
+if test -z "$LD_GOLD"; then
+ ac_verc_fail=yes
+else
+ # Found it, now check the version.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of $LD_GOLD" >&5
+$as_echo_n "checking version of $LD_GOLD... " >&6; }
+ ac_prog_version=`$LD_GOLD --version 2>&1 | sed -n 's/^.*GNU gold.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+ 1.1[1-9]*|1.[2-9][0-9]*|1.1[0-9][0-9]*|[2-9].*|[1-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_GOLD=:
+fi
+
+fi
+# Neither ld nor gold are new enough.
+if test -z "$LD_BFD" && test -z "$LD_GOLD"; then
+ critic_missing="$critic_missing ld"
+fi
# These programs are version sensitive.
@@ -6391,6 +6468,16 @@ $as_echo "$libc_cv_use_default_link" >&6; }
use_default_link=$libc_cv_use_default_link
fi
+# The gold linker has no builtin default linker script,
+# and the fallback of editing the builtin linker
+# script is not available. Therefore if use_default_link
+# is `no' then we can't use gold. This check is independent
+# of gold's version and is used to sanity check that the
+# linker continues to produce a useful shared link.
+if test "$ld_is_gold" && test "$use_default_link" = "no"; then
+ as_fn_error $? "$LD did not generate a useful shared link. Try using GNU ld.bfd?" "$LINENO" 5
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker output format" >&5
$as_echo_n "checking linker output format... " >&6; }
if ${libc_cv_output_format+:} false; then :
@@ -6409,6 +6496,17 @@ fi
$as_echo "$libc_cv_output_format" >&6; }
+# The gold linker has no builtin default linker script,
+# and the fallback of parsing the builtin linker
+# script to determine the target is not available.
+# Therefore if libc_cv_output_format is `unknown' then
+# we can't use gold. This check is independent of gold's
+# version and is used to sanity check that the linker
+# continues to support --print-output-format.
+if test "$ld_is_gold" && test "$libc_cv_output_format" = "unknown"; then
+ as_fn_error $? "$LD did not support --print-output-format. Try using GNU ld.bfd?" "$LINENO" 5
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-toplevel-reorder -fno-section-anchors" >&5
$as_echo_n "checking for -fno-toplevel-reorder -fno-section-anchors... " >&6; }
if ${libc_cv_fno_toplevel_reorder+:} false; then :