<pre style='margin:0'>
Mojca Miklavec (mojca) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/a4d2d4aaa4d252597f1a0b38135b4460712d5a87">https://github.com/macports/macports-ports/commit/a4d2d4aaa4d252597f1a0b38135b4460712d5a87</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new a4d2d4a  {i686|x86_64}-w64-mingw32-binutils: upstream patch
</span>a4d2d4a is described below

<span style='display:block; white-space:pre;color:#808000;'>commit a4d2d4aaa4d252597f1a0b38135b4460712d5a87
</span>Author: Phil Krylov <phil.krylov@gmail.com>
AuthorDate: Fri Mar 16 22:46:05 2018 +0300

<span style='display:block; white-space:pre;color:#404040;'>    {i686|x86_64}-w64-mingw32-binutils: upstream patch
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    * Apply upstream patch fixing static constructors in PE linker
</span><span style='display:block; white-space:pre;color:#404040;'>      https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a985e9b9deabd81e16754584f4397a638e9d3f36
</span>---
 cross/i686-w64-mingw32-binutils/Portfile           |   3 +
 .../patch-upstream-fix-pe-static-constructors.diff | 110 +++++++++++++++++++++
 cross/x86_64-w64-mingw32-binutils/Portfile         |   3 +
 .../patch-upstream-fix-pe-static-constructors.diff | 110 +++++++++++++++++++++
 4 files changed, 226 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/cross/i686-w64-mingw32-binutils/Portfile b/cross/i686-w64-mingw32-binutils/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 7f8c41d..3227b3a 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/cross/i686-w64-mingw32-binutils/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/cross/i686-w64-mingw32-binutils/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -8,9 +8,12 @@ set mingw_name      w64-mingw32
</span> set mingw_arch      i686
 set mingw_target    ${mingw_arch}-${mingw_name}
 crossbinutils.setup ${mingw_target} 2.30
<span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> 
 maintainers         {mojca @mojca} openmaintainer
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          patch-upstream-fix-pe-static-constructors.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> configure.args-append \
                     --disable-multilib \
                     --disable-werror
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/cross/i686-w64-mingw32-binutils/files/patch-upstream-fix-pe-static-constructors.diff b/cross/i686-w64-mingw32-binutils/files/patch-upstream-fix-pe-static-constructors.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..36db853
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/cross/i686-w64-mingw32-binutils/files/patch-upstream-fix-pe-static-constructors.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,110 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a985e9b9deabd81e16754584f4397a638e9d3f36
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Nick Clifton <nickc@redhat.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 5 Feb 2018 09:12:42 +0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Import patch from mainline to remove PROVODE qualifiers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ around definitions of __CTOR_LIST__ and __DTOR_LIST__ in PE linker scripts.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   PR 22762
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   * scripttempl/pe.sc: Remove PROVIDE()s from __CTOR_LIST__ and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DTOR_LIST__ symbols.  Add a comment explaining why this is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   necessary.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   * scripttemp/pep.sc: Likewise.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   * ld.texinfo (PROVIDE): Add a note about the effect of common
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   symbols.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ld/ld.texinfo.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ld/ld.texinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4001,6 +4001,12 @@ underscore), the linker will silently use the definition in the program.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ If the program references @samp{etext} but does not define it, the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ linker will use the definition in the linker script.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Note - the @code{PROVIDE} directive considers a common symbol to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++defined, even though such a symbol could be combined with the symbol
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++that the @code{PROVIDE} would create.  This is particularly important
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++when considering constructor and destructor list symbols such as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@samp{__CTOR_LIST__} as these are often defined as common symbols.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @node PROVIDE_HIDDEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @subsection PROVIDE_HIDDEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @cindex PROVIDE_HIDDEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ld/scripttempl/pe.sc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ld/scripttempl/pe.sc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -98,8 +98,22 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${RELOCATING+*(.glue_7t)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${RELOCATING+*(.glue_7)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          we do not PROVIDE them.  This is because the ctors.o startup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    code in libgcc defines them as common symbols, with the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          expectation that they will be overridden by the definitions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    here.  If we PROVIDE the symbols then they will not be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    overridden and global constructors will not be run.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This does mean that it is not possible for a user to define
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    their own __CTOR_LIST__ and __DTOR_LIST__ symbols.  If that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ability is needed a custom linker script will have to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    used.  (The custom script can just be a copy of this script
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    with the PROVIDE() qualifiers added).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    See PR 22762 for more details.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.ctors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.ctor));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -107,8 +121,10 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* See comment about __CTOR_LIST__ above.  The same reasoning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          applies here too.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.dtors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.dtor));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ld/scripttempl/pep.sc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ld/scripttempl/pep.sc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -99,8 +99,22 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${RELOCATING+*(.glue_7)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+. = ALIGN(8);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          we do not PROVIDE them.  This is because the ctors.o startup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    code in libgcc defines them as common symbols, with the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          expectation that they will be overridden by the definitions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    here.  If we PROVIDE the symbols then they will not be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    overridden and global constructors will not be run.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This does mean that it is not possible for a user to define
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    their own __CTOR_LIST__ and __DTOR_LIST__ symbols.  If that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ability is needed a custom linker script will have to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    used.  (The custom script can just be a copy of this script
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    with the PROVIDE() qualifiers added).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    See PR 22762 for more details.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1); LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.ctors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.ctor));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,8 +122,10 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (0); LONG (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* See comment about __CTOR_LIST__ above.  The same reasoning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            applies here too.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1); LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.dtors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.dtor));
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/cross/x86_64-w64-mingw32-binutils/Portfile b/cross/x86_64-w64-mingw32-binutils/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 5fbf6fb..99739bf 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/cross/x86_64-w64-mingw32-binutils/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/cross/x86_64-w64-mingw32-binutils/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -8,9 +8,12 @@ set mingw_name      w64-mingw32
</span> set mingw_arch      x86_64
 set mingw_target    ${mingw_arch}-${mingw_name}
 crossbinutils.setup ${mingw_target} 2.30
<span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> 
 maintainers         {mojca @mojca} openmaintainer
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          patch-upstream-fix-pe-static-constructors.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> configure.args-append \
                     --disable-multilib \
                     --disable-werror
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/cross/x86_64-w64-mingw32-binutils/files/patch-upstream-fix-pe-static-constructors.diff b/cross/x86_64-w64-mingw32-binutils/files/patch-upstream-fix-pe-static-constructors.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..36db853
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/cross/x86_64-w64-mingw32-binutils/files/patch-upstream-fix-pe-static-constructors.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,110 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a985e9b9deabd81e16754584f4397a638e9d3f36
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Nick Clifton <nickc@redhat.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 5 Feb 2018 09:12:42 +0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Import patch from mainline to remove PROVODE qualifiers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ around definitions of __CTOR_LIST__ and __DTOR_LIST__ in PE linker scripts.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   PR 22762
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   * scripttempl/pe.sc: Remove PROVIDE()s from __CTOR_LIST__ and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   __DTOR_LIST__ symbols.  Add a comment explaining why this is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   necessary.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   * scripttemp/pep.sc: Likewise.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   * ld.texinfo (PROVIDE): Add a note about the effect of common
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   symbols.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ld/ld.texinfo.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ld/ld.texinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4001,6 +4001,12 @@ underscore), the linker will silently use the definition in the program.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ If the program references @samp{etext} but does not define it, the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ linker will use the definition in the linker script.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Note - the @code{PROVIDE} directive considers a common symbol to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++defined, even though such a symbol could be combined with the symbol
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++that the @code{PROVIDE} would create.  This is particularly important
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++when considering constructor and destructor list symbols such as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@samp{__CTOR_LIST__} as these are often defined as common symbols.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @node PROVIDE_HIDDEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @subsection PROVIDE_HIDDEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @cindex PROVIDE_HIDDEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ld/scripttempl/pe.sc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ld/scripttempl/pe.sc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -98,8 +98,22 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${RELOCATING+*(.glue_7t)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${RELOCATING+*(.glue_7)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          we do not PROVIDE them.  This is because the ctors.o startup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    code in libgcc defines them as common symbols, with the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          expectation that they will be overridden by the definitions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    here.  If we PROVIDE the symbols then they will not be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    overridden and global constructors will not be run.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This does mean that it is not possible for a user to define
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    their own __CTOR_LIST__ and __DTOR_LIST__ symbols.  If that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ability is needed a custom linker script will have to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    used.  (The custom script can just be a copy of this script
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    with the PROVIDE() qualifiers added).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    See PR 22762 for more details.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.ctors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.ctor));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -107,8 +121,10 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* See comment about __CTOR_LIST__ above.  The same reasoning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          applies here too.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.dtors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP(*(.dtor));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- ld/scripttempl/pep.sc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ ld/scripttempl/pep.sc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -99,8 +99,22 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${RELOCATING+*(.glue_7)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+. = ALIGN(8);}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__CTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* Note: we always define __CTOR_LIST__ and ___CTOR_LIST__ here,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          we do not PROVIDE them.  This is because the ctors.o startup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    code in libgcc defines them as common symbols, with the 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          expectation that they will be overridden by the definitions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    here.  If we PROVIDE the symbols then they will not be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    overridden and global constructors will not be run.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    This does mean that it is not possible for a user to define
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    their own __CTOR_LIST__ and __DTOR_LIST__ symbols.  If that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ability is needed a custom linker script will have to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    used.  (The custom script can just be a copy of this script
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    with the PROVIDE() qualifiers added).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    See PR 22762 for more details.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __CTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1); LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.ctors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.ctor));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,8 +122,10 @@ SECTIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (0); LONG (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ${CONSTRUCTING+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(___DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-       PROVIDE(__DTOR_LIST__ = .);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       /* See comment about __CTOR_LIST__ above.  The same reasoning
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            applies here too.  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       ___DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++       __DTOR_LIST__ = .;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        LONG (-1); LONG (-1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.dtors));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        KEEP (*(.dtor));
</span></pre><pre style='margin:0'>

</pre>