#! /bin/sh -e

# DP: Link using --hash-style=both (alpha, amd64, ia64, i386, powerpc, ppc64, s390, sparc)

dir=
if [ $# -eq 3 -a "$2" = '-d' ]; then
    pdir="-d $3"
    dir="$3/"
elif [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi
case "$1" in
    -patch)
        patch $pdir -f --no-backup-if-mismatch -p0 < $0
        #cd ${dir}gcc && autoconf
        ;;
    -unpatch)
        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
        #rm ${dir}gcc/configure
        ;;
    *)
        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
        exit 1
esac
exit 0

2006-07-11  Jakub Jelinek  <jakub@redhat.com>

	* config/i386/linux.h (LINK_SPEC): Add --hash-style=both.
	* config/i386/linux64.h (LINK_SPEC): Likewise.
	* config/rs6000/sysv4.h (LINK_OS_LINUX_SPEC): Likewise.
	* config/rs6000/linux64.h (LINK_OS_LINUX_SPEC32,
	LINK_OS_LINUX_SPEC64): Likewise.
	* config/s390/linux.h (LINK_SPEC): Likewise.
	* config/ia64/linux.h (LINK_SPEC): Likewise.
	* config/sparc/linux.h (LINK_SPEC): Likewise.
	* config/sparc/linux64.h (LINK_SPEC, LINK_ARCH32_SPEC,
	LINK_ARCH64_SPEC): Likewise.
	* config/alpha/linux-elf.h (LINK_SPEC): Likewise.

--- gcc/config/alpha/linux-elf.h.orig	2007-08-04 08:55:58.000000000 +0200
+++ gcc/config/alpha/linux-elf.h	2007-09-01 15:47:26.605865578 +0200
@@ -39,7 +39,7 @@
 
 #define ELF_DYNAMIC_LINKER	LINUX_DYNAMIC_LINKER
 
-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax}		\
+#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax}	\
   %{O*:-O3} %{!O*:-O1}						\
   %{shared:-shared}						\
   %{!shared:							\
--- gcc/config/s390/linux.h.orig	2007-08-04 08:55:59.000000000 +0200
+++ gcc/config/s390/linux.h	2007-09-01 15:47:26.605865578 +0200
@@ -77,7 +77,7 @@
 
 #undef  LINK_SPEC
 #define LINK_SPEC \
-  "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
+  "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \
    %{shared:-shared} \
    %{!shared: \
       %{static:-static} \
--- gcc/config/sparc/linux.h.orig	2007-08-04 08:56:01.000000000 +0200
+++ gcc/config/sparc/linux.h	2007-09-01 15:47:26.605865578 +0200
@@ -132,7 +132,7 @@
 
 
 #undef  LINK_SPEC
-#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \
+#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \
   %{!mno-relax:%{!r:-relax}} \
   %{!shared: \
     %{!ibcs: \
--- gcc/config/sparc/linux64.h.orig	2007-08-04 08:56:01.000000000 +0200
+++ gcc/config/sparc/linux64.h	2007-09-01 15:47:26.605865578 +0200
@@ -166,7 +166,7 @@
   { "link_arch_default", LINK_ARCH_DEFAULT_SPEC },	  \
   { "link_arch",	 LINK_ARCH_SPEC },
 
-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,%R/usr/lib %{shared:-shared} \
+#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,%R/usr/lib %{shared:-shared} \
   %{!shared: \
     %{!ibcs: \
       %{!static: \
@@ -175,7 +175,7 @@
         %{static:-static}}} \
 "
 
-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
+#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \
   %{!shared: \
     %{!ibcs: \
       %{!static: \
@@ -256,7 +256,7 @@
 #else /* !SPARC_BI_ARCH */
 
 #undef LINK_SPEC
-#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \
+#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \
   %{!shared: \
     %{!ibcs: \
       %{!static: \
--- gcc/config/i386/linux.h.orig	2007-08-04 08:56:07.000000000 +0200
+++ gcc/config/i386/linux.h	2007-09-01 15:47:26.605865578 +0200
@@ -108,7 +108,7 @@
   { "dynamic_linker", LINUX_DYNAMIC_LINKER }
 
 #undef	LINK_SPEC
-#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
+#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \
   %{!shared: \
     %{!ibcs: \
       %{!static: \
--- gcc/config/i386/linux64.h.orig	2007-08-04 08:56:07.000000000 +0200
+++ gcc/config/i386/linux64.h	2007-09-01 15:48:27.336781690 +0200
@@ -65,7 +65,7 @@
 #endif
 
 #undef	LINK_SPEC
-#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \
+#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
--- gcc/config/ia64/linux.h.orig	2006-12-12 18:59:53.000000000 +0100
+++ gcc/config/ia64/linux.h	2007-09-01 15:47:26.605865578 +0200
@@ -40,7 +40,7 @@
 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
 
 #undef LINK_SPEC
-#define LINK_SPEC "\
+#define LINK_SPEC "--hash-style=both \
   %{shared:-shared} \
   %{!shared: \
     %{!static: \
--- gcc/config/rs6000/sysv4.h.orig	2007-08-08 23:37:49.000000000 +0200
+++ gcc/config/rs6000/sysv4.h	2007-09-01 15:47:26.615865729 +0200
@@ -901,7 +901,7 @@
 #define LINUX_DYNAMIC_LINKER \
   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
 
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
 
--- gcc/config/rs6000/linux64.h.orig	2007-08-04 08:56:12.000000000 +0200
+++ gcc/config/rs6000/linux64.h	2007-09-01 15:47:26.615865729 +0200
@@ -354,11 +354,11 @@
   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
 
 
-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}}"
 
-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \
+#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \
   %{rdynamic:-export-dynamic} \
   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"