Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Jan 2015 23:01:30 -0500 (EST)
From:      Daniel Eischen <deischen@freebsd.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        threads@freebsd.org, Jilles Tjoelker <jilles@stack.nl>, arch@freebsd.org
Subject:   Re: Fixing dlopen("libpthread.so")
Message-ID:  <Pine.GSO.4.64.1501062256540.12396@sea.ntplx.net>
In-Reply-To: <20150107032941.GJ42409@kib.kiev.ua>
References:  <20141226165337.GJ1754@kib.kiev.ua> <20150103212837.GC46373@stack.nl> <20150104114600.GC42409@kib.kiev.ua> <20150104182026.GA61250@stack.nl> <20150105023708.GD42409@kib.kiev.ua> <20150106205046.GA24971@stack.nl> <20150107032941.GJ42409@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 7 Jan 2015, Konstantin Belousov wrote:

> On Tue, Jan 06, 2015 at 09:50:46PM +0100, Jilles Tjoelker wrote:
>> On Mon, Jan 05, 2015 at 04:37:08AM +0200, Konstantin Belousov wrote:
>>> Next natural question is about the __error calls through PLT in the
>>> .cerror asm. Before the work was committed, libthr interposed __error,
>>> which was required for correct operation. Now, we need __error exported,
>>> but do we need support its interposing ? This is an implementation
>>> detail for errno, I do not see any loss from not allowing to override
>>> errno location.
>>
>> Indeed, there is no need to allow interposing __error (as with many
>> libc-internal calls to its exported symbols). Additionally, the current
>> namespace.h mechanism could be used to redirect __error calls from C
>> code.
>>
>> Glibc uses macro trickery with the asm labels compiler feature, making
>> libc code see things like
>>   int *__error(void) asm("__hidden__error");
>> and defining the hidden alias somewhere. This also works for
>> compiler-generated calls like to memcpy(). I'm not sure whether it is a
>> good idea to add this extra trickery and depend on the compiler feature.
> I might look at this after the current change is committed.

I don't quite follow all the above about __error(), but non-C
programs need to interface to an __error() that works regardless
of threading or not.

--
DE



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