Przeglądaj źródła

[LibOS/Glibc] Separate Glibc patch for supporting ld.gold

Chia-Che Tsai 5 lat temu
rodzic
commit
1df0204555
3 zmienionych plików z 207 dodań i 203 usunięć
  1. 4 0
      LibOS/Makefile
  2. 0 203
      LibOS/glibc-2.19.patch
  3. 203 0
      LibOS/glibc-ld.gold.patch

+ 4 - 0
LibOS/Makefile

@@ -91,6 +91,10 @@ ifneq ($(USE_clone_FOR_fork),)
 GLIBC_PATCHES += glibc-arch-fork.patch
 endif
 
+ifneq ($(filter %.gold,$(shell readlink -f /usr/bin/ld)),)
+GLIBC_PATCHES += glibc-ld.gold.patch
+endif
+
 $(GLIBC_SRC)/configure: $(GLIBC_PATCHES) Makefile
 	[ -f $(GLIBC_SRC).tar.gz ] || \
 	for MIRROR in $(GLIBC_MIRRORS); do \

+ 0 - 203
LibOS/glibc-2.19.patch

@@ -77,209 +77,6 @@ index 759c754..e1a270e 100644
 +liblibos {
 +  GLIBC_2.12
 +}
-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 :
 diff --git a/dlfcn/Versions b/dlfcn/Versions
 index 97902f0..c1874c1 100644
 --- a/dlfcn/Versions

+ 203 - 0
LibOS/glibc-ld.gold.patch

@@ -0,0 +1,203 @@
+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 :