[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