File libhugetlbfs.linkerscript.patch of Package libhugetlbfs

ADAM G. LITKE <agl@us.ibm.com> - 
Libhugetlbfs ships a set of linker scripts which can be used to enable ELF
segment remapping into huge pages.  These linker scripts 
no longer work with the version of binutils shipped with SLES11.

This has been a known problem.  Linker scripts are essentially tied to specific
versions of binutils but libhugetlbfs only ships a single 
set.  To avoid maintaining and shipping an ever-growing number of linker
scripts, a new method of linking binaries for use with huge 
pages was developed in libhugetlbfs-2.0.  Unfortunately, some customers will
likely continue to use the old method of linking 
binaries (with the shipped linker scripts) and will experience problems.  The
solution to this problem is either to fix the linker scripts 
for SLES11 by supplying a distro-specific patch, or strip out the deprecated
linker scripts so they cannot be used at all.  I would prefer 
to fix the linker scripts (if possible) to allow customers more time to switch
to the new linking method.

Fix for ppc32 BDT script

The only linker script that is known to have problems is the script used to
place text, data, and bss into huge pages on 32bit 
PowerPC.  The attached patch fixes the issue by adding the 'SPECIAL' notation
to the .plt and .got sections which is required for 
correct functioning of the dynamic linker.


---
 ldscripts/elf32ppclinux.xBDT |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/ldscripts/elf32ppclinux.xBDT
+++ b/ldscripts/elf32ppclinux.xBDT
@@ -163,8 +163,9 @@ SECTIONS
   .got1           : { *(.got1) } :hdata
   .got2           : { *(.got2) } :hdata
   .dynamic        : { *(.dynamic) } :dynamic :hdata
-  .got            :  { *(.got.plt .got) } :hdata
+  .got            : SPECIAL { *(.got) } :hdata
 /*  . = DATA_SEGMENT_RELRO_END (0, .); */
+  .plt            : SPECIAL { *(.plt) } :hdata
   .data           :
   {
     *(.data .data.* .gnu.linkonce.d.*)
@@ -172,6 +173,7 @@ SECTIONS
     SORT(CONSTRUCTORS)
   } :hdata
   .data1          : { *(.data1) } :hdata
+  .got            : SPECIAL { *(.got) } :hdata
   /* We want the small data sections together, so single-instruction offsets
      can access them all, and initialized data all before uninitialized, so
      we can shorten the on-disk segment size.  */
@@ -190,7 +192,7 @@ SECTIONS
     *(.scommon)
     PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .);
   } :hdata
-  .plt            :  { *(.plt) } :hdata
+  .plt            : SPECIAL { *(.plt) } :hdata
   .bss            :
   {
    *(.dynbss)
openSUSE Build Service is sponsored by