Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Nov 2009 17:11:13 -0500
From:      Joe Marcus Clarke <marcus@FreeBSD.org>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        "threads@freebsd.org" <threads@FreeBSD.org>
Subject:   Re: [PATCH] Add missing pthread_condattr_{init,destroy} stubs to libc
Message-ID:  <1259359873.1608.48.camel@shumai.marcuscom.com>
In-Reply-To: <20091127220706.GJ2368@deviant.kiev.zoral.com.ua>
References:  <1259298918.1608.19.camel@shumai.marcuscom.com> <20091127131242.GA2368@deviant.kiev.zoral.com.ua> <1259349248.1608.36.camel@shumai.marcuscom.com> <4AF1E295-0524-4C39-94CD-9A12D574C64D@vigrid.com> <20091127213046.GI2368@deviant.kiev.zoral.com.ua> <1259358800.1608.46.camel@shumai.marcuscom.com> <20091127220706.GJ2368@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

--=-DYKfFuZ9SjIvjz9I/gAv
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

On Sat, 2009-11-28 at 00:07 +0200, Kostik Belousov wrote:
> On Fri, Nov 27, 2009 at 04:53:20PM -0500, Joe Marcus Clarke wrote:
> > On Fri, 2009-11-27 at 23:30 +0200, Kostik Belousov wrote:
> > > On Fri, Nov 27, 2009 at 04:19:38PM -0500, Daniel Eischen wrote:
> > > >=20
> > > > On Nov 27, 2009, at 2:14 PM, Joe Marcus Clarke <marcus@freebsd.org>=
 =20
> > > > wrote:
> > > >=20
> > > > >On Fri, 2009-11-27 at 15:12 +0200, Kostik Belousov wrote:
> > > > >>On Fri, Nov 27, 2009 at 12:15:18AM -0500, Joe Marcus Clarke wrote=
:
> > > > >>>I would like permission to commit this patch which adds missing
> > > > >>>pthread_condattr_{init,destroy} symbols to libc.  I think I did =
the
> > > > >>>symbol addition correctly (and it seems to work).  Without this,=
 the
> > > > >>>weak symbols added in the libpthread-stubs port conflict with =20
> > > > >>>those in
> > > > >>>libthr, and applications with use these symbols can crash.
> > > > >>>
> > > > >>>I have temporarily hacked libpthread-stubs to fix this, but I re=
ally
> > > > >>>feel these stubs should be added to libc.  I've also copied kib =
as =20
> > > > >>>he
> > > > >>>has been kind enough to review my work in the past.  Thanks.
> > > > >>>
> > > > >>>http://www.marcuscom.com/downloads/stubs.diff
> > > > >>
> > > > >>It is FBSD_1.2 version that we use for symbols added after HEAD =20
> > > > >>become
> > > > >>CURRENT-9.
> > > > >
> > > > >Done.
> > > >=20
> > > > I don't think the symbols belong in FBSD_1.2.  They already exist i=
n =20
> > > > libthr in a previous namespace.  If you use FBSD_1.2, then you =20
> > > > probably need to bump them in libthr and libc_r, and add compatible=
 =20
> > > > symbols (no problem there since there are no differences) for the =20
> > > > previous versions.
> > > Oh, yes.
> > >=20
> > > >=20
> > > > Still not sure why libc needs all libpthread stubs.  Shouldn't be =20
> > > > necessary.
> > >=20
> > > The privately discussed plan for 9.0 is to have libthr merged into
> > > libc, and have libpthread and libthr as only filter object against li=
bc
> > > providing pthread_* and related symbols.
> > >=20
> > > This would eliminate the need for pthread stubs and solve the issues
> > > with (wrongly built) binaries that do not link to libthr but dlopen()
> > > libraries that are linked with it.
> >=20
> > Yeah, I think that would be a great overall solution.  However, in this
> > case, the binaries in question ARE linked with -pthread.  The problem
> > can be easily seen by taking this C program:
> >=20
> > #include <sys/time.h>
> > #include <pthread.h>
> > #include <string.h>
> >=20
> > int
> > main(void) {
> >         pthread_condattr_t attr;
> >=20
> >         pthread_condattr_init (&attr);
> >         pthread_condattr_setclock (&attr, CLOCK_MONOTONIC);
> >=20
> >         pthread_condattr_destroy (&attr);
> >=20
> >         return 0;
> > }
> >=20
> > And compiling it as:
> >=20
> > cc -o xxx -L/usr/local/lib -lpthread-stubs -pthread xxx.c
> >=20
> > You will need devel/libpthread-stubs (version 0.3) installed.  When you
> > run it, it will segfault.  If you then rebuild libc and libthr with my
> > stubs.diff patch, then rebuild libpthread-stubs, the problem will go
> > away.
>=20
> I see. What happen there is that both libpthread-stubs and libthr
> provide _weak_ symbols pthread_condattr_destroy and pthread_condattr_init=
.
> Actually, these two symbols are the only exported symbols from stubs
> library. Due to specified library order, rtld for xxx resolves these
> symbols from stubs, not from libthr. But pthread_condattr_setclock
> is only exported weak from libthr, and it gets used.
>=20
> This ends up supplying initialized attributes to pthread_condattr_setcloc=
k.
>=20
> Your patch makes libc provide these two weak symbols, and then
> stubs seems to become empty library.

100% correct all around.  In fact, if you read the manifesto for
libpthread-stubs, it is designed to be an empty library on systems which
provide all of the necessary stubs.  In that case, it just provides its
pkg-config file.

I didn't see a better way of fixing this.  I'm still fuzzy on how to do
the correct symbol map dance for libthr/libc_r.  Do you know of any
example symbols which had to be updated in this fashion?

Joe

--=20
Joe Marcus Clarke
FreeBSD GNOME Team      ::      gnome@FreeBSD.org
FreeNode / #freebsd-gnome
http://www.FreeBSD.org/gnome

--=-DYKfFuZ9SjIvjz9I/gAv
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)

iEYEABECAAYFAksQTn8ACgkQb2iPiv4Uz4fbOACfYYlbLQvcMJAYVq8YvfWAKSv0
9EYAn1vDNuOZLr7ytI68Hg6k+j0nzk02
=cwF7
-----END PGP SIGNATURE-----

--=-DYKfFuZ9SjIvjz9I/gAv--




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