Date: Tue, 08 Jun 2004 00:40:46 -0700 From: Sean McNeil <sean@mcneil.com> To: Daniel Eischen <eischen@vigrid.com> Cc: freebsd-threads@freebsd.org Subject: Re: weak implementation of threads has problems - kse fix attached Message-ID: <1086680446.1060.3.camel@server.mcneil.com> In-Reply-To: <Pine.GSO.4.10.10406080126400.27228-100000@pcnet5.pcnet.com> References: <Pine.GSO.4.10.10406080126400.27228-100000@pcnet5.pcnet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 2004-06-07 at 22:34, Daniel Eischen wrote: > On Tue, 8 Jun 2004, John Birrell wrote: > > > [ cross-post lists cut back, ports added 8-) ] > > > > On Mon, Jun 07, 2004 at 11:48:45PM -0500, Dan Nelson wrote: > > > A good addition to bsd.port.mk, right next to the "possible network > > > server" etc checks, might be to run ldd on all installed shared > > > libraries and print a warning if any threads libraries show up. There > > > are a huge number of ports that install shlibs linked to libpthreads. > > > > Good idea. > > Just picking a message at random to reply to... > > In case anyone wonders why we don't use strong references, I chose to > mimic what Solaris does: > > bash-2.05$ nm /lib/libpthread.so.1 | grep pthread_mutex_lock > 0000000000003c80 T _pthread_mutex_lock > 0000000000003c80 W pthread_mutex_lock > > bash-2.05$ nm /lib/libc.so.1 | grep pthread_mutex_lock > 0000000000096c38 W _pthread_mutex_lock > 0000000000096c38 W pthread_mutex_lock > > It is also easy to provide your own version of pthread_foo() without > having any strong references override it. OK, that is what I was wondering. In that case, you have failed to mimic Solaris: [sean@wrsparc sean]$ uname -a SunOS wrsparc.mcneil.com 5.7 Generic_106541-12 sun4u sparc SUNW,Ultra-5_10 [sean@wrsparc sean]$ nm /lib/libpthread.so.1 | grep select [201] | 21328| 8|FUNC |GLOB |0 |8 |select [sean@wrsparc sean]$ nm /lib/libc.so.1 | grep select [213] | 320732| 1420|FUNC |LOCL |0 |12 |_libc_select [4534] | 320732| 1420|FUNC |GLOB |0 |12 |_select [3556] | 320732| 1420|FUNC |WEAK |0 |12 |select [1385] | 0| 0|FILE |LOCL |0 |ABS |select.c [4404] | 322152| 1920|FUNC |GLOB |0 |12 |select_large_fdset [1387] | 0| 0|FILE |LOCL |0 |ABS |select_large_fdset.c Same thing with open or any of the other libc functions. That is why Solaris works correctly and FreeBSD does not.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1086680446.1060.3.camel>