PR46, cygwin: FAIL: cdtest with -Ur

Message ID 20191121083852.GC31415@bubble.grove.modra.org
State New
Headers show
Series
  • PR46, cygwin: FAIL: cdtest with -Ur
Related show

Commit Message

Alan Modra Nov. 21, 2019, 8:38 a.m.
See the comment in pe.sc to understand why ld -Ur won't work.

	PR 46
binutils/
	* testsuite/lib/binutils-common.exp (is_pecoff_format): Rewrite
	with positive logic and add more target triples.
ld/
	* scripttempl/pe.sc: Comment on ld -Ur fail.  Wrap .gcc_exc comment.
	* scripttempl/pep.sc: Likewise.
	* testsuite/ld-cdtest/cdtest.exp (test2): xfail for pe.


-- 
Alan Modra
Australia Development Lab, IBM

Patch

diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
index a523f4b781..3b229babeb 100644
--- a/binutils/testsuite/lib/binutils-common.exp
+++ b/binutils/testsuite/lib/binutils-common.exp
@@ -95,14 +95,17 @@  proc is_aout_format {} {
 # True if the object format is known to be PE COFF.
 #
 proc is_pecoff_format {} {
-    if { ![istarget *-*-mingw*]
-	 && ![istarget *-*-cygwin*]
-	 && ![istarget *-*-cegcc*]
-	 && ![istarget *-*-pe*] } {
-	return 0
+    if { [istarget *-*-beospe*]
+	 || [istarget *-*-cegcc*]
+	 || [istarget *-*-cygwin*]
+	 || [istarget *-*-interix*]
+	 || [istarget *-*-mingw*]
+	 || [istarget *-*-netbsdpe*]
+	 || [istarget *-*-pe*]
+	 || [istarget *-*-winnt*] } {
+	return 1
     }
-
-    return 1
+    return 0
 }
 
 proc is_som_format {} {
diff --git a/ld/scripttempl/i386beos.sc b/ld/scripttempl/i386beos.sc
index f4ce42ccde..b45b83fc9e 100644
--- a/ld/scripttempl/i386beos.sc
+++ b/ld/scripttempl/i386beos.sc
@@ -69,7 +69,7 @@  SECTIONS
     ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
 			LONG (-1); *(.dtors); *(.dtor);  LONG (0); }
     ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
-    /* ??? Why is .gcc_exc here?  */
+    ${RELOCATING+/* ??? Why is .gcc_exc here?  */}
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+ etext = .;}
     ${RELOCATING+ __text_end__ = .;}
diff --git a/ld/scripttempl/mcorepe.sc b/ld/scripttempl/mcorepe.sc
index e7cf3d3544..eea70271bb 100644
--- a/ld/scripttempl/mcorepe.sc
+++ b/ld/scripttempl/mcorepe.sc
@@ -76,7 +76,7 @@  SECTIONS
     ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
 			LONG (-1); *(.dtors); *(.dtor);  LONG (0); }
     ${RELOCATING+ KEEP (*(SORT_NONE(.fini)))}
-    /* ??? Why is .gcc_exc here?  */
+    ${RELOCATING+/* ??? Why is .gcc_exc here?  */}
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+ etext = .;}
     *(.gcc_except_table)
diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc
index 865ee58d91..8b5e1a1dad 100644
--- a/ld/scripttempl/pe.sc
+++ b/ld/scripttempl/pe.sc
@@ -104,6 +104,7 @@  SECTIONS
           expectation that they will be overridden by the definitions
 	  here.  If we PROVIDE the symbols then they will not be
 	  overridden and global constructors will not be run.
+	  See PR 22762 for more details.
 	  
 	  This does mean that it is not possible for a user to define
 	  their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do,
@@ -113,7 +114,9 @@  SECTIONS
 	  (The custom script can just be a copy of this script with the
 	  PROVIDE() qualifiers added).
 
-	  See PR 22762 for more details.  */
+	  In particular this means that ld -Ur does not work, because
+	  the proper __CTOR_LIST__ set by ld -Ur is overridden by a
+	  bogus __CTOR_LIST__ set by the final link.  See PR 46.  */
        ___CTOR_LIST__ = .;
        __CTOR_LIST__ = .;
        LONG (-1);
@@ -134,7 +137,7 @@  SECTIONS
        LONG (0);
      }
     ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
-    /* ??? Why is .gcc_exc here?  */
+    ${RELOCATING+/* ??? Why is .gcc_exc here?  */}
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+PROVIDE (etext = .);}
     ${RELOCATING+PROVIDE (_etext = .);}
diff --git a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
index e6d594c2bb..950f578c7a 100644
--- a/ld/scripttempl/pep.sc
+++ b/ld/scripttempl/pep.sc
@@ -105,6 +105,7 @@  SECTIONS
           expectation that they will be overridden by the definitions
 	  here.  If we PROVIDE the symbols then they will not be
 	  overridden and global constructors will not be run.
+	  See PR 22762 for more details.
 	  
 	  This does mean that it is not possible for a user to define
 	  their own __CTOR_LIST__ and __DTOR_LIST__ symbols; if they do,
@@ -114,7 +115,9 @@  SECTIONS
 	  (The custom script can just be a copy of this script with the
 	  PROVIDE() qualifiers added).
 
-	  See PR 22762 for more details.  */
+	  In particular this means that ld -Ur does not work, because
+	  the proper __CTOR_LIST__ set by ld -Ur is overridden by a
+	  bogus __CTOR_LIST__ set by the final link.  See PR 46.  */
        ___CTOR_LIST__ = .;
        __CTOR_LIST__ = .;
        LONG (-1); LONG (-1);
@@ -135,7 +138,7 @@  SECTIONS
        LONG (0); LONG (0);
      }
     ${RELOCATING+KEEP (*(SORT_NONE(.fini)))}
-    /* ??? Why is .gcc_exc here?  */
+    ${RELOCATING+/* ??? Why is .gcc_exc here?  */}
     ${RELOCATING+ *(.gcc_exc)}
     ${RELOCATING+PROVIDE (etext = .);}
     ${RELOCATING+ KEEP (*(.gcc_except_table))}
diff --git a/ld/testsuite/ld-cdtest/cdtest.exp b/ld/testsuite/ld-cdtest/cdtest.exp
index 5d4d5fa7ff..06285386d6 100644
--- a/ld/testsuite/ld-cdtest/cdtest.exp
+++ b/ld/testsuite/ld-cdtest/cdtest.exp
@@ -92,6 +92,11 @@  if ![ld_link $CC tmpdir/cdtest {tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/c
     }
 }
 
+# PR 46
+if [is_pecoff_format] {
+    setup_xfail *-*-*
+}
+
 if ![ld_relocate $ld tmpdir/cdtest.o {-Ur tmpdir/cdtest-foo.o tmpdir/cdtest-bar.o tmpdir/cdtest-main.o}] {
     fail $test2
 } else {