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

Nathan Whitehorn nwhitehorn at FreeBSD.org
Tue Feb 9 17:29:05 UTC 2010


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 <amodra at gmail dot com>

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", at 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", at 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", at 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 at ha
+	ld	%r5,HIDENAME(minbrk)@toc at 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 at ha
+	ld	%r7,HIDENAME(curbrk)@toc at 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 at ha
+	ld	%r5,HIDENAME(curbrk)@toc at 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 at ha
+	ld	%r4,CNAME(_logname_valid)@toc at 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__
 


More information about the svn-src-projects mailing list