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

Serhey Popovych serhe.popovych at gmail.com
Mon Dec 17 09:37:53 UTC 2018


Khem Raj wrote:
> 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.

Will do that. Passing defines in CFLAGS isn't best approach. Maybe
upstream suggests something better.

> 
>>
>> 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20181217/f112f16c/attachment.sig>


More information about the Openembedded-core mailing list