libpthread shared library version number
Wesley Morgan
morganw at chemikals.org
Thu Nov 2 18:19:31 UTC 2006
On Thu, 2 Nov 2006, Daniel Eischen wrote:
> On Thu, 2 Nov 2006, Alexander Kabaev wrote:
>
>> On Thu, 2 Nov 2006 08:07:03 -0500 (EST)
>> Wesley Morgan <morganw at chemikals.org> wrote:
>>
>>
>>> I encountered (and reported) weird problems with threaded apps when
>>> symbol versioning was enabled. The new csup would fail in areas it
>>> shouldn't have failed and gdb made it look like some weird stuff was
>>> happening concurrently. Turning off symbol versioning solved the
>>> problem.
>>>
>>>
>> Could you please report it again? Searching for your name in my inbox
>> returns nothing. Your mail either never reached it or you sent the
>> report elsewhere and it escaped my attention.
>
> If you are using libthr or libc_r with symbol versioning, then
> I don't think it will work correctly without rebuilding world
> and all ports. As an interim solution for testing symbol versioning
> without require rebuilding everything under the sun, I added
> compatability hacks for symbols in libc that also exist in
> libpthread. See lines 62-95 in src/lib/libpthread/thr/thr_private.h.
> This hack should be disabled and removed after bumping shared
> libraries and enabling symbol versioning.
My original report was here:
http://docs.freebsd.org/cgi/getmsg.cgi?fetch=353076+0+archive/2006/freebsd-current/20060806.freebsd-current
I swapped a few e-mails with Maxime Henrion, but the gist of things was
that after enabling symbol versioning, I immediately rebuilt everything --
world, ports, kernel. The random crashes I experienced were most apparent
with two applications, csup and games/uqm from ports. Xorg would also
crash every now and then... An example of what gdb showed me is:
Updating collection ports-all/cvs
Checkout ports/devel/ccrtp/Makefile
Error set: No such file or directory
Updater failed: Cannot create directories leading to
"/usr/ports/devel/ccrtp/Makefile": Unknown error: 0
Breakpoint 1, mkdirhier (path=0x8c40180 "/usr/ports/devel/ccrtp",
mask=18) at misc.c:293
293 errno = 0;
(gdb) n
294 if (access(path, F_OK) == 0) {
(gdb)
298 perror("Error set");
(gdb)
Error set: No such file or directory
299 if (errno != ENOENT) {
(gdb)
300 path[i] = '/';
(gdb) print errno
$1 = 0
(gdb)
It seems that errno is being changed somewhere else?? I'm getting all
kinds of wild results checking errno during execution in gdb.
Sometimes it claims to be 2 or 22, sometimes 0. I'll have to build a
UP kernel and see if that fixes the problem. Trying to use libthr
instead of libpthread dies strangely in thr_getscheduler(). Ugh.
Switching to a UP kernel did not resolve the issue, but going back to
non-versioned libraries did. That was a real PITA to do without rebooting,
too!
--
This .signature sanitized for your protection
More information about the freebsd-current
mailing list