libpthread.so.2 compatibility
Daniel Eischen
deischen at freebsd.org
Mon Jun 5 17:01:24 UTC 2006
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.
--
DE
More information about the freebsd-current
mailing list