62 lines
2.5 KiB
Diff
62 lines
2.5 KiB
Diff
|
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)
|