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