From owner-freebsd-threads@FreeBSD.ORG Fri Nov 27 22:07:12 2009 Return-Path: Delivered-To: threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2E735106566C; Fri, 27 Nov 2009 22:07:12 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.zoral.com.ua (skuns.zoral.com.ua [91.193.166.194]) by mx1.freebsd.org (Postfix) with ESMTP id 96A8F8FC1D; Fri, 27 Nov 2009 22:07:11 +0000 (UTC) Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id nARM77wt086127 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 28 Nov 2009 00:07:07 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.3/8.14.3) with ESMTP id nARM77fR056166; Sat, 28 Nov 2009 00:07:07 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.3/8.14.3/Submit) id nARM76wp056165; Sat, 28 Nov 2009 00:07:06 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Sat, 28 Nov 2009 00:07:06 +0200 From: Kostik Belousov To: Joe Marcus Clarke Message-ID: <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> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="HcccYpVZDxQ8hzPO" Content-Disposition: inline In-Reply-To: <1259358800.1608.46.camel@shumai.marcuscom.com> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: clamav-milter 0.95.2 at skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua Cc: "threads@freebsd.org" Subject: Re: [PATCH] Add missing pthread_condattr_{init, destroy} stubs to libc X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Nov 2009 22:07:12 -0000 --HcccYpVZDxQ8hzPO Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable 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 = =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, t= he > > > >>>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 real= ly > > > >>>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 in = =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 libc > > 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 > #include > #include >=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. 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. This ends up supplying initialized attributes to pthread_condattr_setclock. Your patch makes libc provide these two weak symbols, and then stubs seems to become empty library. --HcccYpVZDxQ8hzPO Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEARECAAYFAksQTYoACgkQC3+MBN1Mb4gMmQCg1kvePXHh5mKeMRJ5vfK5GtRJ xZ0AnA0BelRxWv83HkObLc05RU47dLSa =q5am -----END PGP SIGNATURE----- --HcccYpVZDxQ8hzPO--