]> git.alsa-project.org Git - alsa-lib.git/commit
snd_dlsym: only do versioning checks if built --with-versioning
authorJohn Spencer <maillist-alsa@barfooze.de>
Sat, 15 Nov 2014 12:41:00 +0000 (13:41 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sun, 16 Nov 2014 08:41:17 +0000 (09:41 +0100)
commit11fdac949bebbe1cbb7a5faec52c95a416860b50
tree01a0e3deecd969aaaafefe4f4ba28cb6241db3c8
parent5a066cb884815ab48924da8f70514d587400dd6a
snd_dlsym: only do versioning checks if built --with-versioning

a combination of some of the following garbage collecting LD/CFLAGS
-Os -g0 -fdata-sections -ffunction-sections -s -Wl,--gc-sections
-fno-unwind-tables -fno-asynchronous-unwind-tables
causes the symbol versioning marker symbols to be removed from BSS
since they're otherwise unreferenced. this causes dlsym failing to
find them which results in runtime breakage:

$ alsamixer
ALSA lib dlmisc.c:142:(snd_dlsym_verify) unable to verify version for symbol snd_config_hook_load
ALSA lib conf.c:3328:(snd_config_hooks_call) symbol snd_config_hook_load is not defined inside (null)
ALSA lib conf.c:3788:(snd_config_update_r) hooks failed, removing configuration
cannot open mixer: No such device or address

correct DSO:
$ objdump -T libasound.so.2.strip | grep _snd_config_hook_load_dlsym_config_hook_001
001196bc g    DO .bss   00000001 _snd_config_hook_load_dlsym_config_hook_001

incorrect DSO:
$ objdump -T libs/libasound.so.2 | grep _snd_config_hook_load_dlsym_config_hook_001
00000000 g    DO *ABS*  00000001 _snd_config_hook_load_dlsym_config_hook_001

since alsa was built with --without-versioning, doing those versioning
checks at all is unnecessary and harmful and thus now disabled in this case.

Signed-off-by: John Spencer <maillist-alsa@barfooze.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/dlmisc.c