[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: New libthai and pango



On Tue, Mar 31, 2009 at 4:56 PM, Josselin Mouette <joss@debian.org> wrote:
> Theppitak Karoonboonyanan writes:
>>>
>>> Unfortunately this won’t work for upgrades from lenny, so I’d prefer to
>>> see the Conflicts anyway.
>>
>> You meaned partial upgrade with only libthai upgraded?
>> I still think the upgrade would work if pango were rebuilt with -ldatrie
>> removed, i.e., no more libdatrie0 should be directly loaded, except from
>> libthai0. Correct me if I'm wrong.
>
> If you upgrade only libthai, it will bring libdatrie1 while pango still
> links to libdatrie0, so both libraries will be in the namespace.

Yes, so you meaned the partial upgrade case, not when
pango is also rebuilt and upgraded as Loic proposed.

> However, thinking about it again, if you add symbol versions in libdatrie1,
> this should work. Since pango doesn't actually use any symbols from
> libdatrie, all required symbols will be required with a version, so the
> correct ones will be selected.

I suppose so. However, I've tried it and found no luck so far.
For the experiment, I've used "-Wl,--version-script=libdatrie.map"
LDFLAG instead of libtool -export-symbols flag, and list all
currently exported symbols under DATRIE_0.2 { global: ...; };
(with a "local: *" catch all in it, of course). Then I rebuilt both
libdatrie and libthai.

Here is what I got:

$ objdump -T /usr/local/lib/libdatrie.so.1.0.0

/usr/local/lib/libdatrie.so.1.0.0:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000c90 l    d  .init  0000000000000000              .init
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 ftell
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000
_Jv_RegisterClasses
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 fseek
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __assert_fail
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 malloc
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 fopen
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __strdup
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strlen
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 sprintf
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memmove
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 fread
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 fclose
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 fwrite
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 realloc
00000000000028a0 g    DF .text  0000000000000005  DATRIE_0.2  trie_state_free
00000000000027a0 g    DF .text  00000000000000fb  DATRIE_0.2  trie_retrieve
0000000000002c30 g    DF .text  0000000000000255  DATRIE_0.2  trie_store
00000000000032a0 g    DF .text  0000000000000036  DATRIE_0.2  alpha_map_free
0000000000002640 g    DF .text  000000000000001f  DATRIE_0.2
trie_state_get_data
0000000000003000 g    DF .text  000000000000009e  DATRIE_0.2  trie_new
0000000000002960 g    DF .text  000000000000002a  DATRIE_0.2  trie_enumerate
00000000000032e0 g    DF .text  0000000000000222  DATRIE_0.2
alpha_map_add_range
0000000000002aa0 g    DF .text  00000000000000ff  DATRIE_0.2  trie_delete
0000000000002f40 g    DF .text  00000000000000be  DATRIE_0.2  trie_new_from_fil
0000000000002f10 g    DF .text  0000000000000027  DATRIE_0.2  trie_free
0000000000002610 g    DF .text  000000000000001d  DATRIE_0.2  trie_state_copy
00000000000030a0 g    DF .text  0000000000000026  DATRIE_0.2  alpha_char_strlen
00000000000028b0 g    DF .text  0000000000000060  DATRIE_0.2  trie_state_clone
0000000000002e90 g    DF .text  000000000000007e  DATRIE_0.2  trie_save
0000000000002780 g    DF .text  000000000000001b  DATRIE_0.2  trie_state_rewind
0000000000002630 g    DF .text  0000000000000005  DATRIE_0.2
trie_state_is_single
0000000000000000 g    DO *ABS*  0000000000000000  DATRIE_0.2  DATRIE_0.2
0000000000002660 g    DF .text  000000000000007a  DATRIE_0.2
trie_state_is_walkable
0000000000002910 g    DF .text  000000000000004c  DATRIE_0.2  trie_root
0000000000003510 g    DF .text  000000000000005c  DATRIE_0.2  alpha_map_clone
0000000000002600 g    DF .text  0000000000000004  DATRIE_0.2  trie_is_dirty
0000000000003280 g    DF .text  000000000000001f  DATRIE_0.2  alpha_map_new
00000000000026e0 g    DF .text  0000000000000095  DATRIE_0.2  trie_state_walk

$ objdump -T /usr/local/lib/libthai.so.0.1.2 | grep UND
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2
trie_state_is_single
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 wcsncat
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 snprintf
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 wcsncpy
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 wcslen
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000
_Jv_RegisterClasses
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 malloc
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_state_walk
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_state_free
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_state_rewind
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_state_copy
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strlen
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_state_clone
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_new_from_file
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memcpy
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strchr
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 getenv
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_root
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 strcpy
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 wcscat
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2  trie_free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 realloc
0000000000000000      DF *UND*  0000000000000000  DATRIE_0.2
trie_state_is_walkable

All datrie calls from libthai seem to be versioned, while libdatrie0
symbols aren't:

$ objdump -T /usr/lib/libdatrie.so.0.0.3

/usr/lib/libdatrie.so.0.0.3:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000f58 l    d  .init  0000000000000000              .init
0000000000000000      DF *UND*  0000000000000148  GLIBC_2.2.5 ftell
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D  *UND*  0000000000000000
_Jv_RegisterClasses
0000000000000000      DF *UND*  000000000000011e  GLIBC_2.2.5 fseek
0000000000000000      DF *UND*  00000000000001de  GLIBC_2.2.5 malloc
0000000000000000      DF *UND*  000000000000000a  GLIBC_2.2.5 fopen
0000000000000000      DF *UND*  00000000000001c2  GLIBC_2.2.5 fgets
0000000000000000      DF *UND*  0000000000000057  GLIBC_2.2.5 __strdup
0000000000000000      DF *UND*  00000000000000d9  GLIBC_2.2.5 free
0000000000000000      DF *UND*  00000000000000e9  GLIBC_2.2.5 strlen
0000000000000000  w   DF *UND*  00000000000000fe  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DF *UND*  0000000000000090  GLIBC_2.2.5 sprintf
0000000000000000      DF *UND*  0000000000000090  GLIBC_2.2.5 sscanf
0000000000000000      DF *UND*  00000000000000f3  GLIBC_2.2.5 rewind
0000000000000000      DF *UND*  00000000000001bc  GLIBC_2.2.5 strcat
0000000000000000      DF *UND*  000000000000018f  GLIBC_2.2.5 memmove
0000000000000000      DF *UND*  0000000000000155  GLIBC_2.2.5 fread
0000000000000000      DF *UND*  00000000000000dc  GLIBC_2.2.5 strcpy
0000000000000000      DF *UND*  0000000000000213  GLIBC_2.2.5 fclose
0000000000000000      DO *UND*  0000000000000008  GLIBC_2.2.5 stderr
0000000000000000      DF *UND*  0000000000000187  GLIBC_2.2.5 fwrite
0000000000000000      DF *UND*  00000000000002e8  GLIBC_2.2.5 realloc
0000000000000000      DF *UND*  0000000000000090  GLIBC_2.2.5 fprintf
00000000000037c0 g    DF .text  0000000000000034  Base        sb_trie_state_walk
0000000000002cf0 g    DF .text  0000000000000005  Base        trie_state_free
0000000000002ed0 g    DF .text  00000000000000ef  Base        trie_retrieve
0000000000003150 g    DF .text  0000000000000210  Base        trie_store
0000000000003820 g    DF .text  0000000000000022  Base        sb_trie_state_free
0000000000002b50 g    DF .text  0000000000000020  Base
trie_state_get_data
0000000000002dc0 g    DF .text  0000000000000029  Base        trie_enumerate
0000000000003a90 g    DF .text  0000000000000069  Base        sb_trie_store
0000000000002fc0 g    DF .text  00000000000000f2  Base        trie_delete
0000000000003bc0 g    DF .text  00000000000000a5  Base        sb_trie_open
0000000000003780 g    DF .text  0000000000000034  Base
sb_trie_state_is_walkable
00000000000033f0 g    DF .text  000000000000009d  Base        trie_open
0000000000003760 g    DF .text  0000000000000013  Base
sb_trie_state_is_terminal
0000000000003720 g    DF .text  0000000000000016  Base
sb_trie_state_get_data
00000000000033a0 g    DF .text  0000000000000041  Base        trie_close
0000000000002bf0 g    DF .text  000000000000002c  Base        trie_state_is_leaf
0000000000003800 g    DF .text  0000000000000012  Base
sb_trie_state_rewind
0000000000003b70 g    DF .text  0000000000000016  Base        sb_trie_save
0000000000002d00 g    DF .text  0000000000000062  Base        trie_state_clone
0000000000003b90 g    DF .text  0000000000000027  Base        sb_trie_close
0000000000003360 g    DF .text  000000000000003a  Base        trie_save
0000000000003850 g    DF .text  0000000000000058  Base
sb_trie_state_clone
0000000000002cd0 g    DF .text  000000000000001b  Base        trie_state_rewind
0000000000003740 g    DF .text  0000000000000013  Base
sb_trie_state_is_leaf
0000000000003b00 g    DF .text  0000000000000068  Base        sb_trie_retrieve
00000000000038b0 g    DF .text  0000000000000053  Base        sb_trie_root
0000000000002b70 g    DF .text  0000000000000074  Base
trie_state_is_walkable
0000000000002d70 g    DF .text  000000000000004c  Base        trie_root
0000000000002c20 g    DF .text  00000000000000a7  Base        trie_state_walk
0000000000003a30 g    DF .text  0000000000000057  Base        sb_trie_delete
0000000000003910 g    DF .text  0000000000000030  Base        sb_trie_enumerate

However, unstable pango still doesn't work. It crashes leafpad
and gucharmap, but not gedit. And when checking process map,
gedit doesn't care about LD_LIBRARY_PATH and only loads libthai
from /usr/lib. But the other two do load it from /usr/local/lib, and crash.

I must be missing something here. :-/

Regards,
-- 
Theppitak Karoonboonyanan
http://linux.thai.net/~thep/


Reply to: