From 5b537ffc55757b05ca2d7dbd1bbe2d59d88c24a4 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 21 Nov 2019 17:22:41 +1030 Subject: [PATCH] PR46, cygwin: FAIL: cdtest with -Ur 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. --- binutils/ChangeLog | 5 +++++ binutils/testsuite/lib/binutils-common.exp | 17 ++++++++++------- ld/ChangeLog | 9 +++++++++ ld/scripttempl/i386beos.sc | 2 +- ld/scripttempl/mcorepe.sc | 2 +- ld/scripttempl/pe.sc | 7 +++++-- ld/scripttempl/pep.sc | 7 +++++-- ld/testsuite/ld-cdtest/cdtest.exp | 5 +++++ 8 files changed, 41 insertions(+), 13 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index eed7d335e11..10ab37ce3da 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2019-11-21 Alan Modra + + * testsuite/lib/binutils-common.exp (is_pecoff_format): Rewrite + with positive logic and add more target triples. + 2019-11-19 Alan Modra PR 24499 diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp index a523f4b7813..3b229babeb9 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/ChangeLog b/ld/ChangeLog index 39646cb1dc8..e4e3f740584 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2019-11-21 Alan Modra + + PR 46 + * scripttempl/pe.sc: Comment on ld -Ur fail. Wrap .gcc_exc comment. + * scripttempl/pep.sc: Likewise. + * scripttempl/i386beos.sc: Wrap .gcc_exc comment. + * scripttempl/mcorepe.sc: Likewise. + * testsuite/ld-cdtest/cdtest.exp (test2): xfail for pe. + 2019-11-12 Jim Wilson PR 25181 diff --git a/ld/scripttempl/i386beos.sc b/ld/scripttempl/i386beos.sc index f4ce42ccded..b45b83fc9ea 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 e7cf3d35445..eea70271bb5 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 865ee58d919..8b5e1a1dad7 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 e6d594c2bbe..950f578c7a6 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 5d4d5fa7ff0..06285386d63 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 { -- 2.30.2