From owner-svn-src-projects@FreeBSD.ORG Tue Feb 9 17:29:05 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 71A06106568D; Tue, 9 Feb 2010 17:29:05 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5EEC68FC18; Tue, 9 Feb 2010 17:29:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o19HT5QL033223; Tue, 9 Feb 2010 17:29:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o19HT5C4033212; Tue, 9 Feb 2010 17:29:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201002091729.o19HT5C4033212@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 9 Feb 2010 17:29:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r203709 - in projects/ppc64: contrib/gcc/config/rs6000 gnu/usr.bin/cc gnu/usr.bin/gdb lib/csu/powerpc64 lib/libc/powerpc64/sys rescue/rescue usr.sbin/named X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Feb 2010 17:29:05 -0000 Author: nwhitehorn Date: Tue Feb 9 17:29:04 2010 New Revision: 203709 URL: http://svn.freebsd.org/changeset/base/203709 Log: Modify CRT generation such that the linker can automatically split up large executables into multiple TOC sections and modify libc to be able to handle this. This eliminates the need for the -mminimal-toc hacks in large programs like gcc and named. Discussed with: Alan Modra Modified: projects/ppc64/contrib/gcc/config/rs6000/freebsd.h projects/ppc64/gnu/usr.bin/cc/Makefile.tgt projects/ppc64/gnu/usr.bin/gdb/Makefile.inc projects/ppc64/lib/csu/powerpc64/crti.S projects/ppc64/lib/csu/powerpc64/crtn.S projects/ppc64/lib/libc/powerpc64/sys/brk.S projects/ppc64/lib/libc/powerpc64/sys/sbrk.S projects/ppc64/lib/libc/powerpc64/sys/setlogin.S projects/ppc64/rescue/rescue/Makefile projects/ppc64/usr.sbin/named/Makefile Modified: projects/ppc64/contrib/gcc/config/rs6000/freebsd.h ============================================================================== --- projects/ppc64/contrib/gcc/config/rs6000/freebsd.h Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/contrib/gcc/config/rs6000/freebsd.h Tue Feb 9 17:29:04 2010 (r203709) @@ -151,3 +151,16 @@ /* Override rs6000.h definition. */ #undef ASM_APP_OFF #define ASM_APP_OFF "#NO_APP\n" + +/* _init and _fini functions are built from bits spread across many + object files, each potentially with a different TOC pointer. For + that reason, place a nop after the call so that the linker can + restore the TOC pointer if a TOC adjusting call stub is needed. */ +#ifdef __powerpc64__ +#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ + asm (SECTION_OP "\n" \ +" bl ." #FUNC "\n" \ +" nop\n" \ +" .previous"); +#endif + Modified: projects/ppc64/gnu/usr.bin/cc/Makefile.tgt ============================================================================== --- projects/ppc64/gnu/usr.bin/cc/Makefile.tgt Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/gnu/usr.bin/cc/Makefile.tgt Tue Feb 9 17:29:04 2010 (r203709) @@ -22,6 +22,3 @@ TARGET_CPU_DEFAULT= TARGET_CPU_ultraspar TARGET_CPU_DEFAULT= \"powerpc64\" .endif -.if ${MACHINE_ARCH} == "powerpc64" -CFLAGS+= -mminimal-toc -.endif Modified: projects/ppc64/gnu/usr.bin/gdb/Makefile.inc ============================================================================== --- projects/ppc64/gnu/usr.bin/gdb/Makefile.inc Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/gnu/usr.bin/gdb/Makefile.inc Tue Feb 9 17:29:04 2010 (r203709) @@ -38,10 +38,6 @@ CFLAGS+= -I${CNTRB_GDB}/include CFLAGS+= -I${CNTRB_BU}/include CFLAGS+= -I${CNTRB_BU}/bfd -.if ${MACHINE_ARCH} == "powerpc64" -CFLAGS+= -mminimal-toc -.endif - GENSRCS+= nm.h tm.h .if defined(GDB_CROSS_DEBUGGER) Modified: projects/ppc64/lib/csu/powerpc64/crti.S ============================================================================== --- projects/ppc64/lib/csu/powerpc64/crti.S Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/lib/csu/powerpc64/crti.S Tue Feb 9 17:29:04 2010 (r203709) @@ -38,10 +38,7 @@ _init: ._init: stdu 1,-48(1) mflr 0 - std 31,40(1) std 0,64(1) - mr 31,1 - .section .fini,"ax",@progbits .align 2 @@ -58,10 +55,7 @@ _fini: ._fini: stdu 1,-48(1) mflr 0 - std 31,40(1) std 0,64(1) - mr 31,1 - .section .rodata .ascii "$FreeBSD: projects/ppc64/lib/csu/powerpc/crti.S 96632 2002-05-15 04:19:49Z obrien $\0" Modified: projects/ppc64/lib/csu/powerpc64/crtn.S ============================================================================== --- projects/ppc64/lib/csu/powerpc64/crtn.S Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/lib/csu/powerpc64/crtn.S Tue Feb 9 17:29:04 2010 (r203709) @@ -24,20 +24,16 @@ */ .section .init,"ax",@progbits - ld 11,0(1) - ld 0,16(11) + ld %r1,0(%r1) + ld 0,16(%r1) mtlr 0 - ld 31,-8(11) - mr 1,11 blr .section .fini,"ax",@progbits - ld 11,0(1) - ld 0,16(11) + ld %r1,0(%r1) + ld 0,16(%r1) mtlr 0 - ld 31,-8(11) - mr 1,11 blr Modified: projects/ppc64/lib/libc/powerpc64/sys/brk.S ============================================================================== --- projects/ppc64/lib/libc/powerpc64/sys/brk.S Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/lib/libc/powerpc64/sys/brk.S Tue Feb 9 17:29:04 2010 (r203709) @@ -41,7 +41,8 @@ HIDENAME(minbrk): .text ENTRY(brk) - ld %r5,HIDENAME(minbrk)@got(%r2) + addis %r5,%r2,HIDENAME(minbrk)@toc@ha + ld %r5,HIDENAME(minbrk)@toc@l(%r5) ld %r6,0(%r5) cmpld %r6,%r3 /* if (minbrk <= r3) */ bgt 0f @@ -51,8 +52,12 @@ ENTRY(brk) li %r0,SYS_break sc /* assume, that r5 is kept */ bso 1f - ld %r7,HIDENAME(curbrk)@got(%r2) /* record new break */ + + /* record new break */ + addis %r7,%r2,HIDENAME(curbrk)@toc@ha + ld %r7,HIDENAME(curbrk)@toc@l(%r7) std %r6,0(%r7) + blr /* return 0 */ 1: Modified: projects/ppc64/lib/libc/powerpc64/sys/sbrk.S ============================================================================== --- projects/ppc64/lib/libc/powerpc64/sys/sbrk.S Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/lib/libc/powerpc64/sys/sbrk.S Tue Feb 9 17:29:04 2010 (r203709) @@ -39,7 +39,8 @@ HIDENAME(curbrk): .text ENTRY(sbrk) - ld %r5,HIDENAME(curbrk)@got(%r2) + addis %r5,%r2,HIDENAME(curbrk)@toc@ha + ld %r5,HIDENAME(curbrk)@toc@l(%r5) ld %r6,0(%r5) /* r6 = old break */ cmpdi %r3,0 /* sbrk(0) - return curbrk */ beq 1f Modified: projects/ppc64/lib/libc/powerpc64/sys/setlogin.S ============================================================================== --- projects/ppc64/lib/libc/powerpc64/sys/setlogin.S Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/lib/libc/powerpc64/sys/setlogin.S Tue Feb 9 17:29:04 2010 (r203709) @@ -33,7 +33,8 @@ __FBSDID("$FreeBSD$"); .globl CNAME(_logname_valid) /* in _getlogin() */ SYSCALL(setlogin) - ld %r4,CNAME(_logname_valid)@got(%r2) + addis %r4,%r2,CNAME(_logname_valid)@toc@ha + ld %r4,CNAME(_logname_valid)@toc@l(%r4) li %r5,%r0 std %r5,0(%r4) blr Modified: projects/ppc64/rescue/rescue/Makefile ============================================================================== --- projects/ppc64/rescue/rescue/Makefile Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/rescue/rescue/Makefile Tue Feb 9 17:29:04 2010 (r203709) @@ -47,11 +47,7 @@ CLEANFILES+= dhclient_FIXED # Define Makefile variable RESCUE CRUNCH_BUILDOPTS+= -DRESCUE # Define compile-time RESCUE symbol when compiling components -.if ${MACHINE_ARCH} == powerpc64 -CRUNCH_BUILDOPTS+= CRUNCH_CFLAGS=\"-DRESCUE -mminimal-toc\" -.else CRUNCH_BUILDOPTS+= CRUNCH_CFLAGS=-DRESCUE -.endif # An experiment that failed: try overriding bsd.lib.mk and bsd.prog.mk # rather than incorporating rescue-specific logic into standard files. Modified: projects/ppc64/usr.sbin/named/Makefile ============================================================================== --- projects/ppc64/usr.sbin/named/Makefile Tue Feb 9 17:20:00 2010 (r203708) +++ projects/ppc64/usr.sbin/named/Makefile Tue Feb 9 17:29:04 2010 (r203709) @@ -48,10 +48,6 @@ CFLAGS+= -DCONFIGARGS="\"${CONFIGARGS}\" CFLAGS+= -I${SRCDIR}/unix/include -I${SRCDIR}/include -I${LIB_BIND_DIR} CFLAGS+= -I${BIND_DIR}/lib/isc/${ISC_ATOMIC_ARCH}/include -.if ${MACHINE_ARCH} == powerpc64 -CFLAGS+= -mminimal-toc -.endif - # Remove the date stamp to make it more obvious when real changes happen CFLAGS+= -U__DATE__