[Buildroot] [PATCH 2 of 4] alsa-lib: add a fake dlfcn.h header if dynamic load is not supported
Thomas De Schampheleire
patrickdepinguin at gmail.com
Tue Feb 18 13:14:37 UTC 2014
Hi Peter,
Thanks for reviewing...
On Tue, Feb 18, 2014 at 12:28 PM, Peter Korsgaard <jacmet at uclibc.org> wrote:
>>>>>> "Thomas" == Thomas De Schampheleire <patrickdepinguin at gmail.com> writes:
>
> > The FLAT GNU toolchain doesn't include the dlfcn.h header file.
> > Provide a fake header file dlmisc.h with enough declarations to make
> > alsa-lib happy.
>
> > Fixes
> > http://autobuild.buildroot.org/results/706/7069e1f43cbed745d65f7dd9904a3fff034530ac/build-end.log
>
> > Signed-off-by: Sonic Zhang <sonic.zhang at analog.com>
> > [Thomas: change sequence number from 003 to 0003, update commit message ]
> > Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire at gmail.com>
>
> > ---
> > package/alsa-lib/alsa-lib-0003-dlmisc.patch | 59 ++++++++++++++++++++++++
> > 1 files changed, 59 insertions(+), 0 deletions(-)
>
> > diff --git a/package/alsa-lib/alsa-lib-0003-dlmisc.patch b/package/alsa-lib/alsa-lib-0003-dlmisc.patch
> > new file mode 100644
> > --- /dev/null
> > +++ b/package/alsa-lib/alsa-lib-0003-dlmisc.patch
> > @@ -0,0 +1,59 @@
> > +alsa-lib: dlmisc: Add a fake dl lib head file when dl lib is not supported by the toolchain.
> > +
> > +The FLAT GNU toolchain doesn't include the dlfcn.h header file.
> > +
> > +--- alsa-lib-1.0.26/src/mixer/simple_abst.c 2012-09-06 16:55:14.000000000 +0800
> > ++++ alsa-lib-1.0.26.bak/src/mixer/simple_abst.c 2013-11-25 14:53:07.739275843 +0800
> > +@@ -34,7 +34,11 @@
> > + #include <fcntl.h>
> > + #include <sys/ioctl.h>
> > + #include <math.h>
> > ++#ifdef HAVE_LIBDL
> > + #include <dlfcn.h>
> > ++#else
> > ++#include <dlmisc.h>
>
> This is not a system header, so it should use #include "dlmisc.h".
Correct, will fix.
>
> What the the upstream status of this patch? We don't usually carry
> feature patches in buildroot (besides backports).
It was submitted by Sonic Zhang, but without response:
http://mailman.alsa-project.org/pipermail/alsa-devel/2013-November/069218.html
http://mailman.alsa-project.org/pipermail/alsa-devel/2013-December/069587.html
I can try to resubmit it after the above change and see what happens...
>
> Are those two defines the only part of dlfcn.h used? If so, how about
> protection the pieces of code using them with #ifdef HAVE_LIBDL instead?
Typical usage is:
./src/mixer/simple_abst.c:82: h = snd_dlopen(xlib, RTLD_NOW);
./src/mixer/simple_abst.c:129: h = snd_dlopen(xlib, RTLD_NOW|RTLD_GLOBAL);
where snd_dlopen is a wrapper:
/**
* \brief Opens a dynamic library - ALSA wrapper for \c dlopen.
* \param name name of the library, similar to \c dlopen.
* \param mode mode flags, similar to \c dlopen.
* \return Library handle if successful, otherwise \c NULL.
*
* This function can emulate dynamic linking for the static build of
* the alsa-lib library. In that case, \p name is set to \c NULL.
*/
void *snd_dlopen(const char *name, int mode)
{
#ifndef PIC
if (name == NULL)
return &snd_dlsym_start;
#else
#ifdef HAVE_LIBDL
if (name == NULL) {
static const char * self = NULL;
if (self == NULL) {
Dl_info dlinfo;
if (dladdr(snd_dlopen, &dlinfo) > 0)
self = dlinfo.dli_fname;
}
name = self;
}
#endif
#endif
#ifdef HAVE_LIBDL
return dlopen(name, mode);
#else
return NULL;
#endif
}
Due to the special PIC exception, I don't think we can remove the call
to snd_dlopen() entirely if !HAVE_LIBDL.
Best regards,
Thomas
More information about the buildroot
mailing list