Patchwork Fix linker scripts

login
register
mail settings
Submitter Gerd Hoffmann
Date Aug. 26, 2011, 9:16 a.m.
Message ID <1314350170-26459-1-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/111729/
State New
Headers show

Comments

Gerd Hoffmann - Aug. 26, 2011, 9:16 a.m.
Remove PROVIDE_HIDDEN and ONLY_IF_{RO,RW} from linker scripts to make
them work with older binutils versions.  Fixes *-bsd-user build on
OpenBSD 4.9 which ships binutils 2.15.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 arm.ld    |   12 ++++++------
 hppa.ld   |   18 ++++++++----------
 i386.ld   |    8 ++++----
 mips.ld   |   18 ++++++++----------
 ppc.ld    |   18 ++++++++----------
 ppc64.ld  |    6 ++----
 sparc.ld  |   12 ++++++------
 x86_64.ld |   14 ++++++--------
 8 files changed, 48 insertions(+), 58 deletions(-)
Blue Swirl - Aug. 27, 2011, 5:53 p.m.
Thanks, applied.

On Fri, Aug 26, 2011 at 9:16 AM, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Remove PROVIDE_HIDDEN and ONLY_IF_{RO,RW} from linker scripts to make
> them work with older binutils versions.  Fixes *-bsd-user build on
> OpenBSD 4.9 which ships binutils 2.15.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  arm.ld    |   12 ++++++------
>  hppa.ld   |   18 ++++++++----------
>  i386.ld   |    8 ++++----
>  mips.ld   |   18 ++++++++----------
>  ppc.ld    |   18 ++++++++----------
>  ppc64.ld  |    6 ++----
>  sparc.ld  |   12 ++++++------
>  x86_64.ld |   14 ++++++--------
>  8 files changed, 48 insertions(+), 58 deletions(-)
>
> diff --git a/arm.ld b/arm.ld
> index 12b3edb..7f13da9 100644
> --- a/arm.ld
> +++ b/arm.ld
> @@ -71,23 +71,23 @@ SECTIONS
>   .data1   : { *(.data1) }
>   .preinit_array     :
>   {
> -    PROVIDE_HIDDEN (__preinit_array_start = .);
> +    PROVIDE (__preinit_array_start = .);
>     KEEP (*(.preinit_array))
> -    PROVIDE_HIDDEN (__preinit_array_end = .);
> +    PROVIDE (__preinit_array_end = .);
>   }
>   .init_array     :
>   {
> -     PROVIDE_HIDDEN (__init_array_start = .);
> +     PROVIDE (__init_array_start = .);
>      KEEP (*(SORT(.init_array.*)))
>      KEEP (*(.init_array))
> -     PROVIDE_HIDDEN (__init_array_end = .);
> +     PROVIDE (__init_array_end = .);
>   }
>   .fini_array     :
>   {
> -    PROVIDE_HIDDEN (__fini_array_start = .);
> +    PROVIDE (__fini_array_start = .);
>     KEEP (*(.fini_array))
>     KEEP (*(SORT(.fini_array.*)))
> -    PROVIDE_HIDDEN (__fini_array_end = .);
> +    PROVIDE (__fini_array_end = .);
>   }
>   .ctors         :
>   {
> diff --git a/hppa.ld b/hppa.ld
> index 9a4b22c..3555b3e 100644
> --- a/hppa.ld
> +++ b/hppa.ld
> @@ -75,36 +75,34 @@ SECTIONS
>   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
>   .PARISC.unwind   : { *(.PARISC.unwind) }
>   .eh_frame_hdr : { *(.eh_frame_hdr) }
> -  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
>   /* Adjust the address for the data segment.  We want to adjust up to
>      the same address within the page on the next page up.  */
>   . = ALIGN(0x10000) + (. & (0x10000 - 1));
>   /* Exception handling  */
> -  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
> +  .eh_frame       : { KEEP (*(.eh_frame)) }
> +  .gcc_except_table   : { *(.gcc_except_table .gcc_except_table.*) }
>   /* Thread Local Storage sections  */
>   .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
>   .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
>   .preinit_array     :
>   {
> -    PROVIDE_HIDDEN (__preinit_array_start = .);
> +    PROVIDE (__preinit_array_start = .);
>     KEEP (*(.preinit_array))
> -    PROVIDE_HIDDEN (__preinit_array_end = .);
> +    PROVIDE (__preinit_array_end = .);
>   }
>   .init_array     :
>   {
> -     PROVIDE_HIDDEN (__init_array_start = .);
> +     PROVIDE (__init_array_start = .);
>      KEEP (*(SORT(.init_array.*)))
>      KEEP (*(.init_array))
> -     PROVIDE_HIDDEN (__init_array_end = .);
> +     PROVIDE (__init_array_end = .);
>   }
>   .fini_array     :
>   {
> -    PROVIDE_HIDDEN (__fini_array_start = .);
> +    PROVIDE (__fini_array_start = .);
>     KEEP (*(.fini_array))
>     KEEP (*(SORT(.fini_array.*)))
> -    PROVIDE_HIDDEN (__fini_array_end = .);
> +    PROVIDE (__fini_array_end = .);
>   }
>   .ctors          :
>   {
> diff --git a/i386.ld b/i386.ld
> index f8df7bf..cc3f160 100644
> --- a/i386.ld
> +++ b/i386.ld
> @@ -42,16 +42,16 @@ SECTIONS
>   .rel.plt      :
>   {
>     *(.rel.plt)
> -    PROVIDE_HIDDEN (__rel_iplt_start = .);
> +    PROVIDE (__rel_iplt_start = .);
>     *(.rel.iplt)
> -    PROVIDE_HIDDEN (__rel_iplt_end = .);
> +    PROVIDE (__rel_iplt_end = .);
>   }
>   .rela.plt       :
>   {
>     *(.rela.plt)
> -    PROVIDE_HIDDEN (__rela_iplt_start = .);
> +    PROVIDE (__rela_iplt_start = .);
>     *(.rela.iplt)
> -    PROVIDE_HIDDEN (__rela_iplt_end = .);
> +    PROVIDE (__rela_iplt_end = .);
>   }
>   .init          : { *(.init)  } =0x47ff041f
>   .text      :
> diff --git a/mips.ld b/mips.ld
> index 4294761..7b610ce 100644
> --- a/mips.ld
> +++ b/mips.ld
> @@ -79,36 +79,34 @@ SECTIONS
>   }
>   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
>   .eh_frame_hdr : { *(.eh_frame_hdr) }
> -  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
>   /* Adjust the address for the data segment.  We want to adjust up to
>      the same address within the page on the next page up.  */
>   . = ALIGN (0x40000) - ((0x40000 - .) & (0x40000 - 1)); . = DATA_SEGMENT_ALIGN (0x40000, 0x1000);
>   /* Exception handling  */
> -  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
> +  .eh_frame       : { KEEP (*(.eh_frame)) }
> +  .gcc_except_table   : { *(.gcc_except_table .gcc_except_table.*) }
>   /* Thread Local Storage sections  */
>   .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
>   .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
>   .preinit_array     :
>   {
> -    PROVIDE_HIDDEN (__preinit_array_start = .);
> +    PROVIDE (__preinit_array_start = .);
>     KEEP (*(.preinit_array))
> -    PROVIDE_HIDDEN (__preinit_array_end = .);
> +    PROVIDE (__preinit_array_end = .);
>   }
>   .init_array     :
>   {
> -     PROVIDE_HIDDEN (__init_array_start = .);
> +     PROVIDE (__init_array_start = .);
>      KEEP (*(SORT(.init_array.*)))
>      KEEP (*(.init_array))
> -     PROVIDE_HIDDEN (__init_array_end = .);
> +     PROVIDE (__init_array_end = .);
>   }
>   .fini_array     :
>   {
> -    PROVIDE_HIDDEN (__fini_array_start = .);
> +    PROVIDE (__fini_array_start = .);
>     KEEP (*(.fini_array))
>     KEEP (*(SORT(.fini_array.*)))
> -    PROVIDE_HIDDEN (__fini_array_end = .);
> +    PROVIDE (__fini_array_end = .);
>   }
>   .ctors          :
>   {
> diff --git a/ppc.ld b/ppc.ld
> index 5248ef1..69aa3f2 100644
> --- a/ppc.ld
> +++ b/ppc.ld
> @@ -79,36 +79,34 @@ SECTIONS
>   }
>   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
>   .eh_frame_hdr : { *(.eh_frame_hdr) }
> -  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
>   /* Adjust the address for the data segment.  We want to adjust up to
>      the same address within the page on the next page up.  */
>   . = ALIGN (0x10000) - ((0x10000 - .) & (0x10000 - 1)); . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
>   /* Exception handling  */
> -  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
> +  .eh_frame       : { KEEP (*(.eh_frame)) }
> +  .gcc_except_table   : { *(.gcc_except_table .gcc_except_table.*) }
>   /* Thread Local Storage sections  */
>   .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
>   .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
>   .preinit_array     :
>   {
> -    PROVIDE_HIDDEN (__preinit_array_start = .);
> +    PROVIDE (__preinit_array_start = .);
>     KEEP (*(.preinit_array))
> -    PROVIDE_HIDDEN (__preinit_array_end = .);
> +    PROVIDE (__preinit_array_end = .);
>   }
>   .init_array     :
>   {
> -     PROVIDE_HIDDEN (__init_array_start = .);
> +     PROVIDE (__init_array_start = .);
>      KEEP (*(SORT(.init_array.*)))
>      KEEP (*(.init_array))
> -     PROVIDE_HIDDEN (__init_array_end = .);
> +     PROVIDE (__init_array_end = .);
>   }
>   .fini_array     :
>   {
> -    PROVIDE_HIDDEN (__fini_array_start = .);
> +    PROVIDE (__fini_array_start = .);
>     KEEP (*(.fini_array))
>     KEEP (*(SORT(.fini_array.*)))
> -    PROVIDE_HIDDEN (__fini_array_end = .);
> +    PROVIDE (__fini_array_end = .);
>   }
>   .ctors          :
>   {
> diff --git a/ppc64.ld b/ppc64.ld
> index dea0dbd..0059ee5 100644
> --- a/ppc64.ld
> +++ b/ppc64.ld
> @@ -81,14 +81,12 @@ SECTIONS
>   .sdata2         : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
>   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
>   .eh_frame_hdr : { *(.eh_frame_hdr) }
> -  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RO { KEEP (*(.gcc_except_table))
>  *(.gcc_except_table.*) } /* Adjust the address for the data segment.  We want to
>  adjust up to +     the same address within the page on the next page up.  */
>   . = ALIGN (0x10000) - ((0x10000 - .) & (0x10000 - 1)); . = DATA_SEGMENT_ALIGN
>  (0x10000, 0x1000);   /* Exception handling  */
> -  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RW { KEEP (*(.gcc_except_table))
> +  .eh_frame       : { KEEP (*(.eh_frame)) }
> +  .gcc_except_table   : { KEEP (*(.gcc_except_table))
>  *(.gcc_except_table.*) }   /* Thread Local Storage sections  */
>   .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
>   .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
> diff --git a/sparc.ld b/sparc.ld
> index 31321be..56efe34 100644
> --- a/sparc.ld
> +++ b/sparc.ld
> @@ -67,23 +67,23 @@ SECTIONS
>   .tbss    : { *(.tbss) }
>   .preinit_array     :
>   {
> -    PROVIDE_HIDDEN (__preinit_array_start = .);
> +    PROVIDE (__preinit_array_start = .);
>     KEEP (*(.preinit_array))
> -    PROVIDE_HIDDEN (__preinit_array_end = .);
> +    PROVIDE (__preinit_array_end = .);
>   }
>   .init_array     :
>   {
> -     PROVIDE_HIDDEN (__init_array_start = .);
> +     PROVIDE (__init_array_start = .);
>      KEEP (*(SORT(.init_array.*)))
>      KEEP (*(.init_array))
> -     PROVIDE_HIDDEN (__init_array_end = .);
> +     PROVIDE (__init_array_end = .);
>   }
>   .fini_array     :
>   {
> -    PROVIDE_HIDDEN (__fini_array_start = .);
> +    PROVIDE (__fini_array_start = .);
>     KEEP (*(.fini_array))
>     KEEP (*(SORT(.fini_array.*)))
> -    PROVIDE_HIDDEN (__fini_array_end = .);
> +    PROVIDE (__fini_array_end = .);
>   }
>   .ctors         :
>   {
> diff --git a/x86_64.ld b/x86_64.ld
> index 46d8d4d..b7a9f4e 100644
> --- a/x86_64.ld
> +++ b/x86_64.ld
> @@ -38,16 +38,16 @@ SECTIONS
>   .rel.plt      :
>   {
>     *(.rel.plt)
> -    PROVIDE_HIDDEN (__rel_iplt_start = .);
> +    PROVIDE (__rel_iplt_start = .);
>     *(.rel.iplt)
> -    PROVIDE_HIDDEN (__rel_iplt_end = .);
> +    PROVIDE (__rel_iplt_end = .);
>   }
>   .rela.plt       :
>   {
>     *(.rela.plt)
> -    PROVIDE_HIDDEN (__rela_iplt_start = .);
> +    PROVIDE (__rela_iplt_start = .);
>     *(.rela.iplt)
> -    PROVIDE_HIDDEN (__rela_iplt_end = .);
> +    PROVIDE (__rela_iplt_end = .);
>   }
>   .init           :
>   {
> @@ -70,8 +70,6 @@ SECTIONS
>   .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
>   .rodata1        : { *(.rodata1) }
>   .eh_frame_hdr : { *(.eh_frame_hdr) }
> -  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table) }
>   /* Adjust the address for the data segment.  We want to adjust up to
>      the same address within the page on the next page up.  */
>   . = ALIGN (0x100000) - ((0x100000 - .) & (0x100000 - 1)); . = DATA_SEGMENT_ALIGN (0x100000, 0x1000);
> @@ -97,8 +95,8 @@ SECTIONS
>   .data1          : { *(.data1) }
>   .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
>   .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
> -  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
> -  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table) }
> +  .eh_frame       : { KEEP (*(.eh_frame)) }
> +  .gcc_except_table   : { *(.gcc_except_table) }
>   .dynamic        : { *(.dynamic) }
>   .ctors          :
>   {
> --
> 1.7.1
>
>
>

Patch

diff --git a/arm.ld b/arm.ld
index 12b3edb..7f13da9 100644
--- a/arm.ld
+++ b/arm.ld
@@ -71,23 +71,23 @@  SECTIONS
   .data1   : { *(.data1) }
   .preinit_array     :
   {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
+    PROVIDE (__preinit_array_start = .);
     KEEP (*(.preinit_array))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
+    PROVIDE (__preinit_array_end = .);
   }
   .init_array     :
   {
-     PROVIDE_HIDDEN (__init_array_start = .);
+     PROVIDE (__init_array_start = .);
      KEEP (*(SORT(.init_array.*)))
      KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
+     PROVIDE (__init_array_end = .);
   }
   .fini_array     :
   {
-    PROVIDE_HIDDEN (__fini_array_start = .);
+    PROVIDE (__fini_array_start = .);
     KEEP (*(.fini_array))
     KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
+    PROVIDE (__fini_array_end = .);
   }
   .ctors         :
   {
diff --git a/hppa.ld b/hppa.ld
index 9a4b22c..3555b3e 100644
--- a/hppa.ld
+++ b/hppa.ld
@@ -75,36 +75,34 @@  SECTIONS
   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
   .PARISC.unwind   : { *(.PARISC.unwind) }
   .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
   /* Adjust the address for the data segment.  We want to adjust up to
      the same address within the page on the next page up.  */
   . = ALIGN(0x10000) + (. & (0x10000 - 1));
   /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .eh_frame       : { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : { *(.gcc_except_table .gcc_except_table.*) }
   /* Thread Local Storage sections  */
   .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
   .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
   .preinit_array     :
   {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
+    PROVIDE (__preinit_array_start = .);
     KEEP (*(.preinit_array))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
+    PROVIDE (__preinit_array_end = .);
   }
   .init_array     :
   {
-     PROVIDE_HIDDEN (__init_array_start = .);
+     PROVIDE (__init_array_start = .);
      KEEP (*(SORT(.init_array.*)))
      KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
+     PROVIDE (__init_array_end = .);
   }
   .fini_array     :
   {
-    PROVIDE_HIDDEN (__fini_array_start = .);
+    PROVIDE (__fini_array_start = .);
     KEEP (*(.fini_array))
     KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
+    PROVIDE (__fini_array_end = .);
   }
   .ctors          :
   {
diff --git a/i386.ld b/i386.ld
index f8df7bf..cc3f160 100644
--- a/i386.ld
+++ b/i386.ld
@@ -42,16 +42,16 @@  SECTIONS
   .rel.plt      :
   {
     *(.rel.plt)
-    PROVIDE_HIDDEN (__rel_iplt_start = .);
+    PROVIDE (__rel_iplt_start = .);
     *(.rel.iplt)
-    PROVIDE_HIDDEN (__rel_iplt_end = .);
+    PROVIDE (__rel_iplt_end = .);
   }
   .rela.plt       :
   {
     *(.rela.plt)
-    PROVIDE_HIDDEN (__rela_iplt_start = .);
+    PROVIDE (__rela_iplt_start = .);
     *(.rela.iplt)
-    PROVIDE_HIDDEN (__rela_iplt_end = .);
+    PROVIDE (__rela_iplt_end = .);
   }
   .init          : { *(.init)	} =0x47ff041f
   .text      :
diff --git a/mips.ld b/mips.ld
index 4294761..7b610ce 100644
--- a/mips.ld
+++ b/mips.ld
@@ -79,36 +79,34 @@  SECTIONS
   }
   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
   .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
   /* Adjust the address for the data segment.  We want to adjust up to
      the same address within the page on the next page up.  */
   . = ALIGN (0x40000) - ((0x40000 - .) & (0x40000 - 1)); . = DATA_SEGMENT_ALIGN (0x40000, 0x1000);
   /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .eh_frame       : { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : { *(.gcc_except_table .gcc_except_table.*) }
   /* Thread Local Storage sections  */
   .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
   .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
   .preinit_array     :
   {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
+    PROVIDE (__preinit_array_start = .);
     KEEP (*(.preinit_array))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
+    PROVIDE (__preinit_array_end = .);
   }
   .init_array     :
   {
-     PROVIDE_HIDDEN (__init_array_start = .);
+     PROVIDE (__init_array_start = .);
      KEEP (*(SORT(.init_array.*)))
      KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
+     PROVIDE (__init_array_end = .);
   }
   .fini_array     :
   {
-    PROVIDE_HIDDEN (__fini_array_start = .);
+    PROVIDE (__fini_array_start = .);
     KEEP (*(.fini_array))
     KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
+    PROVIDE (__fini_array_end = .);
   }
   .ctors          :
   {
diff --git a/ppc.ld b/ppc.ld
index 5248ef1..69aa3f2 100644
--- a/ppc.ld
+++ b/ppc.ld
@@ -79,36 +79,34 @@  SECTIONS
   }
   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
   .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
   /* Adjust the address for the data segment.  We want to adjust up to
      the same address within the page on the next page up.  */
   . = ALIGN (0x10000) - ((0x10000 - .) & (0x10000 - 1)); . = DATA_SEGMENT_ALIGN (0x10000, 0x1000);
   /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .eh_frame       : { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : { *(.gcc_except_table .gcc_except_table.*) }
   /* Thread Local Storage sections  */
   .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
   .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
   .preinit_array     :
   {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
+    PROVIDE (__preinit_array_start = .);
     KEEP (*(.preinit_array))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
+    PROVIDE (__preinit_array_end = .);
   }
   .init_array     :
   {
-     PROVIDE_HIDDEN (__init_array_start = .);
+     PROVIDE (__init_array_start = .);
      KEEP (*(SORT(.init_array.*)))
      KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
+     PROVIDE (__init_array_end = .);
   }
   .fini_array     :
   {
-    PROVIDE_HIDDEN (__fini_array_start = .);
+    PROVIDE (__fini_array_start = .);
     KEEP (*(.fini_array))
     KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
+    PROVIDE (__fini_array_end = .);
   }
   .ctors          :
   {
diff --git a/ppc64.ld b/ppc64.ld
index dea0dbd..0059ee5 100644
--- a/ppc64.ld
+++ b/ppc64.ld
@@ -81,14 +81,12 @@  SECTIONS
   .sdata2         : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
   .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
   .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { KEEP (*(.gcc_except_table))
 *(.gcc_except_table.*) } /* Adjust the address for the data segment.  We want to
 adjust up to +     the same address within the page on the next page up.  */
   . = ALIGN (0x10000) - ((0x10000 - .) & (0x10000 - 1)); . = DATA_SEGMENT_ALIGN
 (0x10000, 0x1000);   /* Exception handling  */
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { KEEP (*(.gcc_except_table))
+  .eh_frame       : { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : { KEEP (*(.gcc_except_table))
 *(.gcc_except_table.*) }   /* Thread Local Storage sections  */
   .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
   .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
diff --git a/sparc.ld b/sparc.ld
index 31321be..56efe34 100644
--- a/sparc.ld
+++ b/sparc.ld
@@ -67,23 +67,23 @@  SECTIONS
   .tbss    : { *(.tbss) }
   .preinit_array     :
   {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
+    PROVIDE (__preinit_array_start = .);
     KEEP (*(.preinit_array))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
+    PROVIDE (__preinit_array_end = .);
   }
   .init_array     :
   {
-     PROVIDE_HIDDEN (__init_array_start = .);
+     PROVIDE (__init_array_start = .);
      KEEP (*(SORT(.init_array.*)))
      KEEP (*(.init_array))
-     PROVIDE_HIDDEN (__init_array_end = .);
+     PROVIDE (__init_array_end = .);
   }
   .fini_array     :
   {
-    PROVIDE_HIDDEN (__fini_array_start = .);
+    PROVIDE (__fini_array_start = .);
     KEEP (*(.fini_array))
     KEEP (*(SORT(.fini_array.*)))
-    PROVIDE_HIDDEN (__fini_array_end = .);
+    PROVIDE (__fini_array_end = .);
   }
   .ctors         :
   {
diff --git a/x86_64.ld b/x86_64.ld
index 46d8d4d..b7a9f4e 100644
--- a/x86_64.ld
+++ b/x86_64.ld
@@ -38,16 +38,16 @@  SECTIONS
   .rel.plt      :
   {
     *(.rel.plt)
-    PROVIDE_HIDDEN (__rel_iplt_start = .);
+    PROVIDE (__rel_iplt_start = .);
     *(.rel.iplt)
-    PROVIDE_HIDDEN (__rel_iplt_end = .);
+    PROVIDE (__rel_iplt_end = .);
   }
   .rela.plt       :
   {
     *(.rela.plt)
-    PROVIDE_HIDDEN (__rela_iplt_start = .);
+    PROVIDE (__rela_iplt_start = .);
     *(.rela.iplt)
-    PROVIDE_HIDDEN (__rela_iplt_end = .);
+    PROVIDE (__rela_iplt_end = .);
   }
   .init           :
   {
@@ -70,8 +70,6 @@  SECTIONS
   .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
   .rodata1        : { *(.rodata1) }
   .eh_frame_hdr : { *(.eh_frame_hdr) }
-  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table) }
   /* Adjust the address for the data segment.  We want to adjust up to
      the same address within the page on the next page up.  */
   . = ALIGN (0x100000) - ((0x100000 - .) & (0x100000 - 1)); . = DATA_SEGMENT_ALIGN (0x100000, 0x1000);
@@ -97,8 +95,8 @@  SECTIONS
   .data1          : { *(.data1) }
   .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
   .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table) }
+  .eh_frame       : { KEEP (*(.eh_frame)) }
+  .gcc_except_table   : { *(.gcc_except_table) }
   .dynamic        : { *(.dynamic) }
   .ctors          :
   {