debian/0000755000000000000000000000000012264153345007173 5ustar debian/docs0000644000000000000000000000002211472707747010053 0ustar NEWS README HOWTO debian/libhugetlbfs.70000644000000000000000000000363011472707747011752 0ustar .\" Hey, EMACS: -*- nroff -*- .\" This manpage is Copyright Mel Gorman .\" It is licensed under GPL. .\" .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH LIBHUGETLBFS 7 "November 17, 2007" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME libhugetlbfs \- preload library to back text, data and malloc() with huge pages .SH SYNOPSIS .B libhugetlbfs .RI [ options ] " files" ... .br .SH DESCRIPTION This manual page documents briefly the .B libhugetlbfs and .B bar pre-loaded library. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBlibhugetlbfs\fP is a pre-loaded library that can be used to back application text, data and malloc() with hugepages. This is generally of use to applications that use large amounts of address space and suffer a performance hit due to TLB misses. Wall-clock time or oprofile can be used to determine if there is a performance benefit from using libhugetlbfs or not. See /usr/share/docs/libhugetlbfs/HOWTO for futher instructions. .SH SEE ALSO .BR oprofile (1) .br .SH AUTHOR libhugetlbfs was written by Adam Litke, David Gibson, Nishanth Aravamudan, Steve Fox and various others on the libhugetlbfs-devel mailing list. .PP This manual page was written by Mel Gorman , for the Debian project (but may be used by others). debian/copyright0000644000000000000000000000401611472707747011142 0ustar This work was packaged for Debian by: Mel Gorman on Sat, 17 Nov 2007 12:46:16 +0000. and Frank Lin PIAT on Thu, 18 Mar 2010 08:29:50 +0100 It was downloaded from: http://sourceforge.net/projects/libhugetlbfs/ Upstream Authors: Eric B Munson Adam Litke David Gibson Nishanth Aravamudan Steve Fox Various others Copyright: Copyright (C) 2005-2006 Adam Litke, IBM Corporation. Copyright (C) 2008,2009 Eric B Munson Copyright (C) 2005-2007 David Gibson, IBM Corporation. Copyright (C) 2006 Andy Whitcroft, IBM Corporation Copyright (C) 2006 Hugh Dickins Copyright (C) 2006 Nishanth Aravamudan, IBM Corporation Copyright (C) 1991, 1999 Free Software Foundation, Inc. License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 2.1. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-2.1". The Debian packaging is: Copyright (C) 2007, Mel Gorman and Copyright (C) 2010 Frank Lin PIAT and is licensed under the LGPL version 2.1, see "/usr/share/common-licenses/LGPL-2.1". except debian/copyright, debian/watch and libhugetlbfs.7 which are licensed under the GPL v2, see `/usr/share/common-licenses/GPL-2'. debian/hugepages.install0000644000000000000000000000047611472707747012555 0ustar usr/bin/cpupcstat usr/bin/hugeedit usr/bin/hugeadm usr/bin/hugectl usr/bin/pagesize # usr/bin/huge_page_setup_helper usr/share/man/man8/cpupcstat.8.gz usr/share/man/man8/hugeedit.8.gz usr/share/man/man8/hugectl.8.gz usr/share/man/man8/hugeadm.8.gz usr/share/man/man1/pagesize.1.gz etc/security/limits.d/hugepages.conf debian/libhugetlbfs-tests.install0000644000000000000000000000020511472707747014405 0ustar usr/share/libhugetlbfs/tests/run_tests.py usr/lib/libhugetlbfs/tests/ usr/share/libhugetlbfs/tests/obj* usr/lib/libhugetlbfs/tests/ debian/libhugetlbfs0.shlibs0000644000000000000000000000010511472714375013135 0ustar libhugetlbfs 0 libhugetlbfs0 libhugetlbfs_privutils 0 libhugetlbfs0 debian/libhugetlbfs0.dirs0000644000000000000000000000001011472707747012612 0ustar usr/lib debian/libhugetlbfs-tests.dirs0000644000000000000000000000010311472707747013675 0ustar usr/lib/libhugetlbfs/tests/obj32 usr/lib/libhugetlbfs/tests/obj64 debian/changelog0000644000000000000000000000226012264153212011036 0ustar libhugetlbfs (2.17-0ubuntu2) trusty; urgency=medium * Fix build on powerpc. -- Matthias Klose Sat, 11 Jan 2014 06:28:18 +0100 libhugetlbfs (2.17-0ubuntu1) trusty; urgency=medium * New upstream version. * Build for ppc64el. * Fix installation of 64bit tests. -- Matthias Klose Sat, 11 Jan 2014 03:28:11 +0100 libhugetlbfs (2.11-0ubuntu1) natty; urgency=low * libhugetlbfs 2.11 release. * Package linker scripts in the -dev package. -- Matthias Klose Tue, 22 Feb 2011 23:52:56 +0100 libhugetlbfs (2.10-0ubuntu1) natty; urgency=low * libhugetlbfs 2.10 release. * Rename libhugetlbfs package to libhugetlbfs0. * Change the soname to .0, but keep the .so files in the library package. * Link libraries with -ldl. -- Matthias Klose Tue, 23 Nov 2010 11:01:00 +0100 libhugetlbfs (2.7-1) unstable; urgency=low * Initial release (Closes: #533708) * Thanks to Mel Gorman, David Brown, The Fedora and The Gentoo Projects for their previous work on packaging libhugetlbfs, which greatly helped doing this package. -- Frank Lin PIAT Thu, 18 Mar 2010 08:29:50 +0100 debian/TODO0000644000000000000000000000166311472707747007704 0ustar Debian package TODO list ======================== * Discuss mountpoint location (/var/lib/hugetlbfs*), see #572733 - support for mounting other kernel filesystems * Discuss group GID: Fixed GID allow relying on sysctl's vm.hugetlb_shm_group=GID. A dynamic allocated GID required to populate vm.hugetlb_shm_group a script with getent group hugepages | cut -d ":" -f 3 > /proc/sys/vm... * Provide a file /etc/sysctl.d/foo with reasonable defaults. * What about mounting hugepage on start-up (different pages size? different permission / limits?? or just stick to locally managed /fstab) * Test the test-scripts (!) * Test oprofile * Adopt Patch Tagging Guidelines http://dep.debian.net/deps/dep3 * Adopt Machine-parseable debian/copyright http://dep.debian.net/deps/dep5 Report upstream: ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ * Manpages sections (all binaries are in /usr/bin) * forward appropriate patchs debian/hugepages.links0000644000000000000000000000021311472707747012214 0ustar /usr/share/doc/libhugetlbfs/HOWTO.gz /usr/share/doc/hugepages/HOWTO.gz /usr/share/doc/libhugetlbfs/README /usr/share/doc/hugepages/README debian/libhugetlbfs0.install0000644000000000000000000000007111531106071013301 0ustar usr/lib*/lib*.so.* usr/lib*/lib*.so usr/share/man/man7/* debian/compat0000644000000000000000000000000211472707747010404 0ustar 7 debian/patches/0000755000000000000000000000000012264153316010620 5ustar debian/patches/soname.diff0000644000000000000000000000555212264117672012750 0ustar Index: b/Makefile =================================================================== --- a/Makefile +++ b/Makefile @@ -35,6 +35,9 @@ ARCH = $(shell uname -m | sed -e s/i.86/i386/) CC = gcc +LDLIBS = -ldl +SOVERSION = 0 + CUSTOM_LDSCRIPTS = yes ifeq ($(ARCH),ppc64le) @@ -305,11 +308,13 @@ obj32/libhugetlbfs.so: $(LIBOBJS32) @$(VECHO) LD32 "(shared)" $@ - $(CC32) $(LDFLAGS) -Wl,--version-script=version.lds -Wl,-soname,$(notdir $@) -shared -o $@ $^ $(LDLIBS) + $(CC32) $(LDFLAGS) -Wl,--version-script=version.lds -Wl,-soname,$(notdir $@).$(SOVERSION) -shared -o $@.$(SOVERSION) $^ $(LDLIBS) + ln -sf $(notdir $@).$(SOVERSION) $@ obj64/libhugetlbfs.so: $(LIBOBJS64) @$(VECHO) LD64 "(shared)" $@ - $(CC64) $(LDFLAGS) -Wl,--version-script=version.lds -Wl,-soname,$(notdir $@) -shared -o $@ $^ $(LDLIBS) + $(CC64) $(LDFLAGS) -Wl,--version-script=version.lds -Wl,-soname,$(notdir $@).$(SOVERSION) -shared -o $@.$(SOVERSION) $^ $(LDLIBS) + ln -sf $(notdir $@).$(SOVERSION) $@ #obj32/libhugetlbfs_privutils.a: $(LIBPUOBJS:%=obj32/%) # @$(VECHO) AR32 $@ @@ -325,11 +330,13 @@ obj32/libhugetlbfs_privutils.so: $(LIBPUOBJS:%=obj32/%) @$(VECHO) LD32 "(shared)" $@ - $(CC32) $(LDFLAGS) -Wl,--version-script=privutils.lds -Wl,-soname,$(notdir $@) -shared -o $@ $^ $(LDLIBS) + $(CC32) $(LDFLAGS) -Wl,--version-script=privutils.lds -Wl,-soname,$(notdir $@).$(SOVERSION) -shared -o $@.$(SOVERSION) $^ $(LDLIBS) + ln -sf $(notdir $@).$(SOVERSION) $@ obj64/libhugetlbfs_privutils.so: $(LIBPUOBJS:%=obj64/%) @$(VECHO) LD64 "(shared)" $@ - $(CC64) $(LDFLAGS) -Wl,--version-script=privutils.lds -Wl,-soname,$(notdir $@) -shared -o $@ $^ $(LDLIBS) + $(CC64) $(LDFLAGS) -Wl,--version-script=privutils.lds -Wl,-soname,$(notdir $@).$(SOVERSION) -shared -o $@.$(SOVERSION) $^ $(LDLIBS) + ln -sf $(notdir $@).$(SOVERSION) $@ obj32/%.i: %.c @$(VECHO) CPP $@ @@ -396,12 +403,26 @@ obj32/install: @$(VECHO) INSTALL-LIB32 $(LIBDIR32) $(INSTALL) -d $(DESTDIR)$(LIBDIR32) - $(INSTALL) $(INSTALL_OBJ_LIBS:%=obj32/%) $(DESTDIR)$(LIBDIR32) +# $(INSTALL) $(INSTALL_OBJ_LIBS:%=obj32/%) $(DESTDIR)$(LIBDIR32) + for x in $(INSTALL_OBJ_LIBS); do \ + $(INSTALL) obj32/$$x $(DESTDIR)$(LIBDIR32)/; \ + if [ -f obj32/$$x.$(SOVERSION) ]; then \ + $(INSTALL) obj32/$$x.$(SOVERSION) $(DESTDIR)$(LIBDIR32)/; \ + ln -sf $$x.$(SOVERSION) $(DESTDIR)$(LIBDIR32)/$$x; \ + fi; \ + done obj64/install: @$(VECHO) INSTALL-LIB64 $(LIBDIR64) $(INSTALL) -d $(DESTDIR)$(LIBDIR64) - $(INSTALL) $(INSTALL_OBJ_LIBS:%=obj64/%) $(DESTDIR)$(LIBDIR64) +# $(INSTALL) $(INSTALL_OBJ_LIBS:%=obj64/%) $(DESTDIR)$(LIBDIR64) + for x in $(INSTALL_OBJ_LIBS); do \ + $(INSTALL) obj64/$$x $(DESTDIR)$(LIBDIR64)/; \ + if [ -f obj64/$$x.$(SOVERSION) ]; then \ + $(INSTALL) obj64/$$x.$(SOVERSION) $(DESTDIR)$(LIBDIR64)/; \ + ln -sf $$x.$(SOVERSION) $(DESTDIR)$(LIBDIR64)/$$x; \ + fi; \ + done objscript.%: % @$(VECHO) OBJSCRIPT $* debian/patches/fix-hugeedit-manpage-section0000644000000000000000000000116311472707747016213 0ustar Should be reported upstream Index: libhugetlbfs/man/hugeedit.8 =================================================================== --- libhugetlbfs.orig/man/hugeedit.8 2010-03-19 23:19:45.000000000 +0100 +++ libhugetlbfs/man/hugeedit.8 2010-03-19 23:24:08.000000000 +0100 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH HUGEEDIT 7 "October 8, 2008" +.TH HUGEEDIT 8 "October 8, 2008" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: debian/patches/fix-path-in-run_tests0000644000000000000000000000276511472711771014732 0ustar Test scripts are meant to be run, as root, from the build tree. Should be reported usptream. Index: git/tests/run_tests.py =================================================================== --- git.orig/tests/run_tests.py 2010-03-21 22:39:04.000000000 +0100 +++ git/tests/run_tests.py 2010-03-21 23:24:36.000000000 +0100 @@ -63,10 +63,10 @@ local_env = os.environ.copy() local_env.update(env) - local_env["PATH"] = "./obj%d:../obj%d:%s" \ - % (bits, bits, local_env.get("PATH", "")) - local_env["LD_LIBRARY_PATH"] = "../obj%d:obj%d:%s" \ - % (bits, bits, local_env.get("LD_LIBRARY_PATH", "")) + local_env["PATH"] = "/usr/lib/libhugetlbfs/tests/obj%d:%s" \ + % (bits, local_env.get("PATH", "")) + local_env["LD_LIBRARY_PATH"] = "/usr/lib/libhugetlbfs/tests/obj%d:%s" \ + % (bits, local_env.get("LD_LIBRARY_PATH", "")) local_env["HUGETLB_DEFAULT_PAGE_SIZE"] = repr(pagesize) try: @@ -234,7 +234,7 @@ """ sizes = set() out = "" - (rc, out) = bash("../obj/hugeadm --page-sizes") + (rc, out) = bash("hugeadm --page-sizes") if rc != 0 or out == "": return sizes for size in out.split("\n"): sizes.add(int(size)) @@ -289,7 +289,7 @@ okbits = set() for bits in wordsizes: - script = open('obj%d/dummy.ldscript' % bits, 'r').read() + script = open('/usr/lib/libhugetlbfs/tests/obj%d/dummy.ldscript' % bits, 'r').read() if script.count('SPECIAL') == 0: okbits.add(bits) return okbits debian/patches/ppc64el.diff0000644000000000000000000012741712264120425012736 0ustar Description: el64lpcc32 bit support Author: Thierry Fauck --- Index: b/Makefile =================================================================== --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ INSTALL_MAN7 = libhugetlbfs.7 INSTALL_MAN8 = hugectl.8 hugeedit.8 hugeadm.8 cpupcstat.8 LDSCRIPT_TYPES = B BDT -LDSCRIPT_DIST_ELF = elf32ppclinux elf64ppc elf_i386 elf_x86_64 +LDSCRIPT_DIST_ELF = elf32ppclinux elf64ppc elf32lppclinux elf64lppc elf_i386 elf_x86_64 INSTALL_OBJSCRIPT = ld.hugetlbfs VERSION=version.h SOURCE = $(shell find . -maxdepth 1 ! -name version.h -a -name '*.[h]') @@ -37,6 +37,11 @@ CUSTOM_LDSCRIPTS = yes +ifeq ($(ARCH),ppc64le) +CC64 = gcc -m64 +ELF64 = elf64lppc +TMPLIB64 = lib64 +else ifeq ($(ARCH),powerpc64) CC64 = $(CC) -m64 ELF64 = elf64ppc @@ -108,6 +113,7 @@ endif endif endif +endif ifdef CC32 OBJDIRS += obj32 @@ -128,6 +134,12 @@ ifdef ELF64 LIBOBJS64 = obj64/elflink.o obj64/sys-$(ELF64).o endif +ifeq ($(ELF32),elf32lppclinux) +LIBOBJS32 += obj32/$(ELF32).o +endif +ifeq ($(ELF64),elfl64ppc) +LIBOBJS64 += obj64/$(ELF64).o +endif ifeq ($(ELF32),elf32ppclinux) LIBOBJS32 += obj32/$(ELF32).o endif Index: b/contrib/tlbmiss_cost.sh =================================================================== --- a/contrib/tlbmiss_cost.sh +++ b/contrib/tlbmiss_cost.sh @@ -44,7 +44,7 @@ FNAME="cpu MHz" FINDEX=4 case "`uname -m`" in - ppc64) + ppc64|ppc64le) FNAME="clock" FINDEX=3 ;; Index: b/ldscripts/elf64lppc.xB =================================================================== --- /dev/null +++ b/ldscripts/elf64lppc.xB @@ -0,0 +1,245 @@ +/* Linker script for normal executables with BSS in hugepages */ +OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", + "elf64-powerpcle") +OUTPUT_ARCH(powerpc:common64) +ENTRY(_start) +SEARCH_DIR("/usr/powerpc64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/powerpc64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); +INPUT(-lhugetlbfs); +PHDRS +{ + headers PT_PHDR PHDRS ; + interp PT_INTERP ; + text PT_LOAD FILEHDR PHDRS ; + data PT_LOAD ; + htlb PT_LOAD FLAGS (0x00100007); + dynamic PT_DYNAMIC ; + note PT_NOTE ; + /* this is the value of PT_GNU_EH_FRAME as defined in + usr/include/elf.h but binutils does not recognize that identifier + as it does other PT_ constants. */ + eh_frame_hdr 1685382480 FLAGS (0x00000004); +} +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + __executable_start = 0x10000000; . = 0x10000000 + SIZEOF_HEADERS; + .interp : { *(.interp) } :text :interp + .note.SuSE : { *(.note.SuSE) } :text :note + .note.ABI-tag : { *(.note.ABI-tag) } :text :note + .note.gnu.build-id : { *(.note.gnu.build-id) } :text :note + .hash : { *(.hash) } :text + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .gnu.version : { *(.gnu.version) } + .gnu.version_d : { *(.gnu.version_d) } + .gnu.version_r : { *(.gnu.version_r) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rela.toc : { *(.rela.toc) } + .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } + .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } + .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } + .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } + .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } + .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } + .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } + .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .rela.tocbss : { *(.rela.tocbss) } + .init : + { + KEEP (*(.init)) + } =0x60000000 + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.sfpr .glink) + } =0x60000000 + .fini : + { + KEEP (*(.fini)) + } =0x60000000 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } + .rodata1 : { *(.rodata1) } + .sdata2 : + { + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + } + .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } + .eh_frame_hdr : { *(.eh_frame_hdr) } :text :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)) } :data + .gcc_except_table : /*ONLY_IF_RW*/ { *(.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 = .); + KEEP (*(.preinit_array)) + PROVIDE /*_HIDDEN*/ (__preinit_array_end = .); + } + .init_array : + { + PROVIDE /*_HIDDEN*/ (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE /*_HIDDEN*/ (__init_array_end = .); + } + .fini_array : + { + PROVIDE /*_HIDDEN*/ (__fini_array_start = .); + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE /*_HIDDEN*/ (__fini_array_end = .); + } + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } + .jcr : { KEEP (*(.jcr)) } + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } + .dynamic : { *(.dynamic) } :dynamic :data +/* . = DATA_SEGMENT_RELRO_END (0, .);*/ + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } + .data1 : { *(.data1) } + .toc1 ALIGN(8) : { *(.toc1) } + .opd ALIGN(8) : { KEEP (*(.opd)) } + .got ALIGN(8) : { *(.got .toc) } + /* 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. */ + .sdata : + { + *(.sdata .sdata.* .gnu.linkonce.s.*) + } + _edata = .; PROVIDE (edata = .); + .plt : { *(.plt) } + . = ALIGN(64 / 8); + . = ALIGN(64 / 8); + . = DATA_SEGMENT_END (.); + /* Hugepage area: + * Saving hugepages is more important than saving executable size, so + * we don't attempt to maintain congruence here. + * In order to map hugepages into the address space, we must advance the + * location counter to a segment boundary. If the address is < 4G, the + * next segment will be on a 256M boundary. For higher areas, we have a + * 1TB granularity. */ + . = (. < 0x100000000) ? ALIGN(0x10000000) : ALIGN(0x10000000000); + /* HACK: workaround fact that kernel may not cope with segments with zero + * filesize */ + .hugetlb.data : { LONG(1) } :htlb + __bss_start = .; + .tocbss ALIGN(8) : { *(.tocbss)} :htlb + .sbss : + { + + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + } + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + } + _end = .; + PROVIDE (end = .); + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /DISCARD/ : { *(.note.GNU-stack) } +} Index: b/ldscripts/elf64lppc.xBDT =================================================================== --- /dev/null +++ b/ldscripts/elf64lppc.xBDT @@ -0,0 +1,241 @@ +/* Linker script for normal executables with text, data and BSS in hugepages */ +OUTPUT_FORMAT("elf64-powerpcle", "elf64-powerpcle", + "elf64-powerpcle") +OUTPUT_ARCH(powerpc:common64) +ENTRY(_start) +SEARCH_DIR("/usr/powerpc64-linux-gnu/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/powerpc64-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); +INPUT( -lhugetlbfs ); +PHDRS +{ + headers PT_PHDR PHDRS ; + interp PT_INTERP ; + htext PT_LOAD FILEHDR PHDRS FLAGS (0x00100005); + hdata PT_LOAD FLAGS (0x00100007); + dynamic PT_DYNAMIC ; + note PT_NOTE ; + /* this is the value of PT_GNU_EH_FRAME as defined in + usr/include/elf.h but binutils does not recognize that identifier + as it does other PT_ constants. */ + eh_frame_hdr 1685382480 FLAGS (0x00000004); +} +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + __executable_start = 0x10000000; . = 0x10000000 + SIZEOF_HEADERS; + .interp : { *(.interp) } :interp :htext + .note.SuSE : { *(.note.SuSE) } :htext :note + .note.ABI-tag : { *(.note.ABI-tag) } :htext :note + .note.gnu.build-id : { *(.note.gnu.build-id) } :htext :note + .hash : { *(.hash) } :htext + .dynsym : { *(.dynsym) } :htext + .dynstr : { *(.dynstr) } :htext + .gnu.version : { *(.gnu.version) } :htext + .gnu.version_d : { *(.gnu.version_d) } :htext + .gnu.version_r : { *(.gnu.version_r) } :htext + .rel.init : { *(.rel.init) } :htext + .rela.init : { *(.rela.init) } :htext + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } :htext + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } :htext + .rel.fini : { *(.rel.fini) } :htext + .rela.fini : { *(.rela.fini) } :htext + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } :htext + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } :htext + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } :htext + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } :htext + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } :htext + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } :htext + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } :htext + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } :htext + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } :htext + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } :htext + .rel.ctors : { *(.rel.ctors) } :htext + .rela.ctors : { *(.rela.ctors) } :htext + .rel.dtors : { *(.rel.dtors) } :htext + .rela.dtors : { *(.rela.dtors) } :htext + .rel.got : { *(.rel.got) } :htext + .rela.got : { *(.rela.got) } :htext + .rela.toc : { *(.rela.toc) } :htext + .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } :htext + .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } :htext + .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } :htext + .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } :htext + .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } :htext + .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } :htext + .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } :htext + .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } :htext + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } :htext + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } :htext + .rel.plt : { *(.rel.plt) } :htext + .rela.plt : { *(.rela.plt) } :htext + .rela.tocbss : { *(.rela.tocbss) } :htext + .init : + { + KEEP (*(.init)) + } :htext =0x60000000 + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.sfpr .glink) + } :htext =0x60000000 + .fini : + { + KEEP (*(.fini)) + } :htext =0x60000000 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } :htext + .rodata1 : { *(.rodata1) } :htext + .sdata2 : + { + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + } :htext + .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } :htext + .eh_frame_hdr : { *(.eh_frame_hdr) } :htext :eh_frame_hdr +/* .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } :htext */ +/* .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } :htext */ + + /* We don't maintain address congruence here, because saving + * hugepages is more important than saving executable size. */ + . = ALIGN (. + 0x1000000, 0x1000000); /* Align to next 16MB hugepage */ + /* Exception handling */ + .eh_frame : /*ONLY_IF_RW*/ { KEEP (*(.eh_frame)) } :hdata + .gcc_except_table : /*ONLY_IF_RW*/ { *(.gcc_except_table .gcc_except_table.*) } :hdata + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } :hdata + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } :hdata + .preinit_array : + { + PROVIDE /*_HIDDEN*/ (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE /*_HIDDEN*/ (__preinit_array_end = .); + } :hdata + .init_array : + { + PROVIDE /*_HIDDEN*/ (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE /*_HIDDEN*/ (__init_array_end = .); + } :hdata + .fini_array : + { + PROVIDE /*_HIDDEN*/ (__fini_array_start = .); + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE /*_HIDDEN*/ (__fini_array_end = .); + } :hdata + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } :hdata + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } :hdata + .jcr : { KEEP (*(.jcr)) } :hdata + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } :hdata + .dynamic : { *(.dynamic) } :dynamic :hdata +/* . = DATA_SEGMENT_RELRO_END (0, .);*/ + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } :hdata + .data1 : { *(.data1)} :hdata + .toc1 ALIGN(8) : { *(.toc1) } :hdata + .opd ALIGN(8) : { KEEP (*(.opd)) } :hdata + .got ALIGN(8) : { *(.got .toc) } :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. */ + .sdata : + { + *(.sdata .sdata.* .gnu.linkonce.s.*) + } :hdata + _edata = .; PROVIDE (edata = .); + __bss_start = .; + .tocbss ALIGN(8) : { *(.tocbss)} :hdata + .sbss : + { + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + } :hdata + .plt : { *(.plt) } :hdata + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* + * Align here to ensure that the .bss section occupies space up to + * _end. Additionally (for huge pages) align to a segment boundary. + * This ensures that no normal page mappings will be created in this + * segment (after the bss) which could interfere with remapping. + * + * XXX: This ALIGN will need to be extended to handle the case where + * ends above 1T -- in which case the alignment should be 1T. + */ + . = ALIGN(256*1024*1024); + } :hdata + _end = .; + PROVIDE (end = .); +/*. = DATA_SEGMENT_END (.);*/ + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /DISCARD/ : { *(.note.GNU-stack) } +} Index: b/sys-elf64lppc.S =================================================================== --- /dev/null +++ b/sys-elf64lppc.S @@ -0,0 +1,51 @@ +/* + * libhugetlbfs - Easy use of Linux hugepages + * Copyright (C) 2007 David Gibson, IBM Corporation. + * + * Based on code from the GNU C Library, Copyright Free Software Foundation, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + .text + .align 2 + .globl direct_syscall + .globl .direct_syscall +#if _CALL_ELF == 2 +direct_syscall: + addis %r2,%r12,.TOC.-direct_syscall@ha + addi %r2,%r2,.TOC.-direct_syscall@l + .localentry direct_syscall,.-direct_syscall +#else + .section ".opd","aw" +direct_syscall: + .quad .direct_syscall + .quad .TOC.@tocbase + .quad 0 + .previous + .type .direct_syscall,@function +.direct_syscall: + .glob direct syscall + .type direct syscall,@function +#endif + mr 0,3 + mr 3,4 + mr 4,5 + mr 5,6 + mr 6,7 + mr 7,8 + mr 8,9 + sc + blr Index: b/sys-elf64ppc.S =================================================================== --- a/sys-elf64ppc.S +++ b/sys-elf64ppc.S @@ -20,10 +20,15 @@ */ .text - .align 2 .globl direct_syscall .globl .direct_syscall +#if _CALL_ELF == 2 +direct_syscall: + addis %r2,%r12,.TOC.-direct_syscall@ha + addi %r2,%r2,.TOC.-direct_syscall@l + .localentry direct_syscall,.-direct_syscall +#else .section ".opd","aw" direct_syscall: .quad .direct_syscall @@ -32,6 +37,9 @@ .previous .type .direct_syscall,@function .direct_syscall: + .glob direct syscall + .type direct syscall,@function +#endif mr 0,3 mr 3,4 mr 4,5 Index: b/ldscripts/elf32lppclinux.xB =================================================================== --- /dev/null +++ b/ldscripts/elf32lppclinux.xB @@ -0,0 +1,254 @@ +/* Link script for normal executables with BSS in hugepages */ +OUTPUT_FORMAT("elf32-powerpcle", "elf32-powerpcle", + "elf32-powerpcle") +OUTPUT_ARCH(powerpc:common) +ENTRY(_start) +SEARCH_DIR("/usr/powerpc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); +INPUT(-lhugetlbfs); +PHDRS +{ + headers PT_PHDR PHDRS ; + interp PT_INTERP ; + text PT_LOAD FILEHDR PHDRS ; + data PT_LOAD ; + htlb PT_LOAD FLAGS (0x00100007); + dynamic PT_DYNAMIC ; + note PT_NOTE ; + gnu_stack PT_GNU_STACK ; + /* this is the value of PT_GNU_EH_FRAME as defined in + usr/include/elf.h but binutils does not recognize that identifier + as it does other PT_ constants. */ + eh_frame_hdr 1685382480 FLAGS (0x00000004); +} +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + __executable_start = 0x10000000; . = 0x10000000 + SIZEOF_HEADERS; + .interp : { *(.interp) } :text :interp + .note.SuSE : { *(.note.SuSE) } :text :note + .note.ABI-tag : { *(.note.ABI-tag) } :text :note + .note.gnu.build-id : { *(.note.gnu.build-id) } :text :note + .hash : { *(.hash) } :text + .dynsym : { *(.dynsym) } :text + .dynstr : { *(.dynstr) } :text + .gnu.version : { *(.gnu.version) } :text + .gnu.version_d : { *(.gnu.version_d) } :text + .gnu.version_r : { *(.gnu.version_r) } :text + .rel.init : { *(.rel.init) } :text + .rela.init : { *(.rela.init) } :text + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } :text + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } :text + .rel.fini : { *(.rel.fini) } :text + .rela.fini : { *(.rela.fini) } :text + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } :text + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } :text + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } :text + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } :text + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } :text + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } :text + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } :text + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } :text + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } :text + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } :text + .rel.ctors : { *(.rel.ctors) } :text + .rela.ctors : { *(.rela.ctors) } :text + .rel.dtors : { *(.rel.dtors) } :text + .rela.dtors : { *(.rela.dtors) } :text + .rel.got : { *(.rel.got) } :text + .rela.got : { *(.rela.got) } :text + .rela.got1 : { *(.rela.got1) } :text + .rela.got2 : { *(.rela.got2) } :text + .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } :text + .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } :text + .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } :text + .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } :text + .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } :text + .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } :text + .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } :text + .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } :text + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } :text + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } :text + .rel.plt : { *(.rel.plt) } :text + .rela.plt : { *(.rela.plt) } :text + .init : + { + KEEP (*(.init)) + } :text =0 + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.glink) + } :text =0 + .fini : + { + KEEP (*(.fini)) + } :text =0 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } :text + .rodata1 : { *(.rodata1) } :text + .sdata2 : + { + PROVIDE (_SDA2_BASE_ = 32768); + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + } :text + .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } :text + .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr +/* .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } :text */ +/* .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } :text */ + /* 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)) } :data + .gcc_except_table : /*ONLY_IF_RW*/ { *(.gcc_except_table .gcc_except_table.*) } :data + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } :data + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } :data + .preinit_array : + { + PROVIDE /*_HIDDEN*/ (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE /*_HIDDEN*/ (__preinit_array_end = .); + } :data + .init_array : + { + PROVIDE /*_HIDDEN*/ (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE /*_HIDDEN*/ (__init_array_end = .); + } :data + .fini_array : + { + PROVIDE /*_HIDDEN*/ (__fini_array_start = .); + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE /*_HIDDEN*/ (__fini_array_end = .); + } :data + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } :data + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } :data + .jcr : { KEEP (*(.jcr)) } :data + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } :data + .got1 : { *(.got1) } :data + .got2 : { *(.got2) } :data + .dynamic : { *(.dynamic) } :dynamic :data +/* .got : SPECIAL { *(.got) } :data*/ +/* . = DATA_SEGMENT_RELRO_END (0, .);*/ +/* .plt : SPECIAL { *(.plt) } :data*/ + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } :data + .data1 : { *(.data1) } :data + .got : /*SPECIAL*/ { *(.got) } :data + /* 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. */ + .sdata : + { + PROVIDE (_SDA_BASE_ = 32768); + *(.sdata .sdata.* .gnu.linkonce.s.*) + } :data + _edata = .; PROVIDE (edata = .); + .plt : /*SPECIAL*/ { *(.plt) } :data + . = ALIGN(32 / 8); + . = ALIGN(32 / 8); + . = DATA_SEGMENT_END (.); + /* Hugepage area */ + /* Saving hugepages is more important than saving executable size, so + * we don't attempt to maintain congruence here */ + . = ALIGN(0x10000000); /* Align to next 256MB segment */ + /* HACK: workaround fact that kernel may not cope with segments with zero + * filesize */ + .hugetlb.data : { LONG(1) } :htlb + __bss_start = .; + .sbss : + { + PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .); + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .); + } :htlb + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* + * Align here to ensure that the .bss section occupies space up to + * _end. Additionally (for huge pages) align to a segment boundary. + * This ensures that no normal page mappings will be created in this + * segment (after the bss) which could interfere with remapping. + */ + . = ALIGN(256*1024*1024); + } :htlb + _end = .; + PROVIDE (end = .); + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /DISCARD/ : { *(.fixup) } + /DISCARD/ : { *(.note.GNU-stack) } +} Index: b/ldscripts/elf32lppclinux.xBDT =================================================================== --- /dev/null +++ b/ldscripts/elf32lppclinux.xBDT @@ -0,0 +1,245 @@ +/* Linker script for normal executables with text data and BSS in hugepages */ +OUTPUT_FORMAT("elf32-powerpcle", "elf32-powerpcle", + "elf32-powerpcle") +OUTPUT_ARCH(powerpc:common) +ENTRY(_start) +SEARCH_DIR("/usr/powerpc-linux-gnu/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); +INPUT(-lhugetlbfs); +PHDRS +{ + headers PT_PHDR PHDRS ; + interp PT_INTERP ; + htext PT_LOAD FILEHDR PHDRS FLAGS (0x00100005); + hdata PT_LOAD FLAGS (0x00100007); + dynamic PT_DYNAMIC ; + note PT_NOTE ; + gnu_stack PT_GNU_STACK ; + /* this is the value of PT_GNU_EH_FRAME as defined in + usr/include/elf.h but binutils does not recognize that identifier + as it does other PT_ constants. */ + eh_frame_hdr 1685382480 FLAGS (0x00000004); +} +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + __executable_start = 0x10000000; . = 0x10000000 + SIZEOF_HEADERS; + .interp : { *(.interp) } :htext :interp + .note.SuSE : { *(.note.SuSE) } :htext :note + .note.ABI-tag : { *(.note.ABI-tag) } :htext :note + .note.gnu.build-id : { *(.note.gnu.build-id) } :htext :note + .hash : { *(.hash) } :htext + .dynsym : { *(.dynsym) } :htext + .dynstr : { *(.dynstr) } :htext + .gnu.version : { *(.gnu.version) } :htext + .gnu.version_d : { *(.gnu.version_d) } :htext + .gnu.version_r : { *(.gnu.version_r) } :htext + .rel.init : { *(.rel.init) } :htext + .rela.init : { *(.rela.init) } :htext + .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } :htext + .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } :htext + .rel.fini : { *(.rel.fini) } :htext + .rela.fini : { *(.rela.fini) } :htext + .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } :htext + .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } :htext + .rel.data.rel.ro : { *(.rel.data.rel.ro*) } :htext + .rela.data.rel.ro : { *(.rel.data.rel.ro*) } :htext + .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } :htext + .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } :htext + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } :htext + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } :htext + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } :htext + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } :htext + .rel.ctors : { *(.rel.ctors) } :htext + .rela.ctors : { *(.rela.ctors) } :htext + .rel.dtors : { *(.rel.dtors) } :htext + .rela.dtors : { *(.rela.dtors) } :htext + .rel.got : { *(.rel.got) } :htext + .rela.got : { *(.rela.got) } :htext + .rela.got1 : { *(.rela.got1) } :htext + .rela.got2 : { *(.rela.got2) } :htext + .rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) } :htext + .rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) } :htext + .rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) } :htext + .rela.sbss : { *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*) } :htext + .rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) } :htext + .rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) } :htext + .rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) } :htext + .rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) } :htext + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } :htext + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } :htext + .rel.plt : { *(.rel.plt) } :htext + .rela.plt : { *(.rela.plt) } :htext + .init : + { + KEEP (*(.init)) + } :htext =0 + .text : + { + *(.text .stub .text.* .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.glink) + } :htext =0 + .fini : + { + KEEP (*(.fini)) + } :htext =0 + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } :htext + .rodata1 : { *(.rodata1) } :htext + .sdata2 : + { + PROVIDE (_SDA2_BASE_ = 32768); + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + } :htext + .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) } :htext + .eh_frame_hdr : { *(.eh_frame_hdr) } :htext :eh_frame_hdr +/* .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } :htext */ +/* .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } :htext */ + + /* We don't maintain address congruence here, because saving + * hugepages is more important than saving executable size. */ + /* Just move to the very next hugepage, rather than using a guard + * page, because for ppc32 binaries we can't separate the text and + * PLT by >32MB */ + . = ALIGN (0x1000000); + /* Exception handling */ + .eh_frame : /*ONLY_IF_RW*/ { KEEP (*(.eh_frame)) } :hdata + .gcc_except_table : /*ONLY_IF_RW*/ { *(.gcc_except_table .gcc_except_table.*) } :hdata + /* Thread Local Storage sections */ + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } :hdata + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } :hdata + .preinit_array : + { + PROVIDE /*_HIDDEN*/ (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE /*_HIDDEN*/ (__preinit_array_end = .); + } :hdata + .init_array : + { + PROVIDE /*_HIDDEN*/ (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE /*_HIDDEN*/ (__init_array_end = .); + } :hdata + .fini_array : + { + PROVIDE /*_HIDDEN*/ (__fini_array_start = .); + KEEP (*(.fini_array)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE /*_HIDDEN*/ (__fini_array_end = .); + } :hdata + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin*.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } :hdata + .dtors : + { + KEEP (*crtbegin*.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } :hdata + .jcr : { KEEP (*(.jcr)) } :hdata + .data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) } :hdata + .got1 : { *(.got1) } :hdata + .got2 : { *(.got2) } :hdata + .dynamic : { *(.dynamic) } :dynamic :hdata + .got : { *(.got.plt .got) } :hdata +/* . = DATA_SEGMENT_RELRO_END (0, .); */ + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + KEEP (*(.gnu.linkonce.d.*personality*)) + SORT(CONSTRUCTORS) + } :hdata + .data1 : { *(.data1) } :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. */ + .sdata : + { + PROVIDE (_SDA_BASE_ = 32768); + *(.sdata .sdata.* .gnu.linkonce.s.*) + } :hdata + _edata = .; PROVIDE (edata = .); + __bss_start = .; + .sbss : + { + PROVIDE (__sbss_start = .); PROVIDE (___sbss_start = .); + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + PROVIDE (__sbss_end = .); PROVIDE (___sbss_end = .); + } :hdata + .plt : { *(.plt) } :hdata + .bss : + { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* + * Align here to ensure that the .bss section occupies space up to + * _end. Additionally (for huge pages) align to a segment boundary. + * This ensures that no normal page mappings will be created in this + * segment (after the bss) which could interfere with remapping. + */ + . = ALIGN(256*1024*1024); + } :hdata + _end = .; + PROVIDE (end = .); + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /DISCARD/ : { *(.fixup) } + /DISCARD/ : { *(.note.GNU-stack) } +} debian/patches/disable-version-auto-detect0000644000000000000000000000112211472707747016056 0ustar Upstream test to auto-detect git snapshot don't pla nicely with our git repo. Should be reported upstream. Index: libhugetlbfs/localversion =================================================================== --- libhugetlbfs.orig/localversion 2010-03-18 08:58:31.000000000 +0100 +++ libhugetlbfs/localversion 2010-03-18 09:00:36.000000000 +0100 @@ -31,7 +31,8 @@ modified=0 # GIT: check for a git tree. -mod=`git diff-index HEAD 2>/dev/null` +#mod=`git diff-index HEAD 2>/dev/null` +false if [ "$?" -eq 0 ]; then # This is a GIT repo, see if it was modified. if [ "$mod" != "" ]; then debian/patches/install-tests-64.diff0000644000000000000000000000124512264124711014506 0ustar Index: b/tests/Makefile =================================================================== --- a/tests/Makefile +++ b/tests/Makefile @@ -293,7 +293,10 @@ $(INSTALL) -m 755 wrapper-utils.sh $(DESTDIR)$(INST_TESTSDIR64)/obj64 $(INSTALL) -m 755 $(HELPERS:%=obj64/%) $(DESTDIR)$(INST_TESTSDIR64)/obj64 $(INSTALL) -m 755 $(HELPER_LIBS:%=obj64/%) $(DESTDIR)$(INST_TESTSDIR64)/obj64 +ifneq (,$(TESTS_64)) $(INSTALL) -m 755 $(TESTS_64:%=obj64/%) $(DESTDIR)$(INST_TESTSDIR64)/obj64 +endif + $(INSTALL) -m 755 $(TESTS_64_STATIC:%=obj64/%_static) $(DESTDIR)$(INST_TESTSDIR64)/obj64 $(INSTALL) -m 755 run_tests.py $(DESTDIR)$(INST_TESTSDIR64) install: $(OBJDIRS:%=%/install) debian/patches/powerpc-fix.diff0000644000000000000000000000044412264153316013717 0ustar Index: b/Makefile =================================================================== --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ ELF32 = elf32ppclinux endif else -ifeq ($(ARCH),powerpc) +ifneq (,$(filter $(ARCH),ppc powerpc)) CC32 = $(CC) -m32 ELF32 = elf32ppclinux TMPLIB32 = lib debian/patches/series0000644000000000000000000000025412264153226012036 0ustar disable-version-auto-detect fix-hugeedit-manpage-section fix-path-in-run_tests ppc64el.diff soname.diff debian-changes-2.11-0ubuntu1 install-tests-64.diff powerpc-fix.diff debian/patches/debian-changes-2.11-0ubuntu10000644000000000000000000000707611531565523015450 0ustar Description: Upstream changes introduced in version 2.11-0ubuntu1 This patch has been created by dpkg-source during the package build. Here's the last changelog entry, hopefully it gives details on why those changes were made: . libhugetlbfs (2.11-0ubuntu1) natty; urgency=low . * libhugetlbfs 2.11 release. * Package linker scripts in the -dev package. . The person named in the Author field signed this changelog entry. Author: Matthias Klose --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: , Bug: Bug-Debian: http://bugs.debian.org/ Bug-Ubuntu: https://launchpad.net/bugs/ Forwarded: Reviewed-By: Last-Update: --- /dev/null +++ libhugetlbfs-2.11/TODO.CONF @@ -0,0 +1,64 @@ +Current configuration: + * Total System Memory......: 31580 MB + * Shared Mem Max Mapping...: 32 MB + * System Huge Page Size....: 16 MB + * Number of Huge Pages.....: 0 + * Total size of Huge Pages.: 0 MB + * Remaining System Memory..: 31580 MB + * Huge Page User Group.....: root (0) + +How much memory would you like to allocate for huge pages? (input in MB, unless postfixed with GB): 256 +Okay, we'll try to allocate 256 MB for huge pages... + +What group should have access to the huge pages?(The group will be created, if need be) [hugepages]: +Okay, we'll give group hugepages access to the huge pages +Created group hugepages (gid 2502) for huge page use + +What user(s) should have access to the huge pages (space-delimited list, users created as needed)? + +hugeadm:WARNING: There is no swap space configured, resizing hugepage pool may fail +hugeadm:WARNING: Use --add-temp-swap option to temporarily add swap during the resize +Saved original /etc/sysctl.conf as /etc/sysctl.conf.backup +Saved original /etc/security/limits.d/hugepages.conf as /etc/security/limits.d/hugepages.conf.backup + +Final configuration: + * Total System Memory......: 31580 MB + * Shared Mem Max Mapping...: 256 MB + * System Huge Page Size....: 16 MB + * Available Huge Pages.....: 16 + * Total size of Huge Pages.: 256 MB + * Remaining System Memory..: 31324 MB + * Huge Page User Group.....: hugepages (2502) + +--- /etc/sysctl.conf.backup 2010-12-21 09:56:11.000000000 +0000 ++++ /etc/sysctl.conf 2011-02-23 00:53:26.752252039 +0000 +@@ -58,3 +58,6 @@ + # Log Martian Packets + #net.ipv4.conf.all.log_martians = 1 + # ++kernel.shmmax = 268435456 ++vm.nr_hugepages = 16 ++vm.hugetlb_shm_group = 2502 + + +cat /etc/security/limits.d/hugepages.conf +# limit.conf file for hugepages. +# +# The hugepages are always locked in memory, therefore it is +# necessary to raise the memlock limit appropriately. Note that +# memlock limit is not enforced to the hugetlbfs pseudo-filesystems. +# +# By default, pam_limits grant all users right to memlock a few pages +# (see `ulimit -H -l'). When you raise the memlock limit for hugepages, +# it is usually a good idea to grant those few extra KB too. +# (for example: 256 * 1024K + 64K => 262144 ) +# +# Documentations: +# * limits.conf(5), pam_limits(8) manpages +# * /usr/share/doc/hugepages/HOWTO.gz + +# + +#@hugepages hard memlock 262144 +#@hugepages soft memlock 262144 + debian/README.Debian0000644000000000000000000000033011472707747011243 0ustar libhugetlbfs for Debian ----------------------- Not much to tell... ... your feed-back, bug reports and contributions are welcome. -- Frank Lin PIAT Thu, 18 Mar 2010 08:29:50 +0100 debian/control0000644000000000000000000000611412264120765010600 0ustar Source: libhugetlbfs Priority: extra Maintainer: Frank Lin PIAT , Vincent Danjean Build-Depends: debhelper (>= 7.0.50~) Standards-Version: 3.9.5 Section: libs Homepage: http://libhugetlbfs.sourceforge.net/ Package: libhugetlbfs0 Section: libs Architecture: i386 amd64 powerpc ppc64 ppc64el armhf arm64 Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: hugepages Description: A library which provides easy access to huge pages of memory libhugetlbfs is a library which provides easy access to huge pages of memory. It is a wrapper for the hugetlbfs file system. Applications can use huge pages to fulfill malloc() requests without being recompiled by using LD_PRELOAD. Alternatively, applications can be linked against libhugetlbfs without source modifications to load BSS or BSS, data, and text segments into large pages. . This package provides the applications for preloading libhugetlbfs Package: libhugetlbfs-tests Section: libs Architecture: i386 amd64 powerpc ppc64 ppc64el armhf arm64 Depends: ${shlibs:Depends}, ${misc:Depends}, hugepages, ${python:Depends} Recommends: libhugetlbfs0 Suggests: oprofile Description: A library which provides easy access to huge pages of memory libhugetlbfs is a library which provides easy access to huge pages of memory. It is a wrapper for the hugetlbfs file system. Applications can use huge pages to fulfill malloc() requests without being recompiled by using LD_PRELOAD. Alternatively, applications can be linked against libhugetlbfs without source modifications to load BSS or BSS, data, and text segments into large pages. . This package provides the test-suite for libhugetlbfs, which is mostly useful for regression testing of libhugetlbfs. Package: hugepages Section: admin Architecture: i386 amd64 powerpc ppc64 ppc64el armhf arm64 Depends: ${shlibs:Depends}, ${misc:Depends}, libhugetlbfs0 (= ${binary:Version}), ${python:Depends} Suggests: libhugetlbfs-tests Description: A set of tools to configure huge pages of memory This package contains a number of utilities that will help administrate the use of huge pages on your system. hugeedit modifies binaries to set default segment remapping behavior. hugectl sets environment variables for using huge pages and then execs the target program. hugeadm gives easy access to huge page pool size control. pagesize lists page sizes available on the machine. Package: libhugetlbfs-dev Section: libdevel Architecture: i386 amd64 powerpc ppc64 ppc64el armhf arm64 Depends: libhugetlbfs0 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} Description: A library which provides easy access to huge pages of memory libhugetlbfs is a library which provides easy access to huge pages of memory. It is a wrapper for the hugetlbfs file system. Applications can use huge pages to fulfill malloc() requests without being recompiled by using LD_PRELOAD. Alternatively, applications can be linked against libhugetlbfs without source modifications to load BSS or BSS, data, and text segments into large pages. . This package provides the headers and development libraries debian/libhugetlbfs-dev.install0000644000000000000000000000033611531106041013776 0ustar usr/include/* usr/share/man/man3/* usr/lib*/lib*.a usr/share/libhugetlbfs/ld usr/share/libhugetlbfs/ld.hugetlbfs usr/share/libhugetlbfs/ldscripts #usr/lib*/lib*.so #usr/lib/pkgconfig/* #usr/lib/*.la #usr/share/pkgconfig/* debian/limits.conf0000644000000000000000000000133511472707747011360 0ustar # limit.conf file for hugepages. # # The hugepages are always locked in memory, therefore it is # necessary to raise the memlock limit appropriately. Note that # memlock limit is not enforced to the hugetlbfs pseudo-filesystems. # # By default, pam_limits grant all users right to memlock a few pages # (see `ulimit -H -l'). When you raise the memlock limit for hugepages, # it is usually a good idea to grant those few extra KB too. # (for example: 256 * 1024K + 64K => 262144 ) # # Documentations: # * limits.conf(5), pam_limits(8) manpages # * /usr/share/doc/hugepages/HOWTO.gz # #@hugepages hard memlock 262144 #@hugepages soft memlock 262144 debian/rules0000755000000000000000000000344312264123744010257 0ustar #!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # work around LP: #723515 export DEB_GCC_NO_O3=1 DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) ifneq (,$(filter $(DEB_HOST_ARCH), amd64 ppc64 ppc64el)) LIBARGS = LIB32=lib32 LIB64=lib V=1 else ifneq (,$(filter $(DEB_HOST_ARCH), i386 powerpc)) LIBARGS = LIB32=lib LIB64=lib64 V=1 endif %: dh $@ override_dh_auto_clean: $(MAKE) clean V=1 override_dh_auto_build: # Parallel builds are not reliable $(MAKE) BUILDTYPE=NATIVEONLY $(LIBARGS) V=1 override_dh_auto_install: mkdir -p debian/tmp/usr/share/libhugetlbfs/tests $(MAKE) install PREFIX=/usr DESTDIR=$(CURDIR)/debian/tmp BUILDTYPE=NATIVEONLY $(LIBARGS) $(MAKE) install-helper PREFIX=/usr DESTDIR=$(CURDIR)/debian/tmp BUILDTYPE=NATIVEONLY $(LIBARGS) $(MAKE) install-tests PREFIX=/usr DESTDIR=$(CURDIR)/debian/tmp BUILDTYPE=NATIVEONLY $(LIBARGS) INST_TESTSDIR64=/usr/share/libhugetlbfs/tests INST_TESTSDIR32=/usr/share/libhugetlbfs/tests # Fix minor issues find debian/tmp/ -name dummy.ldscript -print0 | xargs -r0 chmod a-x # Actually, we don't want hat helper. # mv debian/tmp/usr/bin/huge_page_setup_helper.py debian/tmp/usr/bin/huge_page_setup_helper install -m 755 -d $(CURDIR)/debian/tmp/etc/security/limits.d install -m 644 $(CURDIR)/debian/limits.conf $(CURDIR)/debian/tmp/etc/security/limits.d/hugepages.conf # mv debian/tmp/usr/lib/libhugetlbfs.so debian/tmp/usr/lib/libhugetlbfs.so.0 # ln -sf libhugetlbfs.so.0 debian/tmp/usr/lib/libhugetlbfs.so # mv debian/tmp/usr/lib/libhugetlbfs_privutils.so debian/tmp/usr/lib/libhugetlbfs_privutils.so.0 # ln -sf libhugetlbfs_privutils.so.0 debian/tmp/usr/lib/libhugetlbfs_privutils.so dh_install --sourcedir=debian/tmp override_dh_auto_test: -echo "SKIP tests, as they require privilege (FIXME)" debian/source/0000755000000000000000000000000011472707747010506 5ustar debian/source/format0000644000000000000000000000001411472707747011714 0ustar 3.0 (quilt) debian/README.source0000644000000000000000000000100311472707747011357 0ustar libhugetlbfs for Debian ----------------------- This package uses quilt to manage all modifications to the upstream source. Changes are stored in the source package as diffs in debian/patches and applied during the build. Please see: /usr/share/doc/quilt/README.source for more information on how to apply the patches, modify patches, or remove a patch. Note: libhugetlbfs is known to fail to build, if both hugetlbfs and and pam_limits.so are enabled (actually, it fails during the test suite) debian/libhugetlbfs-dev.dirs0000644000000000000000000000004711472707747013320 0ustar usr/lib usr/include usr/share/man/man3 debian/watch0000644000000000000000000000010011472707747010226 0ustar version=3 http://sf.net/libhugetlbfs/libhugetlbfs-(.+)\.tar\.gz