-current static linking or overlinking ...

Konstantin Belousov kostikbel at gmail.com
Tue Feb 17 08:55:17 UTC 2015


On Mon, Feb 16, 2015 at 06:28:44PM -0800, Sean Bruno wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> 
> On 02/16/15 15:50, Konstantin Belousov wrote:
> > On Mon, Feb 16, 2015 at 12:29:54PM -0800, Sean Bruno wrote:
> >> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512
> >> 
> >> Building the qemu bsd-user static targets on head seem to be 
> >> "overlinking" or something that is pulling in multiple copies of 
> >> symbols.  I'm not confident in my terminology here so I could be
> >> using the wrong terms.
> >> 
> >> This is a recent regression (last couple of months).
> >> 
> >> e.g. checkout qemu source, configure with: ./configure
> >> --target-list="i386-bsd-user" --static
> >> 
> >> and build with gmake,  You'll see a bunch of this at random
> >> places where things are linked statically.  I assume "something"
> >> has changed in the toolchain that requires a change to the QEMU
> >> build?
> >> 
> >> CC    stubs/vm-stop.o CC    stubs/vmstate.o CC    stubs/cpus.o CC
> >> stubs/kvm.o CC    stubs/qmp_pc_dimm_device_list.o AR
> >> libqemustub.a LINK  qemu-ga /usr/lib/libpthread.a(thr_spec.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_sig.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_init.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_rtld.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_fork.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_create.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_exit.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here /usr/lib/libpthread.a(thr_error.o):
> >> warning: multiple common of `__cleanup' /usr/lib/crt1.o: warning:
> >> previous common is here
> > 
> > This should fix it.  You must rebuild the world to test.
> > 
> > diff --git a/lib/libc/include/libc_private.h
> > b/lib/libc/include/libc_private.h index 71fc8df..e4bf4a6 100644 ---
> > a/lib/libc/include/libc_private.h +++
> > b/lib/libc/include/libc_private.h @@ -271,7 +271,7 @@ void
> > _malloc_first_thread(void); /* * Function to clean up streams,
> > called from abort() and exit(). */ -void (*__cleanup)(void)
> > __hidden; +extern void (*__cleanup)(void) __hidden;
> > 
> > /* * Get kern.osreldate to detect ABI revisions.  Explicitly
> > 
> 
> 
> This patch eliminates the libpthread.a warnings, which is the majority
> of the warnings.  I believe I am now dealing with the previously
> existing warning messages now.
> 
> There are still a few left from libc.a/crt1.o when building static.
> GEN   trace/generated-helpers.c
>   CC    arm-bsd-user/trace/generated-helpers.o
>   LINK  arm-bsd-user/qemu-arm
> /usr/lib/libc.a(exit.o): warning: multiple common of `__cleanup'
> /usr/lib/crt1.o: warning: previous common is here
>   GEN   aarch64-bsd-user/config-target.h
>   CC    aarch64-bsd-user/exec.o
> 
I really do not see how is this possible except inconsistent buildworld or
installworld.

The patch is committed as r278889.


More information about the freebsd-hackers mailing list