This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: BZ #14683: Static dlopen abort on $ORIGIN


On Mon, Oct 15, 2012 at 01:14:53PM -0700, Roland McGrath wrote:
> > What should  GL(dl_ns)[LM_ID_BASE]._ns_loaded be in
> > static executales?
> 
> It should be the first dynamic object.  That is, NULL or the vDSO object
> before any loading has been done.

Here is the updated patch.  Tested on x86-64.  OK to install?

Thanks.


H.J.
---
2012-10-20  H.J. Lu  <hongjiu.lu@intel.com>

	[BZ #14683]
	* elf/Makefile (tests-static): Add tst-leaks1-static.
	(tests): Also depend on $(objpfx)tst-leaks1-static-mem.
	($(objpfx)tst-leaks1-static): New rule.
	($(objpfx)tst-leaks1-static-mem): Likewise.
	(tst-leaks1-static-ENV): New macro.
	* elf/dl-open.c (dl_open_worker): Check the main application
	only if SHARED is defined.
	* elf/tst-leaks1-static.c: New file.

diff --git a/elf/Makefile b/elf/Makefile
index e91c3b4..dde9409 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -119,7 +119,8 @@ tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1
 ifeq (yes,$(have-initfini-array))
 tests += tst-array1 tst-array2 tst-array3 tst-array4 tst-array5
 endif
-tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static
+tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static \
+	       tst-leaks1-static
 ifeq (yes,$(build-shared))
 tests-static += tst-tls9-static
 tst-tls9-static-ENV = \
@@ -161,7 +162,8 @@ endif
 endif
 endif
 ifeq ($(cross-compiling),no)
-tests: $(objpfx)tst-leaks1-mem $(objpfx)noload-mem
+tests: $(objpfx)tst-leaks1-mem $(objpfx)tst-leaks1-static-mem \
+       $(objpfx)noload-mem
 endif
 tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
@@ -1051,7 +1053,12 @@ $(objpfx)tst-leaks1: $(libdl)
 $(objpfx)tst-leaks1-mem: $(objpfx)tst-leaks1.out
 	$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks1.mtrace > $@
 
+$(objpfx)tst-leaks1-static: $(common-objpfx)dlfcn/libdl.a
+$(objpfx)tst-leaks1-static-mem: $(objpfx)tst-leaks1-static.out
+	$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks1-static.mtrace > $@
+
 tst-leaks1-ENV = MALLOC_TRACE=$(objpfx)tst-leaks1.mtrace
+tst-leaks1-static-ENV = MALLOC_TRACE=$(objpfx)tst-leaks1-static.mtrace
 
 $(objpfx)tst-addr1: $(libdl)
 
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 5149e57..9c39a34 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -189,9 +189,11 @@ dl_open_worker (void *a)
     {
       const void *caller_dlopen = args->caller_dlopen;
 
+#ifdef SHARED
       /* We have to find out from which object the caller is calling.
 	 By default we assume this is the main application.  */
       call_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
+#endif
 
       struct link_map *l;
       for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
diff --git a/elf/tst-leaks1-static.c b/elf/tst-leaks1-static.c
new file mode 100644
index 0000000..b956d66
--- /dev/null
+++ b/elf/tst-leaks1-static.c
@@ -0,0 +1 @@
+#include "tst-leaks1.c"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]