diff mbox series

[1/1] package/alsa-lib: build with versioned symbols

Message ID 20200515183353.4183611-1-joseph.kogut@gmail.com
State Changes Requested
Headers show
Series [1/1] package/alsa-lib: build with versioned symbols | expand

Commit Message

Joseph Kogut May 15, 2020, 6:33 p.m. UTC
Some libraries such as CEF depend on versioned symbols from alsa-lib,
and the build fails during linking with versioning disabled.

Signed-off-by: Joseph Kogut <joseph.kogut@gmail.com>
---
CEF is linked to versioned symbols defined by libasound.

$ readelf -Ws libcef.so | grep snd_mixer_selem_id_set_index
  260: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND snd_mixer_selem_id_set_index@ALSA_0.9 (8)

Buildroot's alsa-lib package is currently configured with
--without-versiond, which disables symbol versioning.

$ readelf output/target/usr/lib/libasound.so | grep snd_mixer_selem_id_set_index
  1332: 0000000000052b0c    56 FUNC    GLOBAL DEFAULT   11 snd_mixer_selem_id_set_index

Building alsa-lib with unversioned symbols results in unresolved symbols
during linking.

   <snip>/output/host/bin/aarch64-linux-gcc -o subprocess subprocess.o  -L<snip>/output/target/usr/lib/ -lcef -lX11 -lpython3.8 -lcrypt -lpthread -ldl  -lpthread -lutil -lm -Xlinker -export-dynamic
    <snip>/output/host/opt/ext-toolchain/bin/../lib/gcc/aarch64-buildroot-linux-gnu/9.3.0/../../../../aarch64-buildroot-linux-gnu/bin/ld: <snip>/output/target/usr/lib/libcef.so: undefined reference to `snd_mixer_selem_id_set_index@ALSA_0.9'

Configuring alsa-lib without the --without-versioned flag fixes this
issue.

$ readelf -Ws buildroot/output/target/usr/lib/libasound.so | grep snd_mixer_selem_id_set_index
  1173: 000000000004be18    56 FUNC    GLOBAL DEFAULT   12 snd_mixer_selem_id_set_index@@ALSA_0.9

Is there a reason to leave --without-versioned in the package, or make
it an optional config? I can't imagine the size difference is all that
great.

 package/alsa-lib/alsa-lib.mk | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Thomas Petazzoni May 15, 2020, 7:46 p.m. UTC | #1
Hello,

+Max Filippov

On Fri, 15 May 2020 11:33:53 -0700
Joseph Kogut <joseph.kogut@gmail.com> wrote:

> Is there a reason to leave --without-versioned in the package, or make
> it an optional config? I can't imagine the size difference is all that
> great.

This --without-versioned was added in commit
e90a4bf4af3b6466b2a2d8df12cfe84f5d364cca back in February 2009 (wow, 11
years ago). This commit, from Peter Korsgaard, says:

commit e90a4bf4af3b6466b2a2d8df12cfe84f5d364cca
Author: Peter Korsgaard <jacmet@sunsite.dk>
Date:   Mon Feb 23 13:01:26 2009 +0000

    alsa-lib: don't use versioned symbols
    
    As reported by Dirk Vermaak and Daniel Mack. Fixes runtime issues with
    alsa-lib, see
    http://mailman.alsa-project.org/pipermail/alsa-devel/2009-February/014999.html
    for details.

The mailing list thread pointed by this link contains an interesting
explanation:
https://mailman.alsa-project.org/pipermail/alsa-devel/2009-February/015031.html,
i.e it wasn't working with uClibc because uClibc doesn't support
versioned symbols.

Interestingly, in 2015, the fact that uClibc doesn't support versioned
symbol also caused some issue with elfutils, as was reported by Max
Filippov at:

https://lists.fedorahosted.org/archives/list/elfutils-devel@lists.fedorahosted.org/thread/XIK5GQRWKOMOZ4FVBRWTPOH57DUYFNZV/

So it seems like this problem still exists.

Also, in 2017, Alexey Brokdin also reminded about this in his talk on
uClibc, see
https://elinux.org/images/9/9f/Uclibc-still-makes-sense-brodkin-elce2017_0.pdf

So, we unfortunately can't apply your patch as-is. Perhaps we should
make that conditional on uClibc ? Indeed, I assume that CEF will never
work with uClibc anyway :-)

I am puzzled though: if alsa-lib is built without symbol versioning,
how can CEF "know" about such versioning ? It is hardcoded into the CEF
source code ?

Thomas
diff mbox series

Patch

diff --git a/package/alsa-lib/alsa-lib.mk b/package/alsa-lib/alsa-lib.mk
index 1855eb3d08..1f1d95c177 100644
--- a/package/alsa-lib/alsa-lib.mk
+++ b/package/alsa-lib/alsa-lib.mk
@@ -15,8 +15,7 @@  ALSA_LIB_AUTORECONF = YES
 ALSA_LIB_CONF_OPTS = \
 	--with-alsa-devdir=$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_DEVDIR)) \
 	--with-pcm-plugins="$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_PCM_PLUGINS))" \
-	--with-ctl-plugins="$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS))" \
-	--without-versioned
+	--with-ctl-plugins="$(call qstrip,$(BR2_PACKAGE_ALSA_LIB_CTL_PLUGINS))"
 
 # Can't build with static & shared at the same time (1.0.25+)
 ifeq ($(BR2_STATIC_LIBS),y)