From 75d968ad54244c9f4a4cf33eb5111933e3fa25e7 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Wed, 15 Mar 2017 01:08:48 -0700 Subject: Make uClibc-ng search multilib dir if one is set Signed-off-by: Alexey Neyman diff --git a/patches/uClibc-ng/1.0.20/600-prefer-multilib.patch b/patches/uClibc-ng/1.0.20/600-prefer-multilib.patch new file mode 100644 index 0000000..4338f9f --- /dev/null +++ b/patches/uClibc-ng/1.0.20/600-prefer-multilib.patch @@ -0,0 +1,46 @@ +diff -urpN uClibc-ng-1.0.22.orig/ldso/ldso/dl-elf.c uClibc-ng-1.0.22/ldso/ldso/dl-elf.c +--- uClibc-ng-1.0.22.orig/ldso/ldso/dl-elf.c 2017-03-14 12:17:57.754063532 -0700 ++++ uClibc-ng-1.0.22/ldso/ldso/dl-elf.c 2017-03-14 17:14:21.846398236 -0700 +@@ -307,6 +307,19 @@ struct elf_resolve *_dl_load_shared_libr + } + } + #endif ++ ++#ifdef LDSO_MULTILIB_DIR ++ /* If multilib directory is selected, search it before falling back to ++ standard lib directories. */ ++ _dl_if_debug_dprint("\tsearching multilib lib path list\n"); ++ tpnt1 = search_for_named_library(libname, rflags, ++ UCLIBC_RUNTIME_PREFIX LDSO_MULTILIB_DIR ":" ++ UCLIBC_RUNTIME_PREFIX "usr" LDSO_MULTILIB_DIR, ++ rpnt, NULL); ++ if (tpnt1 != NULL) ++ return tpnt1; ++#endif ++ + #if defined SHARED && defined __LDSO_SEARCH_INTERP_PATH__ + /* Look for libraries wherever the shared library loader + * was installed */ +@@ -315,6 +328,7 @@ struct elf_resolve *_dl_load_shared_libr + if (tpnt1 != NULL) + return tpnt1; + #endif ++ + /* Lastly, search the standard list of paths for the library. + This list must exactly match the list in uClibc/ldso/util/ldd.c */ + _dl_if_debug_dprint("\tsearching full lib path list\n"); +diff -urpN uClibc-ng-1.0.22.orig/ldso/ldso/Makefile.in uClibc-ng-1.0.22/ldso/ldso/Makefile.in +--- uClibc-ng-1.0.22.orig/ldso/ldso/Makefile.in 2017-03-14 12:17:57.754063532 -0700 ++++ uClibc-ng-1.0.22/ldso/ldso/Makefile.in 2017-03-14 15:35:35.277104175 -0700 +@@ -34,6 +34,11 @@ CFLAGS-$(DODEBUG)-ldso/ldso := -O2 -g + + CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" + ++# Search non-default multilib directories ++ifneq ($(MULTILIB_DIR),lib) ++CFLAGS-ldso.c += -DLDSO_MULTILIB_DIR=\"$(MULTILIB_DIR)\" ++endif ++ + ifeq ($(TARGET_ARCH),arc) + CFLAGS-ldso.c += -mno-long-calls + endif diff --git a/patches/uClibc-ng/1.0.21/600-prefer-multilib.patch b/patches/uClibc-ng/1.0.21/600-prefer-multilib.patch new file mode 100644 index 0000000..4338f9f --- /dev/null +++ b/patches/uClibc-ng/1.0.21/600-prefer-multilib.patch @@ -0,0 +1,46 @@ +diff -urpN uClibc-ng-1.0.22.orig/ldso/ldso/dl-elf.c uClibc-ng-1.0.22/ldso/ldso/dl-elf.c +--- uClibc-ng-1.0.22.orig/ldso/ldso/dl-elf.c 2017-03-14 12:17:57.754063532 -0700 ++++ uClibc-ng-1.0.22/ldso/ldso/dl-elf.c 2017-03-14 17:14:21.846398236 -0700 +@@ -307,6 +307,19 @@ struct elf_resolve *_dl_load_shared_libr + } + } + #endif ++ ++#ifdef LDSO_MULTILIB_DIR ++ /* If multilib directory is selected, search it before falling back to ++ standard lib directories. */ ++ _dl_if_debug_dprint("\tsearching multilib lib path list\n"); ++ tpnt1 = search_for_named_library(libname, rflags, ++ UCLIBC_RUNTIME_PREFIX LDSO_MULTILIB_DIR ":" ++ UCLIBC_RUNTIME_PREFIX "usr" LDSO_MULTILIB_DIR, ++ rpnt, NULL); ++ if (tpnt1 != NULL) ++ return tpnt1; ++#endif ++ + #if defined SHARED && defined __LDSO_SEARCH_INTERP_PATH__ + /* Look for libraries wherever the shared library loader + * was installed */ +@@ -315,6 +328,7 @@ struct elf_resolve *_dl_load_shared_libr + if (tpnt1 != NULL) + return tpnt1; + #endif ++ + /* Lastly, search the standard list of paths for the library. + This list must exactly match the list in uClibc/ldso/util/ldd.c */ + _dl_if_debug_dprint("\tsearching full lib path list\n"); +diff -urpN uClibc-ng-1.0.22.orig/ldso/ldso/Makefile.in uClibc-ng-1.0.22/ldso/ldso/Makefile.in +--- uClibc-ng-1.0.22.orig/ldso/ldso/Makefile.in 2017-03-14 12:17:57.754063532 -0700 ++++ uClibc-ng-1.0.22/ldso/ldso/Makefile.in 2017-03-14 15:35:35.277104175 -0700 +@@ -34,6 +34,11 @@ CFLAGS-$(DODEBUG)-ldso/ldso := -O2 -g + + CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" + ++# Search non-default multilib directories ++ifneq ($(MULTILIB_DIR),lib) ++CFLAGS-ldso.c += -DLDSO_MULTILIB_DIR=\"$(MULTILIB_DIR)\" ++endif ++ + ifeq ($(TARGET_ARCH),arc) + CFLAGS-ldso.c += -mno-long-calls + endif diff --git a/patches/uClibc-ng/1.0.22/600-prefer-multilib.patch b/patches/uClibc-ng/1.0.22/600-prefer-multilib.patch new file mode 100644 index 0000000..4338f9f --- /dev/null +++ b/patches/uClibc-ng/1.0.22/600-prefer-multilib.patch @@ -0,0 +1,46 @@ +diff -urpN uClibc-ng-1.0.22.orig/ldso/ldso/dl-elf.c uClibc-ng-1.0.22/ldso/ldso/dl-elf.c +--- uClibc-ng-1.0.22.orig/ldso/ldso/dl-elf.c 2017-03-14 12:17:57.754063532 -0700 ++++ uClibc-ng-1.0.22/ldso/ldso/dl-elf.c 2017-03-14 17:14:21.846398236 -0700 +@@ -307,6 +307,19 @@ struct elf_resolve *_dl_load_shared_libr + } + } + #endif ++ ++#ifdef LDSO_MULTILIB_DIR ++ /* If multilib directory is selected, search it before falling back to ++ standard lib directories. */ ++ _dl_if_debug_dprint("\tsearching multilib lib path list\n"); ++ tpnt1 = search_for_named_library(libname, rflags, ++ UCLIBC_RUNTIME_PREFIX LDSO_MULTILIB_DIR ":" ++ UCLIBC_RUNTIME_PREFIX "usr" LDSO_MULTILIB_DIR, ++ rpnt, NULL); ++ if (tpnt1 != NULL) ++ return tpnt1; ++#endif ++ + #if defined SHARED && defined __LDSO_SEARCH_INTERP_PATH__ + /* Look for libraries wherever the shared library loader + * was installed */ +@@ -315,6 +328,7 @@ struct elf_resolve *_dl_load_shared_libr + if (tpnt1 != NULL) + return tpnt1; + #endif ++ + /* Lastly, search the standard list of paths for the library. + This list must exactly match the list in uClibc/ldso/util/ldd.c */ + _dl_if_debug_dprint("\tsearching full lib path list\n"); +diff -urpN uClibc-ng-1.0.22.orig/ldso/ldso/Makefile.in uClibc-ng-1.0.22/ldso/ldso/Makefile.in +--- uClibc-ng-1.0.22.orig/ldso/ldso/Makefile.in 2017-03-14 12:17:57.754063532 -0700 ++++ uClibc-ng-1.0.22/ldso/ldso/Makefile.in 2017-03-14 15:35:35.277104175 -0700 +@@ -34,6 +34,11 @@ CFLAGS-$(DODEBUG)-ldso/ldso := -O2 -g + + CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" + ++# Search non-default multilib directories ++ifneq ($(MULTILIB_DIR),lib) ++CFLAGS-ldso.c += -DLDSO_MULTILIB_DIR=\"$(MULTILIB_DIR)\" ++endif ++ + ifeq ($(TARGET_ARCH),arc) + CFLAGS-ldso.c += -mno-long-calls + endif diff --git a/patches/uClibc/0.9.33.2/600-prefer-multilib.patch b/patches/uClibc/0.9.33.2/600-prefer-multilib.patch new file mode 100644 index 0000000..677c599 --- /dev/null +++ b/patches/uClibc/0.9.33.2/600-prefer-multilib.patch @@ -0,0 +1,38 @@ +diff -urpN uClibc-0.9.33.2.orig/ldso/ldso/dl-elf.c uClibc-0.9.33.2/ldso/ldso/dl-elf.c +--- uClibc-0.9.33.2.orig/ldso/ldso/dl-elf.c 2017-03-14 23:40:57.527113741 -0700 ++++ uClibc-0.9.33.2/ldso/ldso/dl-elf.c 2017-03-14 23:42:19.308005691 -0700 +@@ -284,6 +284,19 @@ struct elf_resolve *_dl_load_shared_libr + } + } + #endif ++ ++#ifdef LDSO_MULTILIB_DIR ++ /* If multilib directory is selected, search it before falling back to ++ standard lib directories. */ ++ _dl_if_debug_dprint("\tsearching multilib lib path list\n"); ++ tpnt1 = search_for_named_library(libname, rflags, ++ UCLIBC_RUNTIME_PREFIX LDSO_MULTILIB_DIR ":" ++ UCLIBC_RUNTIME_PREFIX "usr" LDSO_MULTILIB_DIR, ++ rpnt); ++ if (tpnt1 != NULL) ++ return tpnt1; ++#endif ++ + #if defined SHARED && defined __LDSO_SEARCH_INTERP_PATH__ + /* Look for libraries wherever the shared library loader + * was installed */ +diff -urpN uClibc-0.9.33.2.orig/ldso/ldso/Makefile.in uClibc-0.9.33.2/ldso/ldso/Makefile.in +--- uClibc-0.9.33.2.orig/ldso/ldso/Makefile.in 2017-03-14 23:40:57.527113741 -0700 ++++ uClibc-0.9.33.2/ldso/ldso/Makefile.in 2017-03-14 23:41:45.215634328 -0700 +@@ -30,6 +30,11 @@ CFLAGS-ldso/ldso/$(TARGET_ARCH)/ := $(CF + + CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" $(CFLAGS-ldso) + ++# Search non-default multilib directories ++ifneq ($(MULTILIB_DIR),lib) ++CFLAGS-ldso.c += -DLDSO_MULTILIB_DIR=\"$(MULTILIB_DIR)\" ++endif ++ + LDFLAGS-$(UCLIBC_FORMAT_DSBT_ELF)-$(UCLIBC_LDSO_NAME).so := -Wl,--dsbt-index=1 + ifneq ($(SUPPORT_LD_DEBUG),y) + LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS) -- cgit v0.10.2-6-g49f6