[OE-core] [OE-Core][PATCH 06/13] musl: Create default library search path based on configuration

Khem Raj raj.khem at gmail.com
Fri Dec 14 23:40:43 UTC 2018


On Fri, Dec 14, 2018 at 9:57 AM Serhey Popovych
<serhe.popovych at gmail.com> wrote:
>
> In absence of /etc/ld-musl-$(ARCH).path file musl uses hardcoded default
> search path "/lib:/usr/local/lib:/usr/lib". This works for cases when
> system libraries installed in one of these pathes.
>
> However if lib64 or libx32 used as system library directories and no
> usr merge functionality enabled for distro musl dynamic loader cannot
> find libraries and finally execute binaries.
>
> Found while working on support for musl on powerpc64 builds where
> lib64 variant is used regardless of multilib being on or off.
>
> Fix by creating default search path based on configuration time values
> for syslibdir and libdir.

Lets take this fix to musl upstream at the same time. I think it does
have some value
but if upstream does not agree then we are in for supporting this
forever, and I would like
us to have upstream review on it first.

>
> Signed-off-by: Serhey Popovych <serhe.popovych at gmail.com>
> ---
>  ...slibdir-and-libdir-as-default-pathes-to-l.patch | 61 ++++++++++++++++++++++
>  meta/recipes-core/musl/musl_git.bb                 |  1 +
>  2 files changed, 62 insertions(+)
>  create mode 100644 meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch
>
> diff --git a/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch b/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch
> new file mode 100644
> index 0000000..6a875a7
> --- /dev/null
> +++ b/meta/recipes-core/musl/musl/0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch
> @@ -0,0 +1,61 @@
> +From 5a2886f81dbca3f2ed28eebe7d27d471da278db8 Mon Sep 17 00:00:00 2001
> +From: Serhey Popovych <serhe.popovych at gmail.com>
> +Date: Tue, 11 Dec 2018 05:44:20 -0500
> +Subject: [PATCH] ldso: Use syslibdir and libdir as default pathes to libdirs
> +
> +In absence of /etc/ld-musl-$(ARCH).path ldso uses default path to search
> +libraries /lib:/usr/local/lib:/usr/lib.
> +
> +However this path isn't relevant in case when library is put in dirs
> +like lib64 or libx32.
> +
> +Adjust CFLAGS_ALL to pass syslibdir as SYSLIBDIR and libdir as LIBDIR
> +preprocessor macroses to construct default ldso library search path
> +in ldso/dynlink.c::SYS_PATH_DFLT.
> +
> +Upstream-Status: Pending
> +Signed-off-by: Serhey Popovych <serhe.popovych at gmail.com>
> +---
> + Makefile       | 3 ++-
> + ldso/dynlink.c | 4 +++-
> + 2 files changed, 5 insertions(+), 2 deletions(-)
> +
> +diff --git a/Makefile b/Makefile
> +index b46f8ca4..c07e4ae8 100644
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -46,7 +46,8 @@ CFLAGS_AUTO = -Os -pipe
> + CFLAGS_C99FSE = -std=c99 -ffreestanding -nostdinc
> +
> + CFLAGS_ALL = $(CFLAGS_C99FSE)
> +-CFLAGS_ALL += -D_XOPEN_SOURCE=700 -I$(srcdir)/arch/$(ARCH) -I$(srcdir)/arch/generic -Iobj/src/internal -I$(srcdir)/src/include -I$(srcdir)/src/internal -Iobj/include -I$(srcdir)/include
> ++CFLAGS_ALL += -D_XOPEN_SOURCE=700 -DSYSLIBDIR='"$(syslibdir)"' -DLIBDIR='"$(libdir)"'
> ++CFLAGS_ALL += -I$(srcdir)/arch/$(ARCH) -I$(srcdir)/arch/generic -Iobj/src/internal -I$(srcdir)/src/include -I$(srcdir)/src/internal -Iobj/include -I$(srcdir)/include
> + CFLAGS_ALL += $(CPPFLAGS) $(CFLAGS_AUTO) $(CFLAGS)
> +
> + LDFLAGS_ALL = $(LDFLAGS_AUTO) $(LDFLAGS)
> +diff --git a/ldso/dynlink.c b/ldso/dynlink.c
> +index ec921dfd..7c119c55 100644
> +--- a/ldso/dynlink.c
> ++++ b/ldso/dynlink.c
> +@@ -22,6 +22,8 @@
> + #include "dynlink.h"
> + #include "malloc_impl.h"
> +
> ++#define SYS_PATH_DFLT SYSLIBDIR ":" LIBDIR
> ++
> + static void error(const char *, ...);
> +
> + #define MAXP2(a,b) (-(-(a)&-(b)))
> +@@ -1038,7 +1040,7 @@ static struct dso *load_library(const char *name, struct dso *needed_by)
> +                                       sys_path = "";
> +                               }
> +                       }
> +-                      if (!sys_path) sys_path = "/lib:/usr/local/lib:/usr/lib";
> ++                      if (!sys_path) sys_path = SYS_PATH_DFLT;
> +                       fd = path_open(name, sys_path, buf, sizeof buf);
> +               }
> +               pathname = buf;
> +--
> +2.7.4
> +
> diff --git a/meta/recipes-core/musl/musl_git.bb b/meta/recipes-core/musl/musl_git.bb
> index b416ec4..9cc875c 100644
> --- a/meta/recipes-core/musl/musl_git.bb
> +++ b/meta/recipes-core/musl/musl_git.bb
> @@ -12,6 +12,7 @@ PV = "1.1.20+git${SRCPV}"
>
>  SRC_URI = "git://git.musl-libc.org/musl \
>             file://0001-Make-dynamic-linker-a-relative-symlink-to-libc.patch \
> +           file://0002-ldso-Use-syslibdir-and-libdir-as-default-pathes-to-l.patch \
>            "
>
>  S = "${WORKDIR}/git"
> --
> 2.7.4
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


More information about the Openembedded-core mailing list