From c8aaf000d90103d91d3314584c569bc0eb74467a Mon Sep 17 00:00:00 2001
From: ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 21 Dec 2006 22:10:30 +0000
Subject: [PATCH] 	PR other/29639 	* configure.ac
 (HAVE_LD_EH_GC_SECTIONS): Check that exception tables 	are kept for
 .gnu.linkonce.t sections if COMDAT groups are disabled. 	* configure:
 Regenerate.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120121 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog    |  7 +++++++
 gcc/configure    | 36 ++++++++++++++++++++++++++++++++++++
 gcc/configure.ac | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 79 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a6829c9d43b6..a967053b9ea8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-12-21  Eric Botcazou  <ebotcazou@adacore.com>
+
+	PR other/29639
+	* configure.ac (HAVE_LD_EH_GC_SECTIONS): Check that exception tables
+	are kept for .gnu.linkonce.t sections if COMDAT groups are disabled.
+	* configure: Regenerate.
+
 2006-12-21  Joseph Myers  <joseph@codesourcery.com>
 
 	* rtlanal.c (subreg_get_info): Do not make register size
diff --git a/gcc/configure b/gcc/configure
index 62e489159c3e..09fc0aa6108e 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -16053,10 +16053,46 @@ EOF
       gcc_cv_ld_eh_gc_sections=no
     elif $gcc_cv_objdump -h conftest | grep gcc_except_table > /dev/null; then
       gcc_cv_ld_eh_gc_sections=yes
+      # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
+      if test x$gcc_cv_as_comdat_group != xyes; then
+	gcc_cv_ld_eh_gc_sections=no
+	cat > conftest.s <<EOF
+	.section	.text
+.globl _start
+        .type _start, @function
+_start:
+	.long foo
+	.size _start, .-_start
+	.section	.gnu.linkonce.t.foo,"ax",@progbits
+	.type foo, @function
+foo:
+	.long 0
+	.size foo, .-foo
+	.section	.gcc_except_table.foo,"a",@progbits
+.L0:
+	.long 0
+	.section	.eh_frame,"a",@progbits
+	.long .L0
+EOF
+	if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
+	  if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
+	       | grep "gc-sections option ignored" > /dev/null; then
+	    gcc_cv_ld_eh_gc_sections=no
+	  elif $gcc_cv_objdump -h conftest | grep gcc_except_table > /dev/null; then
+	    gcc_cv_ld_eh_gc_sections=yes
+	  fi
+	fi
+      fi
     fi
   fi
   rm -f conftest.s conftest.o conftest
 fi
+case "$target" in
+  hppa*-*-linux*)
+    # ??? This apparently exposes a binutils bug with PC-relative relocations.
+    gcc_cv_ld_eh_gc_sections=no
+    ;;
+esac
 if test x$gcc_cv_ld_eh_gc_sections = xyes; then
 
 cat >>confdefs.h <<\_ACEOF
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 26560cf10a57..706735ee95d9 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3192,10 +3192,46 @@ EOF
       gcc_cv_ld_eh_gc_sections=no
     elif $gcc_cv_objdump -h conftest | grep gcc_except_table > /dev/null; then
       gcc_cv_ld_eh_gc_sections=yes
+      # If no COMDAT groups, the compiler will emit .gnu.linkonce.t. sections.
+      if test x$gcc_cv_as_comdat_group != xyes; then
+	gcc_cv_ld_eh_gc_sections=no
+	cat > conftest.s <<EOF
+	.section	.text
+.globl _start
+        .type _start, @function
+_start:
+	.long foo
+	.size _start, .-_start
+	.section	.gnu.linkonce.t.foo,"ax",@progbits
+	.type foo, @function
+foo:
+	.long 0
+	.size foo, .-foo
+	.section	.gcc_except_table.foo,"a",@progbits
+.L0:
+	.long 0
+	.section	.eh_frame,"a",@progbits
+	.long .L0
+EOF
+	if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
+	  if $gcc_cv_ld -o conftest conftest.o --entry=_start --gc-sections 2>&1 \
+	       | grep "gc-sections option ignored" > /dev/null; then
+	    gcc_cv_ld_eh_gc_sections=no
+	  elif $gcc_cv_objdump -h conftest | grep gcc_except_table > /dev/null; then
+	    gcc_cv_ld_eh_gc_sections=yes
+	  fi
+	fi
+      fi
     fi
   fi
   rm -f conftest.s conftest.o conftest
 fi
+case "$target" in
+  hppa*-*-linux*)
+    # ??? This apparently exposes a binutils bug with PC-relative relocations.
+    gcc_cv_ld_eh_gc_sections=no
+    ;;
+esac
 if test x$gcc_cv_ld_eh_gc_sections = xyes; then
 	AC_DEFINE(HAVE_LD_EH_GC_SECTIONS, 1,
   [Define if your linker supports garbage collection of
-- 
GitLab