[PATCH] Allow use of executable RPATH/RUNPATH when finding libraries.

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Fri Feb 20 07:32:18 UTC 2015


On February 20, 2015 1:03:26 AM GMT+01:00, Steve Ellcey <sellcey at imgtec.com> wrote:
>This option will modify ldso so that it will use the executables
>RPATH/RUNPATH to find to find libraries even though this behavour
>is not standard.  Setting this option causes the uclibc dynamic linker
>behavour to match the glibc dynamic linker.

Isn't RUNPATH a separate entry?
Thanks,
>
>Signed-off-by: Steve Ellcey <sellcey at imgtec.com>
>---
> extra/Configs/Config.in |    9 +++++++++
> ldso/ldso/dl-elf.c      |   12 ++++++++++++
> 2 files changed, 21 insertions(+)
>
>diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
>index 8e603b2..a235c3d 100644
>--- a/extra/Configs/Config.in
>+++ b/extra/Configs/Config.in
>@@ -418,6 +418,15 @@ config LDSO_RUNPATH
> 	  Usage of RUNPATH tags is not too common, so disabling this feature
> 	  should be safe for most people.
> 
>+config LDSO_RUNPATH_OF_EXECUTABLE
>+	bool "Use executables RPATH/RUNPATH when searching for libraries."
>+	depends on LDSO_RUNPATH
>+	default n
>+	help
>+	  Use the executables RPATH/RUNPATH to find to find libraries even
>+	  though this behavour is not standard.  Setting this option causes
>+	  the uclibc dynamic linker behavour to match the glibc dynamic
>linker.
>+
> config LDSO_SAFE_RUNPATH
> 	bool "Allow only RUNPATH beginning with /"
> 	depends on LDSO_RUNPATH
>diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
>index 54501d1..56076b6 100644
>--- a/ldso/ldso/dl-elf.c
>+++ b/ldso/ldso/dl-elf.c
>@@ -237,6 +237,18 @@ struct elf_resolve
>*_dl_load_shared_library(unsigned rflags, struct dyn_elf **rp
>		if ((tpnt1 = search_for_named_library(libname, rflags, pnt, rpnt)) !=
>NULL)
> 			return tpnt1;
> 	}
>+#ifdef __LDSO_RUNPATH_OF_EXECUTABLE__
>+        /*
>+         * Try the DT_RPATH of the executable itself.
>+         */
>+        pnt = (char *) _dl_loaded_modules->dynamic_info[DT_RPATH];
>+        if (pnt) {
>+                pnt += (unsigned long)
>_dl_loaded_modules->dynamic_info[DT_STRTAB];
>+                _dl_if_debug_dprint("\tsearching exe's RPATH='%s'\n",
>pnt);
>+                if ((tpnt1 = search_for_named_library(libname, rflags,
>pnt, rpnt)) != NULL)
>+                        return tpnt1;
>+        }
>+#endif
> #endif
> 
> #ifdef __LDSO_LD_LIBRARY_PATH__




More information about the uClibc mailing list