libhugetlbfs/libhugetlbfs.linkerscript.patch

62 lines
2.5 KiB
Diff
Raw Normal View History

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)