Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Jun 2006 13:33:13 -0400 (EDT)
From:      Daniel Eischen <deischen@freebsd.org>
To:        John Hay <jhay@meraka.org.za>
Cc:        current@freebsd.org
Subject:   Re: libpthread.so.2 compatibility
Message-ID:  <Pine.GSO.4.64.0606051322190.14745@sea.ntplx.net>
In-Reply-To: <20060605171414.GA9032@zibbi.meraka.csir.co.za>
References:  <Pine.GSO.4.64.0606041043350.8207@sea.ntplx.net> <20060604153210.GA60476@zibbi.meraka.csir.co.za> <Pine.GSO.4.64.0606041156020.8602@sea.ntplx.net> <20060604174315.GA64158@zibbi.meraka.csir.co.za> <Pine.GSO.4.64.0606041423260.9199@sea.ntplx.net> <20060604191000.GA67836@zibbi.meraka.csir.co.za> <Pine.GSO.4.64.0606041902230.10482@sea.ntplx.net> <Pine.GSO.4.64.0606041914530.10482@sea.ntplx.net> <20060605164711.GA8065@zibbi.meraka.csir.co.za> <Pine.GSO.4.64.0606051253280.14745@sea.ntplx.net> <20060605171414.GA9032@zibbi.meraka.csir.co.za>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 5 Jun 2006, John Hay wrote:

> On Mon, Jun 05, 2006 at 01:01:11PM -0400, Daniel Eischen wrote:
>> On Mon, 5 Jun 2006, John Hay wrote:
>>>>
>>>> How old was your system when you upgraded to -current?  There
>>>> were changes to malloc() in libc.so.6 which have been in -current
>>>> for a while, and libpthread is dependent on some internal locks
>>>> in libc.  If you are using a libc.so.6 before jasone's malloc()
>>>> changes and a newer libpthread, then that won't work.  When you
>>>> recompile, your binaries will be linked to libc.so.7, and
>>>> libpthread.so.2 will find the correct locks.  If you don't
>>>> find the following:
>>>>
>>>>  $ readelf -s /lib/libc.so.6 | grep _malloc
>>>>     275: 0005f65c   139 FUNC    GLOBAL DEFAULT    8 _malloc_postfork
>>>>     299: 000e96d0     4 OBJECT  GLOBAL DEFAULT   19 _malloc_options
>>>>     870: 0005f5d0   139 FUNC    GLOBAL DEFAULT    8 _malloc_prefork
>>>>    2486: 000d1fd8     4 OBJECT  GLOBAL DEFAULT   11 _malloc_message
>>>>
>>>> _malloc_postfork and _malloc_prefork in libc.so.6, then that is
>>>> probably why libpthread is failing.
>>>
>>> The libc.so.6 I copied from the -stable box does not have it:
>>>
>>> # readelf -s /lib/libc.so.6 | grep _malloc
>>>  281: 000d78b4     4 OBJECT  GLOBAL DEFAULT   18 _malloc_options
>>> 1705: 000c0e30     4 OBJECT  GLOBAL DEFAULT   11 __malloc_lock
>>> 2351: 000c0e2c     4 OBJECT  GLOBAL DEFAULT   11 _malloc_message
>>>
>>> But the one from the -current box has it:
>>>
>>> # readelf -s /lib/libc.so.6.old  | grep _malloc
>>>  274: 0005fcd4   113 FUNC    GLOBAL DEFAULT    8 _malloc_postfork
>>>  297: 000e25d4     4 OBJECT  GLOBAL DEFAULT   19 _malloc_options
>>>  852: 0005fc60   113 FUNC    GLOBAL DEFAULT    8 _malloc_prefork
>>> 2424: 000cae38     4 OBJECT  GLOBAL DEFAULT   11 _malloc_message
>>>
>>> Does it work for you? Can you take a 6-stable libpthread app and run
>>> it on current?
>>
>> No, you can't make a 6-stable libpthread and have it work
>> on -current.  Both libc and libpthread have to match.  There
>> were also other changes in libc that libpthread relies on
>> (__thr_jtable changed in size).
>>
>> When you upgraded to -current, you got a different libpthread
>> that is reliant on -current's libc.  But since libc's version
>> was bumped, you never got a -current libc.so.6 that was
>> compatible with libpthread.  The only way to get around this
>> is to go back a couple of weeks to before the resolver
>> changes and libc bump were committed -- rebuild libc.so.6
>> from those older sources.
>
> Not sure if I understand you wrong. I didn't mean that one should
> take a 6-stable libpthread. I meant an app that use libpthread. Or
> is that what you mean? That one cannot use an app on -current that
> use libpthread, but was compiled on 6-stable? If that was so, I
> will accept it, although the commit message in libpthread/Makefile
> ver 1.55 make it sound as if it should work.

No, you can't use that app unless you somehow build it so that
it doesn't use libc.  The problem is that you don't have a
libc.so.6 that matches libpthread.so.2.  You -stable app depends
on libc.so.6, not libc.so.7.  When you upgrade from -stable
to -current, you bypass the changes that went into libc.so.6
before it became libc.so.7.  The -current libpthread.so.2
changed to stay in sync with those changes.

Bottom line:  -stable libc.so.6 != -current libc.so.6
               -stable libpthread.so.2 != -current libpthread.so.2

Both libpthread.so.2 and libc.so.6 (and .so.7) have to be
in sync (built from same-dated sources).

-- 
DE



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