svn commit: r204915 - in projects/ppc64: .
contrib/gcc/config/rs6000 gnu/usr.bin/binutils/ld
gnu/usr.bin/cc/cc_tools lib/libstand sys/boot sys/boot/ficl
sys/boot/ofw sys/boot/powerpc sys/boot/power...
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Mar 9 17:26:51 UTC 2010
Author: nwhitehorn
Date: Tue Mar 9 17:26:50 2010
New Revision: 204915
URL: http://svn.freebsd.org/changeset/base/204915
Log:
Create a bi-arch toolchain on powerpc64, and connect loader and lib32
to the build. Some of the hacks in /sys/boot and libstand will
disappear once projects/tbemd is merged.
cc -m32 almost works correctly now outside the context of a buildworld,
but gcc insists on overriding ld's correct idea of where 32-bit libraries
should be found with incorrect paths.
Modified:
projects/ppc64/Makefile.inc1
projects/ppc64/contrib/gcc/config/rs6000/freebsd.h
projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64
projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile
projects/ppc64/lib/libstand/Makefile
projects/ppc64/sys/boot/Makefile
projects/ppc64/sys/boot/ficl/Makefile
projects/ppc64/sys/boot/ofw/Makefile.inc
projects/ppc64/sys/boot/powerpc/Makefile.inc
projects/ppc64/sys/boot/powerpc/boot1.chrp/Makefile
projects/ppc64/sys/boot/powerpc/ofw/ldscript.powerpc
projects/ppc64/sys/boot/powerpc/uboot/ldscript.powerpc
projects/ppc64/sys/boot/uboot/Makefile.inc
projects/ppc64/sys/powerpc/include/reg.h
projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c
Modified: projects/ppc64/Makefile.inc1
==============================================================================
--- projects/ppc64/Makefile.inc1 Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/Makefile.inc1 Tue Mar 9 17:26:50 2010 (r204915)
@@ -263,33 +263,47 @@ WMAKEENV+= NO_CTF=1
.endif
WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
-.if ${TARGET_ARCH} == "amd64"
+.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64"
# 32 bit world
LIB32TMP= ${OBJTREE}${.CURDIR}/lib32
+.if ${TARGET_ARCH} == "amd64"
.if empty(TARGET_CPUTYPE)
LIB32CPUFLAGS= -march=i686 -mmmx -msse -msse2
.else
LIB32CPUFLAGS= -march=${TARGET_CPUTYPE}
.endif
-LIB32FLAGS= -m32 ${LIB32CPUFLAGS} -mfancy-math-387 -DCOMPAT_32BIT \
+LIB32CPUFLAGS+= -mfancy-math-387
+LIB32WMAKEENV= MACHINE=i386 MACHINE_ARCH=i386 \
+ LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
+ AS="${AS} --32"
+
+.elif ${TARGET_ARCH} == "powerpc64"
+.if empty(TARGET_CPUTYPE)
+LIB32CPUFLAGS= -mcpu=powerpc
+.else
+LIB32CPUFLAGS= -mcpu=${TARGET_CPUTYPE}
+.endif
+
+LIB32WMAKEENV= MACHINE=powerpc MACHINE_ARCH=powerpc \
+ LD="${LD} -m elf32ppc"
+.endif
+
+
+LIB32FLAGS= -m32 ${LIB32CPUFLAGS} -DCOMPAT_32BIT \
-isystem ${LIB32TMP}/usr/include/ \
-L${LIB32TMP}/usr/lib32 \
-B${LIB32TMP}/usr/lib32
# Yes, the flags are redundant.
-LIB32WMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
+LIB32WMAKEENV+= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
_SHLIBDIRPREFIX=${LIB32TMP} \
VERSION="${VERSION}" \
- MACHINE=i386 \
- MACHINE_ARCH=i386 \
INSTALL="sh ${.CURDIR}/tools/install.sh" \
PATH=${TMPPATH} \
CC="${CC} ${LIB32FLAGS}" \
CXX="${CXX} ${LIB32FLAGS}" \
OBJC="${OBJC} ${LIB32FLAGS}" \
- LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
- AS="${AS} --32" \
LIBDIR=/usr/lib32 \
SHLIBDIR=/usr/lib32
@@ -336,7 +350,7 @@ _worldtmp:
@echo "--------------------------------------------------------------"
.if !defined(NO_CLEAN)
rm -rf ${WORLDTMP}
-.if ${TARGET_ARCH} == "amd64"
+.if defined(LIB32TMP)
rm -rf ${LIB32TMP}
.endif
.else
@@ -380,7 +394,7 @@ _cleanobj:
@echo ">>> stage 2.1: cleaning up the object tree"
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
-.if ${TARGET_ARCH} == "amd64"
+.if defined(LIB32TMP)
${_+_}cd ${.CURDIR}; ${LIB32WMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
.endif
.endif
@@ -428,7 +442,7 @@ everything:
@echo ">>> stage 4.4: building everything"
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${WMAKE} par-all
-.if ${TARGET_ARCH} == "amd64"
+.if defined(LIB32TMP)
build32:
@echo
@echo "--------------------------------------------------------------"
@@ -510,7 +524,7 @@ WMAKE_TGTS+= _cleanobj _obj _build-tools
WMAKE_TGTS+= _cross-tools
.endif
WMAKE_TGTS+= _includes _libraries _depend everything
-.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
+.if defined(LIB32TMP) && ${MK_LIB32} != "no"
WMAKE_TGTS+= build32
.endif
@@ -660,7 +674,7 @@ reinstall:
@echo ">>> Installing everything"
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
-.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
+.if defined(LIB32TMP) && ${MK_LIB32} != "no"
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
.endif
@@ -669,7 +683,7 @@ redistribute:
@echo ">>> Distributing everything"
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
-.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
+.if defined(LIB32TMP) && ${MK_LIB32} != "no"
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 \
DISTRIBUTION=lib32
.endif
Modified: projects/ppc64/contrib/gcc/config/rs6000/freebsd.h
==============================================================================
--- projects/ppc64/contrib/gcc/config/rs6000/freebsd.h Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/contrib/gcc/config/rs6000/freebsd.h Tue Mar 9 17:26:50 2010 (r204915)
@@ -152,6 +152,43 @@
#undef ASM_APP_OFF
#define ASM_APP_OFF "#NO_APP\n"
+/* Tell the assembler we want 32/64-bit binaries if -m32 or -m64 is passed */
+#if (TARGET_DEFAULT & MASK_64BIT)
+#define SVR4_ASM_SPEC "%(asm_cpu) \
+%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
+%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
+%{mrelocatable} %{mrelocatable-lib} %{fpic|fpie|fPIC|fPIE:-K PIC} \
+%{memb|msdata|msdata=eabi: -memb} \
+%{mlittle|mlittle-endian:-mlittle; \
+ mbig|mbig-endian :-mbig; \
+ mcall-aixdesc | \
+ mcall-freebsd | \
+ mcall-netbsd | \
+ mcall-openbsd | \
+ mcall-linux | \
+ mcall-gnu :-mbig; \
+ mcall-i960-old :-mlittle}"
+#define LINK_OS_FREEBSD_SPEC_DEF "\
+ %{p:%nconsider using `-pg' instead of `-p' with gprof(1)} \
+ %{v:-V} \
+ %{assert*} %{R*} %{rpath*} %{defsym*} \
+ %{shared:-Bshareable %{h*} %{soname*}} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic: -export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \
+ %{static:-Bstatic}} \
+ %{symbolic:-Bsymbolic}"
+
+
+#undef ASM_DEFAULT_SPEC
+#undef ASM_SPEC
+#undef LINK_OS_FREEBSD_SPEC
+#define ASM_DEFAULT_SPEC "-mppc%{!m32:64}"
+#define ASM_SPEC "%{m32:-a32}%{!m32:-a64} " SVR4_ASM_SPEC
+#define LINK_OS_FREEBSD_SPEC "%{m32:-melf32ppc}%{!m32:-melf64ppc} " LINK_OS_FREEBSD_SPEC_DEF
+#endif
+
/* _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
Modified: projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64
==============================================================================
--- projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64 Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/gnu/usr.bin/binutils/ld/Makefile.powerpc64 Tue Mar 9 17:26:50 2010 (r204915)
@@ -12,7 +12,7 @@ e${NATIVE_EMULATION}.c: emulparams/${NAT
${NATIVE_EMULATION} "" no ${NATIVE_EMULATION} ${TARGET_TUPLE}
PPC32_EMULATION= elf32ppc
-_ppc32_path= \"${TOOLS_PREFIX}/usr/lib/powerpc\"
+_ppc32_path= \"${TOOLS_PREFIX}/usr/lib32\"
EMS+= ${PPC32_EMULATION}
.for ext in ${ELF_SCR_EXT}
LDSCRIPTS+= ${PPC32_EMULATION}.${ext}
Modified: projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile
==============================================================================
--- projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/gnu/usr.bin/cc/cc_tools/Makefile Tue Mar 9 17:26:50 2010 (r204915)
@@ -52,13 +52,14 @@ TARGET_INC+= ${GCC_CPU}/elf.h
.if ${TARGET_ARCH} == "arm"
TARGET_INC+= ${GCC_CPU}/aout.h
.endif
+.if ${TARGET_ARCH} == "powerpc64"
+TARGET_INC+= ${GCC_CPU}/biarch64.h
+TARGET_INC+= ${GCC_CPU}/default64.h
+.endif
TARGET_INC+= ${GCC_CPU}/freebsd.h
.if ${TARGET_ARCH} == "amd64"
TARGET_INC+= ${GCC_CPU}/freebsd64.h
.endif
-.if ${TARGET_ARCH} == "powerpc64"
-TARGET_INC+= ${GCC_CPU}/default64.h
-.endif
.if ${TARGET_ARCH} == "arm"
TARGET_INC+= ${GCC_CPU}/arm.h
.endif
Modified: projects/ppc64/lib/libstand/Makefile
==============================================================================
--- projects/ppc64/lib/libstand/Makefile Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/lib/libstand/Makefile Tue Mar 9 17:26:50 2010 (r204915)
@@ -30,10 +30,10 @@ CFLAGS+= -mno-sse3
.if ${MACHINE} == "pc98"
CFLAGS+= -Os
.endif
-.if ${MACHINE_ARCH} == "powerpc"
+.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64"
CFLAGS+= -msoft-float -D_STANDALONE
.endif
-.if ${MACHINE_ARCH} == "amd64"
+.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "powerpc64"
CFLAGS+= -m32 -I.
.endif
.if ${MACHINE_ARCH} == "arm"
@@ -55,8 +55,8 @@ SRCS+= ntoh.c
# string functions from libc
.PATH: ${.CURDIR}/../libc/string
.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "powerpc" || \
- ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "amd64" || \
- ${MACHINE_ARCH} == "arm"
+ ${MACHINE_ARCH} == "powerpc64" || ${MACHINE_ARCH} == "sparc64" || \
+ ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "arm"
SRCS+= bcmp.c bcopy.c bzero.c ffs.c index.c memccpy.c memchr.c memcmp.c \
memcpy.c memmove.c memset.c qdivrem.c rindex.c strcat.c strchr.c \
strcmp.c strcpy.c strcspn.c strlen.c strncat.c strncmp.c strncpy.c \
@@ -78,7 +78,7 @@ SRCS+= bcmp.c bcopy.S bzero.S ffs.S inde
SRCS+= __divdi3.S __divsi3.S __moddi3.S __modsi3.S
SRCS+= __udivdi3.S __udivsi3.S __umoddi3.S __umodsi3.S
.endif
-.if ${MACHINE_ARCH} == "powerpc"
+.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64"
.PATH: ${.CURDIR}/../libc/quad
SRCS+= ashldi3.c ashrdi3.c
.PATH: ${.CURDIR}/../libc/powerpc/gen
@@ -92,6 +92,8 @@ SRCS+= uuid_equal.c uuid_is_nil.c
# _setjmp/_longjmp
.if ${MACHINE_ARCH} == "amd64"
.PATH: ${.CURDIR}/i386
+.elif ${MACHINE_ARCH} == "powerpc64"
+.PATH: ${.CURDIR}/powerpc
.else
.PATH: ${.CURDIR}/${MACHINE_ARCH}
.endif
Modified: projects/ppc64/sys/boot/Makefile
==============================================================================
--- projects/ppc64/sys/boot/Makefile Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/Makefile Tue Mar 9 17:26:50 2010 (r204915)
@@ -27,7 +27,7 @@ SUBDIR+= zfs
.endif
# Pick the machine-dependent subdir based on the target architecture.
-ADIR= ${MACHINE:S/amd64/i386/:S/sun4v/sparc64/}
+ADIR= ${MACHINE:S/amd64/i386/:S/sun4v/sparc64/:S/powerpc64/powerpc/}
.if exists(${.CURDIR}/${ADIR}/.)
SUBDIR+= ${ADIR}
.endif
Modified: projects/ppc64/sys/boot/ficl/Makefile
==============================================================================
--- projects/ppc64/sys/boot/ficl/Makefile Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/ficl/Makefile Tue Mar 9 17:26:50 2010 (r204915)
@@ -1,6 +1,6 @@
# $FreeBSD$
#
-.PATH: ${.CURDIR}/${MACHINE_ARCH:S/amd64/i386/}
+.PATH: ${.CURDIR}/${MACHINE_ARCH:S/amd64/i386/:S/powerpc64/powerpc/}
BASE_SRCS= dict.c ficl.c fileaccess.c float.c loader.c math64.c \
prefix.c search.c stack.c tools.c vm.c words.c
@@ -14,7 +14,7 @@ CFLAGS+= -mno-mmx -mno-3dnow -mno-sse -m
.if ${MACHINE_ARCH} == "i386"
CFLAGS+= -mno-sse3
.endif
-.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "arm"
+.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" || ${MACHINE_ARCH} == "arm"
CFLAGS+= -msoft-float
.endif
.if ${MACHINE} == "pc98"
@@ -45,7 +45,11 @@ SOFTWORDS= softcore.fr jhlocal.fr marker
CFLAGS+= -m32 -march=i386 -I.
.endif
-CFLAGS+= -I${.CURDIR} -I${.CURDIR}/${MACHINE_ARCH:S/amd64/i386/} \
+.if ${MACHINE_ARCH} == "powerpc64"
+CFLAGS+= -m32 -mcpu=powerpc -I.
+.endif
+
+CFLAGS+= -I${.CURDIR} -I${.CURDIR}/${MACHINE_ARCH:S/amd64/i386/:S/powerpc64/powerpc/} \
-I${.CURDIR}/../common
softcore.c: ${SOFTWORDS} softcore.awk
Modified: projects/ppc64/sys/boot/ofw/Makefile.inc
==============================================================================
--- projects/ppc64/sys/boot/ofw/Makefile.inc Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/ofw/Makefile.inc Tue Mar 9 17:26:50 2010 (r204915)
@@ -1,3 +1,8 @@
# $FreeBSD$
+.if ${MACHINE_ARCH} == "powerpc64"
+CFLAGS+= -m32 -mcpu=powerpc
+LDFLAGS+= -m elf32ppc
+.endif
+
.include "../Makefile.inc"
Modified: projects/ppc64/sys/boot/powerpc/Makefile.inc
==============================================================================
--- projects/ppc64/sys/boot/powerpc/Makefile.inc Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/powerpc/Makefile.inc Tue Mar 9 17:26:50 2010 (r204915)
@@ -2,8 +2,7 @@
.if ${MACHINE_ARCH} == "powerpc64"
CFLAGS+= -m32 -mcpu=powerpc
-LDFLAGS+= -m elf32-powerpc
-AFLAGS+= --32
+LDFLAGS+= -m elf32ppc
.endif
.include "../Makefile.inc"
Modified: projects/ppc64/sys/boot/powerpc/boot1.chrp/Makefile
==============================================================================
--- projects/ppc64/sys/boot/powerpc/boot1.chrp/Makefile Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/powerpc/boot1.chrp/Makefile Tue Mar 9 17:26:50 2010 (r204915)
@@ -13,7 +13,7 @@ SRCS= boot1.c ashldi3.c
INTERNALPROG=
NO_MAN=
-CFLAGS= -ffreestanding -msoft-float -Os -D_KERNEL \
+CFLAGS= -ffreestanding -msoft-float -Os \
-I${.CURDIR}/../../common -I${.CURDIR}/../../../
LDFLAGS=-nostdlib -static -N
Modified: projects/ppc64/sys/boot/powerpc/ofw/ldscript.powerpc
==============================================================================
--- projects/ppc64/sys/boot/powerpc/ofw/ldscript.powerpc Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/powerpc/ofw/ldscript.powerpc Tue Mar 9 17:26:50 2010 (r204915)
@@ -1,7 +1,7 @@
/* $FreeBSD$ */
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
-OUTPUT_ARCH(powerpc)
+OUTPUT_ARCH(powerpc:common)
ENTRY(_start)
SEARCH_DIR(/usr/lib);
/* Do we need any of these for elf?
Modified: projects/ppc64/sys/boot/powerpc/uboot/ldscript.powerpc
==============================================================================
--- projects/ppc64/sys/boot/powerpc/uboot/ldscript.powerpc Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/powerpc/uboot/ldscript.powerpc Tue Mar 9 17:26:50 2010 (r204915)
@@ -1,7 +1,7 @@
/* $FreeBSD$ */
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc")
-OUTPUT_ARCH(powerpc)
+OUTPUT_ARCH(powerpc:common)
ENTRY(_start)
SEARCH_DIR(/usr/lib);
PROVIDE (__stack = 0);
Modified: projects/ppc64/sys/boot/uboot/Makefile.inc
==============================================================================
--- projects/ppc64/sys/boot/uboot/Makefile.inc Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/boot/uboot/Makefile.inc Tue Mar 9 17:26:50 2010 (r204915)
@@ -1,3 +1,8 @@
# $FreeBSD$
+.if ${MACHINE_ARCH} == "powerpc64"
+CFLAGS+= -m32 -mcpu=powerpc
+LDFLAGS+= -m elf32ppc
+.endif
+
.include "../Makefile.inc"
Modified: projects/ppc64/sys/powerpc/include/reg.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/reg.h Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/powerpc/include/reg.h Tue Mar 9 17:26:50 2010 (r204915)
@@ -4,7 +4,7 @@
#ifndef _POWERPC_REG_H_
#define _POWERPC_REG_H_
-#if defined(_KERNEL) && !defined(KLD_MODULE)
+#if defined(_KERNEL) && !defined(KLD_MODULE) && !defined(_STANDALONE)
#include "opt_compat.h"
#endif
Modified: projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c
==============================================================================
--- projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c Tue Mar 9 17:16:45 2010 (r204914)
+++ projects/ppc64/sys/powerpc/powerpc/elf32_machdep.c Tue Mar 9 17:26:50 2010 (r204915)
@@ -107,7 +107,11 @@ static Elf32_Brandinfo freebsd_brand_inf
.emul_path = NULL,
.interp_path = "/libexec/ld-elf.so.1",
.sysvec = &elf32_freebsd_sysvec,
+#ifdef __powerpc64__
+ .interp_newpath = "/libexec/ld-elf32.so.1",
+#else
.interp_newpath = NULL,
+#endif
.brand_note = &elf32_freebsd_brandnote,
.flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE
};
More information about the svn-src-projects
mailing list