Date: Tue, 9 Mar 2010 17:26:51 +0000 (UTC) From: Nathan Whitehorn <nwhitehorn@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: 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... Message-ID: <201003091726.o29HQpwU080358@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003091726.o29HQpwU080358>