blob: 7dcb1a074bb510c204691f0440aabbf0d87836d2 [file] [log] [blame]
From 4b8557ec7a4207a46bcac062c857066e1909ce33 Mon Sep 17 00:00:00 2001
From: Stephen McGruer <smcgruer@google.com>
Date: Thu, 29 Oct 2015 18:04:30 -0400
Subject: [PATCH] dlopen: use libname cache before _dl_open-ing files
---
.../uclibc-0071-dlopen-use-libname-cache.patch | 29 ++++++++++++++++++++++
1 file changed, 29 insertions(+)
create mode 100644 package/uclibc/0.9.33.2/uclibc-0071-dlopen-use-libname-cache.patch
diff --git a/package/uclibc/0.9.33.2/uclibc-0071-dlopen-use-libname-cache.patch b/package/uclibc/0.9.33.2/uclibc-0071-dlopen-use-libname-cache.patch
new file mode 100644
index 0000000..5d295cf
--- /dev/null
+++ b/package/uclibc/0.9.33.2/uclibc-0071-dlopen-use-libname-cache.patch
@@ -0,0 +1,29 @@
+commit d0b1894a40fff961c44a2e44840882e5e9048abf
+Author: Stephen McGruer <smcgruer@google.com>
+Date: Thu Oct 29 17:50:44 2015 -0400
+
+ [PATCH] dlopen: use libname cache before _dl_open-ing files
+
+diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
+index 5631905..282a645 100644
+--- a/ldso/ldso/dl-elf.c
++++ b/ldso/ldso/dl-elf.c
+@@ -465,6 +465,18 @@ struct elf_resolve *_dl_load_elf_shared_library(unsigned rflags,
+ DL_LOADADDR_TYPE lib_loadaddr;
+ DL_INIT_LOADADDR_EXTRA_DECLS
+
++ /* We can easily pre-check for already loaded absolute-path libraries. */
++ /* TODO(smcgruer): Determine if we can handle non-absolute paths. */
++ if (_dl_strlen(libname) && libname[0] == '/') {
++ for (tpnt = _dl_loaded_modules; tpnt; tpnt = tpnt->next) {
++ if (_dl_strcmp(tpnt->libname, libname) == 0) {
++ /* Already loaded */
++ tpnt->usage_count++;
++ return tpnt;
++ }
++ }
++ }
++
+ libaddr = 0;
+ infile = _dl_open(libname, O_RDONLY, 0);
+ if (infile < 0) {
--
2.6.0.rc2.230.g3dd15c0