[uClibc-cvs] CVS update of uClibc/ldso (ldso/dl-hash.c libdl/libdl.c)

Joakim Tjernlund jocke at codepoet.org
Thu Aug 26 14:00:04 UTC 2004


    Date: Thursday, August 26, 2004 @ 08:00:04
  Author: jocke
    Path: /var/cvs/uClibc/ldso

Modified: ldso/dl-hash.c (1.23 -> 1.24) libdl/libdl.c (1.50 -> 1.51)

Added test for RTLD_GLOBAL flag in _dl_find_hash().
Fixed a bug in libdl.c where the RTLD_GLOBAL was assigned
wronly.


Index: uClibc/ldso/ldso/dl-hash.c
diff -u uClibc/ldso/ldso/dl-hash.c:1.23 uClibc/ldso/ldso/dl-hash.c:1.24
--- uClibc/ldso/ldso/dl-hash.c:1.23	Mon Aug  9 02:11:53 2004
+++ uClibc/ldso/ldso/dl-hash.c	Thu Aug 26 08:00:04 2004
@@ -173,6 +173,8 @@
 	for (; rpnt; rpnt = rpnt->next) {
 		tpnt = rpnt->dyn;
 
+		if (!(tpnt->rtld_flags & RTLD_GLOBAL))
+			continue;
 		/* Don't search the executable when resolving a copy reloc. */
 		if ((type_class &  ELF_RTYPE_CLASS_COPY) && tpnt->libtype == elf_executable)
 			continue;
Index: uClibc/ldso/libdl/libdl.c
diff -u uClibc/ldso/libdl/libdl.c:1.50 uClibc/ldso/libdl/libdl.c:1.51
--- uClibc/ldso/libdl/libdl.c:1.50	Wed Aug 25 08:22:05 2004
+++ uClibc/ldso/libdl/libdl.c	Thu Aug 26 08:00:03 2004
@@ -223,13 +223,14 @@
 				_dl_memset (dyn_ptr->next, 0, sizeof (struct dyn_elf));
 				dyn_ptr = dyn_ptr->next;
 				dyn_ptr->dyn = tpnt1;
-				tpnt->rtld_flags |= RTLD_GLOBAL;
 				if (!tpnt1) {
 					tpnt1 = _dl_load_shared_library(0, &rpnt, tcurr, lpntstr, 0);
+					dyn_ptr->dyn = tpnt1;
 					if (!tpnt1)
 						goto oops;
-					dyn_ptr->dyn = tpnt1;
+					tpnt1->rtld_flags |= RTLD_GLOBAL;
 				} else {
+					tpnt1->rtld_flags |= RTLD_GLOBAL;
 					tpnt1->usage_count++;
 				}
 			}



More information about the uClibc-cvs mailing list