Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Feb 2015 01:50:32 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        sbruno@freebsd.org
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: -current static linking or overlinking ...
Message-ID:  <20150216235032.GP34251@kib.kiev.ua>
In-Reply-To: <54E25342.9060308@ignoranthack.me>
References:  <54E25342.9060308@ignoranthack.me>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150216235032.GP34251>