Jan Kratochvil 1af1aa
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=461675
Jan Kratochvil 1af1aa
http://sourceware.org/ml/binutils/2009-01/msg00412.html
Jan Kratochvil 1af1aa
http://sourceware.org/ml/binutils-cvs/2009-02/msg00003.html
Jan Kratochvil 1af1aa
Jan Kratochvil 1af1aa
bfd/
Jan Kratochvil 1af1aa
2009-02-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
Jan Kratochvil 1af1aa
Jan Kratochvil 1af1aa
	* elf-eh-frame.c (REQUIRE_CLEARED_RELOCS) Remove.
Jan Kratochvil 1af1aa
	(_bfd_elf_parse_eh_frame): Do not check relocations for removed FDEs.
Jan Kratochvil 1af1aa
Jan Kratochvil 1af1aa
ld/testsuite/
Jan Kratochvil 1af1aa
2009-02-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
Jan Kratochvil 1af1aa
Jan Kratochvil 1af1aa
	* ld-elf/eh-group2.s: New `.cfi_lsda' referencing `.gcc_except_table'.
Jan Kratochvil 1af1aa
	* ld-elf/eh-group.exp: New test and conditional defininiton of `ELF64'.
Jan Kratochvil 1af1aa
Jan Kratochvil 1af1aa
--- bfd/elf-eh-frame.c	2008/09/17 07:50:28	1.73
Jan Kratochvil 1af1aa
+++ bfd/elf-eh-frame.c	2009/02/01 12:05:25	1.74
Jan Kratochvil 1af1aa
@@ -549,16 +549,6 @@
Jan Kratochvil 1af1aa
 	     < (bfd_size_type) ((buf) - ehbuf)))	\
Jan Kratochvil 1af1aa
     cookie->rel++
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
-#define REQUIRE_CLEARED_RELOCS(buf)			\
Jan Kratochvil 1af1aa
-  while (cookie->rel < cookie->relend			\
Jan Kratochvil 1af1aa
-	 && (cookie->rel->r_offset			\
Jan Kratochvil 1af1aa
-	     < (bfd_size_type) ((buf) - ehbuf)))	\
Jan Kratochvil 1af1aa
-    {							\
Jan Kratochvil 1af1aa
-      REQUIRE (cookie->rel->r_info == 0);		\
Jan Kratochvil 1af1aa
-      REQUIRE (cookie->rel->r_addend == 0);		\
Jan Kratochvil 1af1aa
-      cookie->rel++;					\
Jan Kratochvil 1af1aa
-    }
Jan Kratochvil 1af1aa
-
Jan Kratochvil 1af1aa
 #define GET_RELOC(buf)					\
Jan Kratochvil 1af1aa
   ((cookie->rel < cookie->relend			\
Jan Kratochvil 1af1aa
     && (cookie->rel->r_offset				\
Jan Kratochvil 1af1aa
@@ -817,16 +807,16 @@
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
 	  buf = last_fde + 4 + hdr_length;
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
-	  /* Cleared FDE?  The instructions will not be cleared but verify all
Jan Kratochvil 1af1aa
-	     the relocation entries for them are cleared.  */
Jan Kratochvil 1af1aa
-	  if (rsec == NULL)
Jan Kratochvil 1af1aa
-	    {
Jan Kratochvil 1af1aa
-	      REQUIRE_CLEARED_RELOCS (buf);
Jan Kratochvil 1af1aa
-	    }
Jan Kratochvil 1af1aa
-	  else
Jan Kratochvil 1af1aa
-	    {
Jan Kratochvil 1af1aa
-	      SKIP_RELOCS (buf);
Jan Kratochvil 1af1aa
-	    }
Jan Kratochvil 1af1aa
+	  /* For NULL RSEC (cleared FDE belonging to a discarded section)
Jan Kratochvil 1af1aa
+	     the relocations are commonly cleared.  We do not sanity check if
Jan Kratochvil 1af1aa
+	     all these relocations are cleared as (1) relocations to
Jan Kratochvil 1af1aa
+	     .gcc_except_table will remain uncleared (they will get dropped
Jan Kratochvil 1af1aa
+	     with the drop of this unused FDE) and (2) BFD already safely drops
Jan Kratochvil 1af1aa
+	     relocations of any type to .eh_frame by
Jan Kratochvil 1af1aa
+	     elf_section_ignore_discarded_relocs.
Jan Kratochvil 1af1aa
+	     TODO: The .gcc_except_table entries should be also filtered as
Jan Kratochvil 1af1aa
+	     .eh_frame entries; or GCC could rather use COMDAT for them.  */
Jan Kratochvil 1af1aa
+	  SKIP_RELOCS (buf);
Jan Kratochvil 1af1aa
 	}
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
       /* Try to interpret the CFA instructions and find the first
Jan Kratochvil 1af1aa
--- ld/testsuite/ld-elf/eh-group.exp	2008/09/25 03:16:42	1.3
Jan Kratochvil 1af1aa
+++ ld/testsuite/ld-elf/eh-group.exp	2009/02/01 12:05:25	1.4
Jan Kratochvil 1af1aa
@@ -40,12 +40,28 @@
Jan Kratochvil 1af1aa
     return
Jan Kratochvil 1af1aa
 }
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
-set build_tests_ld {
Jan Kratochvil 1af1aa
-  {"Build eh-group1.o"
Jan Kratochvil 1af1aa
-   "-r" ""
Jan Kratochvil 1af1aa
-   {eh-group1.s eh-group2.s} {} "eh-group.o"}
Jan Kratochvil 1af1aa
+# alpha-linux-gnu does not support 64-bit relocations:
Jan Kratochvil 1af1aa
+#   relocation truncated to fit: REFLONG against `.gcc_except_table'
Jan Kratochvil 1af1aa
+# arm-eabi does not support 64-bit relocations:
Jan Kratochvil 1af1aa
+#   bad relocation fixup type (1)
Jan Kratochvil 1af1aa
+set testname "Guess the target size from eh-group1size.o"
Jan Kratochvil 1af1aa
+if [ld_assemble $as "$srcdir/$subdir/eh-group1.s" "tmpdir/eh-group1size.o"] {
Jan Kratochvil 1af1aa
+    pass $testname
Jan Kratochvil 1af1aa
+} else {
Jan Kratochvil 1af1aa
+    fail $testname
Jan Kratochvil 1af1aa
 }
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
+set as_options ""
Jan Kratochvil 1af1aa
+if [is_elf64 "tmpdir/eh-group1size.o"] {
Jan Kratochvil 1af1aa
+    set as_options "$as_options --defsym ELF64=1"
Jan Kratochvil 1af1aa
+}
Jan Kratochvil 1af1aa
+
Jan Kratochvil 1af1aa
+set build_tests_ld [list			\
Jan Kratochvil 1af1aa
+  [list "Build eh-group1.o"			\
Jan Kratochvil 1af1aa
+   "-r" "$as_options"				\
Jan Kratochvil 1af1aa
+   {eh-group1.s eh-group2.s} {} "eh-group.o"]	\
Jan Kratochvil 1af1aa
+]
Jan Kratochvil 1af1aa
+
Jan Kratochvil 1af1aa
 run_ld_link_tests $build_tests_ld
Jan Kratochvil 1af1aa
 
Jan Kratochvil 1af1aa
 set testname "Link eh-group.o to eh-group"
Jan Kratochvil 1af1aa
--- ld/testsuite/ld-elf/eh-group2.s	2008/09/20 08:42:53	1.2
Jan Kratochvil 1af1aa
+++ ld/testsuite/ld-elf/eh-group2.s	2009/02/01 12:05:25	1.3
Jan Kratochvil 1af1aa
@@ -1,4 +1,15 @@
Jan Kratochvil 1af1aa
 	.section	sect, "axG", %progbits, sectgroup, comdat
Jan Kratochvil 1af1aa
 	.cfi_startproc
Jan Kratochvil 1af1aa
+# Test intention is that LSDA must be provided by the discarded FDE.
Jan Kratochvil 1af1aa
+# DW_EH_PE_udata8 = 4
Jan Kratochvil 1af1aa
+# DW_EH_PE_udata4 = 3
Jan Kratochvil 1af1aa
+	.ifdef		ELF64
Jan Kratochvil 1af1aa
+	.cfi_lsda 4, lsda
Jan Kratochvil 1af1aa
+	.else
Jan Kratochvil 1af1aa
+	.cfi_lsda 3, lsda
Jan Kratochvil 1af1aa
+	.endif
Jan Kratochvil 1af1aa
 	.skip 16
Jan Kratochvil 1af1aa
 	.cfi_endproc
Jan Kratochvil 1af1aa
+
Jan Kratochvil 1af1aa
+	.section	.gcc_except_table, "a", %progbits
Jan Kratochvil 1af1aa
+lsda: