svn commit: r439595 - in head/devel: aarch64-gcc aarch64-none-elf-gcc amd64-gcc arm-none-eabi-gcc arm-none-eabi-gcc492 mips-gcc mips64-gcc powerpc64-gcc riscv64-gcc sparc64-gcc

Mark Millard markmi at dsl-only.net
Sat Apr 29 07:01:47 UTC 2017


On 2017-Apr-28, at 11:34 PM, Mark Linimon <linimon at lonesome.com> wrote:

On Fri, Apr 28, 2017 at 11:19:25PM -0700, Mark Millard wrote:
>> Your powerpc64 testing might be of gcc 4.2.1 and old libstdc++ as a
>> context. That would be different than my powerpc64 tests.
> 
> # uname -a
> FreeBSD 9133-1 11.0-STABLE FreeBSD 11.0-STABLE #17 r316443: Mon Apr  3 08:11:34 UTC 2017     linimon at srcjail:/usr/obj/powerpc.powerpc64/home/linimon/src/stable/11/sys/PACKAGE_NODE_powerpc64  powerpc
> # cc --version
> cc (GCC) 4.2.1 20070831 patched [FreeBSD]
> 
> Reasonably stock.  A few debug features are added, and so forth.

My powerpc64 context details (for
self-hosted buildworld buildkernel):

# uname -paKU
FreeBSD FBSDG5L 12.0-CURRENT FreeBSD 12.0-CURRENT  r317015M  powerpc powerpc64 1200028 1200028

# cc --version
FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
Target: powerpc64-unknown-freebsd12.0
Thread model: posix
InstalledDir: /usr/bin

# c++ --version
FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
Target: powerpc64-unknown-freebsd12.0
Thread model: posix
InstalledDir: /usr/bin

/usr/src/contrib/llvm/tools/lld/ELF/Target.cpp has
a required clang patch for this to work:

# svnlite diff /usr/src/contrib/llvm/
Index: /usr/src/contrib/llvm/tools/lld/ELF/Target.cpp
===================================================================
--- /usr/src/contrib/llvm/tools/lld/ELF/Target.cpp	(revision 317015)
+++ /usr/src/contrib/llvm/tools/lld/ELF/Target.cpp	(working copy)
@@ -1070,7 +1070,8 @@
 }
 
 PPC64TargetInfo::PPC64TargetInfo() {
-  PltRel = GotRel = R_PPC64_GLOB_DAT;
+  GotRel = R_PPC64_GLOB_DAT;
+  PltRel = R_PPC64_JMP_SLOT;
   RelativeRel = R_PPC64_RELATIVE;
   GotEntrySize = 8;
   GotPltEntrySize = 8;

# svnlite status /usr/src | sort
?       /usr/src/sys/amd64/conf/GENERIC-DBG
?       /usr/src/sys/amd64/conf/GENERIC-NODBG
?       /usr/src/sys/arm/conf/GENERIC-DBG
?       /usr/src/sys/arm/conf/GENERIC-NODBG
?       /usr/src/sys/arm64/conf/GENERIC-DBG
?       /usr/src/sys/arm64/conf/GENERIC-NODBG
?       /usr/src/sys/powerpc/conf/GENERIC64vtsc-DBG
?       /usr/src/sys/powerpc/conf/GENERIC64vtsc-NODBG
?       /usr/src/sys/powerpc/conf/GENERICvtsc-DBG
?       /usr/src/sys/powerpc/conf/GENERICvtsc-NODBG
M       /usr/src/contrib/llvm/tools/lld/ELF/Target.cpp
M       /usr/src/crypto/openssl/crypto/armcap.c
M       /usr/src/sys/arm/arm/gic.h
M       /usr/src/sys/boot/ofw/Makefile.inc
M       /usr/src/sys/boot/powerpc/Makefile.inc
M       /usr/src/sys/boot/powerpc/kboot/Makefile
M       /usr/src/sys/boot/uboot/Makefile.inc
M       /usr/src/sys/conf/kmod.mk
M       /usr/src/sys/ddb/db_main.c
M       /usr/src/sys/ddb/db_script.c
M       /usr/src/sys/powerpc/powerpc/exec_machdep.c

(The Makefile* and *.mk stuff has tended to be
from/for historical compatibility for using
system and xtoolchain-gcc based builds.
powerpc/powerpc/exec_machdep.c is for powerpc,
not powerpc64 as far as its changes go.)

# more /usr/src/sys/powerpc/conf/GENERIC64vtsc-NODBG
#
# GENERIC -- Custom configuration for the powerpc/powerpc64
#

include "GENERIC64"

ident   GENERIC64vtsc-NODGB

makeoptions     DEBUG=-g                # Build kernel with gdb(1) debug symbols

nooptions       PS3                     # Sony Playstation 3               HACK!!! to allow sc

options         KDB                     # Enable kernel debugger support

# For minimum debugger support (stable branch) use:
options         KDB_TRACE               # Print a stack trace for a panic
options         DDB                     # Enable the kernel debugger
options         GDB                     # HACK!!! ...

# Extra stuff:
#options        VERBOSE_SYSINIT         # Enable verbose sysinit messages
#options        BOOTVERBOSE=1
#options        BOOTHOWTO=RB_VERBOSE
#options        KTR
#options        KTR_MASK=KTR_TRAP
##options       KTR_CPUMASK=0xF
#options        KTR_VERBOSE

# HACK!!! to allow sc for 2560x1440 display on Radeon X1950 that vt historically mishandled during booting
device          sc
#device                 kbdmux          # HACK: already listed by vt
options         SC_OFWFB        # OFW frame buffer
options         SC_DFLT_FONT    # compile font in
makeoptions     SC_DFLT_FONT=cp437


# Disable any extra checking for. . .
nooptions       DEADLKRES               # Enable the deadlock resolver
nooptions       INVARIANTS              # Enable calls of extra sanity checking
nooptions       INVARIANT_SUPPORT       # Extra sanity checks of internal structures, required by INVARIANTS
nooptions       WITNESS                 # Enable checks to detect deadlocks and cycles
nooptions       WITNESS_SKIPSPIN        # Don't run witness on spinlocks for speed
nooptions       DIAGNOSTIC
nooptions       MALLOC_DEBUG_MAXZONES   # Separate malloc(9) zones

# more ~/src.configs/src.conf.powerpc64-clang_altbinutils-bootstrap.powerpc64-host
TO_TYPE=powerpc64
TOOLS_TO_TYPE=${TO_TYPE}
VERSION_CONTEXT=12.0
#
KERNCONF=GENERIC64vtsc-NODBG
TARGET=powerpc
.if ${.MAKE.LEVEL} == 0
TARGET_ARCH=${TO_TYPE}
.export TARGET_ARCH
.endif
#
#WITH_CROSS_COMPILER=
WITH_SYSTEM_COMPILER=
#
# llvm's libunwind assserts during its build
# and two of its .S files get tons of error reports.
# So avoid llvm's libunwind for now.
WITHOUT_LLVM_LIBUNWIND=
WITH_LIBCPLUSPLUS=
WITHOUT_BINUTILS_BOOTSTRAP=
WITH_ELFTOOLCHAIN_BOOTSTRAP=
#WITH_CLANG_BOOTSTRAP=
WITH_CLANG=
WITH_CLANG_IS_CC=
WITH_CLANG_FULL=
WITH_CLANG_EXTRAS=
WITHOUT_LLD_BOOTSTRAP=
WITH_LLD=
WITHOUT_LLD_IS_LD=
WITH_LLDB=
#
WITH_BOOT=
WITH_LIB32=
#
WITHOUT_GCC_BOOTSTRAP=
WITHOUT_GCC=
WITHOUT_GCC_IS_CC=
WITHOUT_GNUCXX=
#
NO_WERROR=
#
# Avoid converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
# and such from blocking the build.
WERROR=
#
MALLOC_PRODUCTION=
#
WITH_REPRODUCIBLE_BUILD=
WITH_DEBUG_FILES=
#
#
# For TO (so-called "cross") stages . . .
# So-called-cross via ${TO_TYPE}-xtoolchain-gcc/${TO_TYPE}-gcc. . .
# TOOLS_TO_TYPE based on ${TO_TYPE}-xtoolchain-gcc related binutils. . .
#
#
# From based on clang (via system). . .
#
CROSS_BINUTILS_PREFIX=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/
.if ${.MAKE.LEVEL} == 0
#
CFLAGS.clang+= -B${CROSS_BINUTILS_PREFIX}
CXXFLAGS.clang+= -B${CROSS_BINUTILS_PREFIX}
.export CFLAGS.clang
.export CXXFLAGS.clang
AS=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/as
AR=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ar
NM=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/nm
OBJCOPY=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objcopy
OBJDUMP=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objdump
RANLIB=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ranlib
XSIZE=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/size
#NO-SUCH: STRINGS=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/strings
STRINGS=/usr/local/bin/${TOOLS_TO_TYPE}-freebsd-strings
.export AS
.export AR
.export NM
.export OBJCOPY
.export OBJDUMP
.export RANLIB
.export SIZE
.export STRINGS
LD=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ld
.export LD
.endif

# more ~/sys_build_scripts.powerpc64-host/make_powerpc64vtsc_nodebug_clang_altbinutils-powerpc64-host                                                                                            kldload -n filemon && \
script ~/sys_typescripts/typescript_make_powerpc64vtsc_nodebug_clang_altbinutils-powerpc64-host-$(date +%Y-%m-%d:%H:%M:%S) \
env __MAKE_CONF="/root/src.configs/make.conf" \
SRCCONF="/dev/null" SRC_ENV_CONF="/root/src.configs/src.conf.powerpc64-clang_altbinutils-bootstrap.powerpc64-host" \
WITH_META_MODE=yes \
MAKEOBJDIRPREFIX="/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64" \
make $*


(I also cross build from amd64 a lot.)

===
Mark Millard
markmi at dsl-only.net



More information about the svn-ports-head mailing list