- j 6 buildworld: -lcapsicum use before libcapsicum.so.0 /usr/obj/usr/src/tmp/lib/ install

Mark Millard markmi at dsl-only.net
Sun Nov 29 20:43:04 UTC 2015


This is a -j 6 buildworld context.

In the following sequence the -lcapsicum use when linking libcasper.so.0.full does not use /usr/obj/usr/src/tmp/lib/libcapsicum.so because that file and the link to it at /usr/obj/usr/src/tmp/usr/lib/libcapsicum.so are only created (installed) later. (See the sequence later below.)

This can lead to use of /lib/libcapsicum.so instead if it is found, which for my context it is. In my case of updating from 11.0-CURRENT from back on 2015-Apr-18 /lib/libcapsicum.so use ends up complaining about undefined references, such as to nvlist_getf_binary that existed back then but do not now. That is what exposed the time-order problem.


> --- all_subdir_libcasper ---
> /usr/local/bin/powerpc64-portbld-freebsd11.0-gcc  -L/usr/obj/usr/src/tmp/usr/lib/. -L/usr/obj/usr/src/lib/libc++/. -L/usr/lib/. -fstack-protector-strong -shared -Wl,-x -Wl,--fatal-warnings -Wl,--warn-shared-textrel  -o libcasper.so.0.full -Wl,-soname,libcasper.so.0  `NM='/usr/local/powerpc64-freebsd/bin/nm' NMFLAGS='' lorder libcasper.So | tsort -q`  -lcapsicum  -lnv  -lpjdlog
. . .
> ===> lib/libcapsicum (install)
> --- _libinstall ---
> --- _INCSINS ---
> --- _libinstall ---
> sh /usr/src/tools/install.sh -C -o root -g wheel -m 444   libcapsicum.a /usr/obj/usr/src/tmp/usr/lib/
> --- _INCSINS ---
> sh /usr/src/tools/install.sh -C -o root -g wheel -m 444  /usr/src/lib/libcapsicum/libcapsicum.h /usr/src/lib/libcapsicum/libcapsicum_dns.h /usr/src/lib/libcapsicum/libcapsicum_grp.h /usr/src/lib/libcapsicum/libcapsicum_pwd.h /usr/src/lib/libcapsicum/libcapsicum_random.h /usr/src/lib/libcapsicum/libcapsicum_service.h /usr/src/lib/libcapsicum/libcapsicum_sysctl.h /usr/obj/usr/src/tmp/usr/include/
> --- _libinstall ---
> sh /usr/src/tools/install.sh -s -o root -g wheel -m 444     libcapsicum.so.0 /usr/obj/usr/src/tmp/lib/
> sh /usr/src/tools/install.sh -T debug -o root -g wheel -m 444    libcapsicum.so.0.debug /usr/obj/usr/src/tmp/usr/lib/debug/lib/
> sh /usr/src/tools/install.sh -l rs /usr/obj/usr/src/tmp/lib/libcapsicum.so.0  /usr/obj/usr/src/tmp/usr/lib/libcapsicum.so

The -L's ending with /.'s are from my /etc/src.conf . They are associated with trying to self-build on a powerpc64 PowerMac using only powerpc64-xtoolchain-gcc's powerpc64-gcc WITH_LIBCPLUSPLUS: powerpc64-gcc is acting as both the host toolchain and the CROSS_TOOLCHAIN. No 4.2.1 gcc is present. I know this is not a usual way of doing things. There may be better ways. But if I manage to expose some missing dependency tracking some good came of it.

The make command was:

> make -j 6 WITH_FAST_DEPEND= CROSS_TOOLCHAIN=powerpc64-gcc WITH_LIBCPLUSPLUS= WITHOUT_CLANG_BOOTSTRAP= WITH_CLANG= WITH_CLANG_IS_CC= WITH_LLDB= WITHOUT_GCC_BOOTSTRAP= WITHOUT_GCC= WITHOUT_GNUCXX= WITHOUT_BOOT= WITHOUT_LIB32= buildworld buildkernel KERNCONF=GENERIC64vtsc-NODEBUG TARGET=powerpc TARGET_ARCH=powerpc64


Context details if you care:

> # freebsd-version -ku; uname -aKU
> 11.0-CURRENT
> 11.0-CURRENT
> FreeBSD FBSDG5C0 11.0-CURRENT FreeBSD 11.0-CURRENT #12 r281630M: Sat Apr 18 01:15:13 PDT 2015     root at FBSDG5C0:/usr/obj/usr/src/sys/GENERIC64vtsc-NODEBUG  powerpc 1100070 1100070

I am attempting an update after having been away from the PowerMacs for months.

> # 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: 291443
> Node Kind: directory
> Schedule: normal
> Last Changed Author: nwhitehorn
> Last Changed Rev: 291442
> Last Changed Date: 2015-11-28 23:16:08 -0800 (Sat, 28 Nov 2015)

> # more /etc/src.conf
> NO_WERROR=
> WITH_DEBUG=
> WITH_DEBUG_FILES=
> MALLOC_PRODUCTION=
> CC=/usr/local/bin/powerpc64-portbld-freebsd11.0-gcc
> CXX=/usr/local/bin/powerpc64-portbld-freebsd11.0-g++
> CPP=/usr/local/bin/powerpc64-portbld-freebsd11.0-cpp
> CROSS_BINUTILS_PREFIX=/usr/local/powerpc64-freebsd/bin/
> X_COMPILER_TYPE=gcc
> DEPFLAGS+=-isystem /usr/obj/usr/src/tmp/usr/include/. -I/usr/obj/usr/src/tmp/usr/include/c++/v1/. -I/usr/include/c++/v1/.
> L/usr/obj/usr/src/tmp/usr/lib/lib32/.
> CFLAGS+=-isystem /usr/obj/usr/src/tmp/usr/include/. -L/usr/obj/usr/src/tmp/usr/lib/. -L/usr/obj/usr/src/tmp/lib/.
> LDFLAGS+=-L/usr/obj/usr/src/tmp/usr/lib/. -L/usr/obj/usr/src/tmp/lib/.
> CXXFLAGS+=-isystem /usr/obj/usr/src/tmp/usr/include/. -I/usr/obj/usr/src/tmp/usr/include/c++/v1/. -std=gnu++11 -L/usr/obj/usr/src/lib/libc++/.
> LDFLAGS+=-L/usr/obj/usr/src/lib/libc++/.
> CXXFLAGS+=-I/usr/include/c++/v1/. -std=gnu++11 -L/usr/lib/.
> LDFLAGS+=-L/usr/lib/.

> # svnlite info /usr/ports/
> Path: /usr/ports
> Working Copy Root Path: /usr/ports
> URL: https://svn0.us-west.freebsd.org/ports/head
> Relative URL: ^/head
> Repository Root: https://svn0.us-west.freebsd.org/ports
> Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
> Revision: 402562
> Node Kind: directory
> Schedule: normal
> Last Changed Author: rene
> Last Changed Rev: 402562
> Last Changed Date: 2015-11-28 15:08:03 -0800 (Sat, 28 Nov 2015)

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




More information about the freebsd-toolchain mailing list