Re: libpthread shared library version number

From: Wesley Morgan <morganw_at_chemikals.org>
Date: Thu, 2 Nov 2006 13:18:48 -0500 (EST)
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
Received on Thu Nov 02 2006 - 17:19:31 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:02 UTC