ADAM G. LITKE - 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)