svn commit: r297435 - head: still problems for stage 3 when gcc 4.2.1 is avoided (powerpc64 self-hosted build)

From: Mark Millard <markmi_at_dsl-only.net>
Date: Thu, 31 Mar 2016 14:23:30 -0700
Recent changes have been trying to make things like powerpc64-xtoolchain-gcc/powerpc64-gcc work better for buildworld/buildkernel.

I happen to do this on a powerpc64 context so the "cross build" is actually self-hosted. No gcc 4.2.1 is present and clang 3.8.0 and before have code generation problems for powerpc64 and powerpc so I avoid it for system builds, including for stage 3. (Also, clang for powerpc64 does not support building libstand: no soft-float support.)

As of my last test (-r297465) buildworld's stage 3 failed from implicit use of /usr/local/include materials unless I renamed various files there. In part this is because of my using gcc49 tools for CC and for CXX while using the powerpc64-gcc tools only for XCC and XCXX.

Is there a standard or recommended way to configure things to avoid such issues? Should powerpc64-gcc use be forced for CC and CXX as well as XCC and XCXX?

Should there be xtoolchain usage notes about avoiding /usr/local/include name conflicts and/or about how to assign CC/CXX/XCC/XCXX?

As long as I use gcc49 tools for CC and CXX I still must do things like renaming files in /usr/local/include to avoid them interfering with system headers:

> # find /usr/local/include/ -name 'renamed*' -print
> /usr/local/include/renamed_dwarf.h
> /usr/local/include/atf-c/renamed_defs.h
> /usr/local/include/renamed_iconv.h
> /usr/local/include/renamed_libdwarf.h
> /usr/local/include/renamed_histedit.h

I use the likes of:

> # diff -rq /usr/include /usr/local/include | grep "^Files "

to find what to rename for the duration of the system builds.

An example of what happens without the renames is below but I first note the use of the name dwarf_errmsg in /usr/include vs. in /usr/local/include (shown after the .h file rename but the build was with the normal file name):

> # find /usr/include/ -exec grep dwarf_errmsg {} \; -print
> #define	dwarf_errmsg(error)	dwarf_errmsg_(&error)
> const char	*dwarf_errmsg_(Dwarf_Error *);
> /usr/include/libdwarf.h
> # find /usr/local/include/ -exec grep dwarf_errmsg {} \; -print

> char* dwarf_errmsg(Dwarf_Error    /*error*/);
> /usr/local/include/renamed_libdwarf.h
> #

So dwarf_errmsg is from /usr/local/include and dwarf_errmsg_ is from /usr/include .

The failure shows references to dwarf_errmsg instead of dwarf_errmsg_ --and dwarf_errmsg being undefined (dwarf_errno has similar issues):

> --------------------------------------------------------------
> >>> stage 3: cross tools
> --------------------------------------------------------------
> . . .
> --- ctfconvert.full ---
> /usr/local/bin/gcc49 -O2 -pipe -I/usr/src/cddl/usr.bin/ctfconvert/../../../sys/cddl/compat/opensolaris -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/compat/opensolaris/include -I/usr/src/cddl/usr.b
> in/ctfconvert/../../../cddl/contrib/opensolaris -I/usr/src/cddl/usr.bin/ctfconvert/../../../sys/cddl/contrib/opensolaris -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/head -I/us
> r/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/common -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt -I/usr/src/cddl/usr.bin/ctfconvert/.
> ./../../sys/cddl/contrib/opensolaris/uts/common -DNEED_SOLARIS_BOOLEAN -g -std=gnu99 -I/usr/obj/xtoolchain/powerpc.powerpc64/usr/src/tmp/legacy/usr/include  -static -L/usr/obj/xtoolchain/powerpc.power
> pc64/usr/src/tmp/legacy/usr/lib -o ctfconvert.full alist.o ctf.o ctfconvert.o dwarf.o fixup_tdescs.o hash.o iidesc.o input.o list.o memory.o merge.o output.o st_parse.o stabs.o stack.o strtab.o symbol
> .o tdata.o traverse.o util.o   -ldwarf  -lelf  -lelf  -lz  -lpthread -legacy
> dwarf.o: In function `die_off':
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:270: undefined reference to `dwarf_errmsg'
> dwarf.o: In function `die_sibling':
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:288: undefined reference to `dwarf_errmsg'
> dwarf.o: In function `die_child':
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:305: undefined reference to `dwarf_errmsg'
> dwarf.o: In function `die_tag':
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:319: undefined reference to `dwarf_errmsg'
> dwarf.o: In function `die_unsigned':
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:370: undefined reference to `dwarf_errmsg'
> dwarf.o:/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:418: more undefined references to `dwarf_errmsg' follow
> dwarf.o: In function `dw_read':
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:1963: undefined reference to `dwarf_errno'
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:1971: undefined reference to `dwarf_errmsg'
> /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c:1977: undefined reference to `dwarf_errmsg'
> collect2: error: ld returned 1 exit status
> *** [ctfconvert.full] Error code 1



[Note: I have been able to remove some of my local workarounds as things have been cleaned up recently. This area is just not one of them. Getting powerpc64-gcc installed on a powerpc64 environment is one of those things needing work arounds. amd64 building powerpc64-gcc has no such issues (true cross compiler context: TARGET_ARCH=powerpc64 not matching the host OS).]



Context details:

> # svnlite info /usr/src/
> Path: /usr/src
> Working Copy Root Path: /usr/src
> URL: https://svn0.us-west.freebsd.org/base/head
> Relative URL: ^/head
> Repository Root: https://svn0.us-west.freebsd.org/base
> Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
> Revision: 297465
> Node Kind: directory
> Schedule: normal
> Last Changed Author: trasz
> Last Changed Rev: 297465
> Last Changed Date: 2016-03-31 10:32:28 -0700 (Thu, 31 Mar 2016)

> # freesd-version -ku; uname -aKU
> su: freesd-version: not found
> FreeBSD FBSDG5C0 11.0-CURRENT FreeBSD 11.0-CURRENT #24 r297048M: Sat Mar 19 06:12:57 PDT 2016     root_at_FBSDG5C0:/usr/obj/xtoolchain/powerpc.powerpc64/usr/src/sys/GENERIC64vtsc-NODEBUG  powerpc 1100103 1100103


> Script started on Thu Mar 31 11:11:06 2016
> Command: env __MAKE_CONF=/root/src.configs/make.conf SRC_ENV_CONF=/root/src.configs/src.conf.powerpc64-xtoolchain.powerpc64-host MAKEOBJDIRPREFIX=/usr/obj/xtoolchain/powerpc.powerpc64 make -j 5 buildworld buildkernel


The make.conf is empty.

The src.conf is:

> TO_TYPE=powerpc64
> TOOLS_TO_TYPE=${TO_TYPE}
> FROM_TYPE=powerpc64
> TOOLS_FROM_TYPE=${FROM_TYPE}
> VERSION_CONTEXT=11.0
> #
> KERNCONF=GENERIC64vtsc-NODEBUG
> TARGET=powerpc
> .if ${.MAKE.LEVEL} == 0
> TARGET_ARCH=${TO_TYPE}
> .export TARGET_ARCH
> .endif
> #
> WITHOUT_CROSS_COMPILER=
> #
> WITH_FAST_DEPEND=
> WITH_LIBCPLUSPLUS=
> WITH_BOOT=
> WITH_CLANG=
> WITH_CLANG_IS_CC=
> WITH_CLANG_FULL=
> WITH_LLDB=
> #
> # LIB32 builds but does not work via gcc variants last I tried (crtbeginS code problem)
> WITHOUT_LIB32=
> WITHOUT_GCC=
> WITHOUT_GNUCXX=
> #
> NO_WERROR=
> MALLOC_PRODUCTION=
> #
> WITH_DEBUG_FILES=
> #
> # TOOLS_TO_TYPE based on ${TO_TYPE}-xtoolchain-gcc related bintutils...
> #
> CROSS_TOOLCHAIN=${TO_TYPE}-gcc
> X_COMPILER_TYPE=gcc
> CROSS_BINUTILS_PREFIX=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/
> #CFLAGS+=-v
> .if ${.MAKE.LEVEL} == 0
> XCC=/usr/local/bin/${TOOLS_TO_TYPE}-portbld-freebsd${VERSION_CONTEXT}-gcc
> XCXX=/usr/local/bin/${TOOLS_TO_TYPE}-portbld-freebsd${VERSION_CONTEXT}-g++
> XCPP=/usr/local/bin/${TOOLS_TO_TYPE}-portbld-freebsd${VERSION_CONTEXT}-cpp
> .export XCC
> .export XCXX
> .export XCPP
> XAS=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/as
> XAR=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ar
> XLD=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ld
> XNM=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/nm
> XOBJCOPY=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objcopy
> XOBJDUMP=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/objdump
> XRANLIB=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/ranlib
> XSIZE=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/size
> #NO-SUCH: XSTRINGS=/usr/local/${TOOLS_TO_TYPE}-freebsd/bin/strings
> XSTRINGS=/usr/local/bin/${TOOLS_TO_TYPE}-freebsd-strings
> .export XAS
> .export XAR
> .export XLD
> .export XNM
> .export XOBJCOPY
> .export XOBJDUMP
> .export XRANLIB
> .export XSIZE
> .export XSTRINGS
> .endif
> #
> #
> # From gcc49
> #
> .if ${.MAKE.LEVEL} == 0
> CC=/usr/local/bin/gcc49
> CXX=/usr/local/bin/g++49
> CPP=/usr/local/bin/cpp49
> .export CC
> .export CXX
> .export CPP
> .endif
> #
> #
> # TOOLS_FROM_TYPE's appropriate binutils...
> #
> .if ${.MAKE.LEVEL} == 0
> AS=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/as
> AR=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/ar
> LD=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/ld
> NM=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/nm
> OBJCOPY=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/objcopy
> OBJDUMP=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/objdump
> RANLIB=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/ranlib
> SIZE=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/size
> #NO-SUCH: STRINGS=/usr/local/${TOOLS_FROM_TYPE}-portbld-freebsd${VERSION_CONTEXT}/bin/strings
> STRINGS=/usr/local/bin/strings
> .export AS
> .export AR
> .export LD
> .export NM
> .export OBJCOPY
> .export OBJDUMP
> .export RANLIB
> .export SIZE
> .export STRINGS
> .endif



===
Mark Millard
markmi at dsl-only.net
Received on Thu Mar 31 2016 - 19:30:12 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:03 UTC