http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages/cooker/glibc/current/SOURCES/glibc-2.14-libdl-crash.patch?view=markup&pathrev=691343
http://repos.archlinuxppc.org/wsvn/filedetails.php?repname=packages&path=%2Fglibc%2Ftrunk%2Fglibc-2.14-libdl-crash.patch
-diff --git a/elf/dl-close.c b/elf/dl-close.c
-index 73b2a2f..9bd91e3 100644
---- a/elf/dl-close.c
-+++ b/elf/dl-close.c
-@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map)
+Index: libc/elf/dl-close.c
+===================================================================
+--- libc.orig/elf/dl-close.c 2011-12-05 20:16:38.000000000 -0800
++++ libc/elf/dl-close.c 2011-12-05 20:17:15.863326893 -0800
+@@ -119,17 +119,8 @@
if (map->l_direct_opencount > 0 || map->l_type != lt_loaded
|| dl_close_state != not_pending)
{
+ dl_close_state = rerun;
/* There are still references to this object. Do nothing more. */
- if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
-diff --git a/elf/dl-deps.c b/elf/dl-deps.c
-index 9e30594..3890d00 100644
---- a/elf/dl-deps.c
-+++ b/elf/dl-deps.c
-@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map,
+ if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_FILES, 0))
+Index: libc/elf/dl-deps.c
+===================================================================
+--- libc.orig/elf/dl-deps.c 2011-12-05 20:16:38.000000000 -0800
++++ libc/elf/dl-deps.c 2011-12-05 20:19:33.179326877 -0800
+@@ -478,6 +478,7 @@
nneeded * sizeof needed[0]);
atomic_write_barrier ();
l->l_initfini = l_initfini;
}
/* If we have no auxiliary objects just go on to the next map. */
-@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING"));
+@@ -678,6 +679,7 @@
l_initfini[nlist] = NULL;
atomic_write_barrier ();
map->l_initfini = l_initfini;
if (l_reldeps != NULL)
{
atomic_write_barrier ();
-@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING"));
+@@ -686,7 +688,7 @@
_dl_scope_free (old_l_reldeps);
}
if (old_l_initfini != NULL)
- map->l_orig_initfini = old_l_initfini;
-+ _dl_scope_free (old_l_initfini);
- }
-diff --git a/elf/dl-libc.c b/elf/dl-libc.c
-index 7be9483..a13fce3 100644
---- a/elf/dl-libc.c
-+++ b/elf/dl-libc.c
-@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem)
++ _dl_scope_free (old_l_initfini);
+
+ if (errno_reason)
+ _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname,
+Index: libc/elf/dl-libc.c
+===================================================================
+--- libc.orig/elf/dl-libc.c 2011-10-22 09:34:03.000000000 -0700
++++ libc/elf/dl-libc.c 2011-12-05 20:17:15.863326893 -0800
+@@ -265,13 +265,13 @@
for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
{
while (lnp != NULL)
{
struct libname_list *old = lnp;
-@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem)
+@@ -279,6 +279,10 @@
if (! old->dont_free)
free (old);
}
}
if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
-diff --git a/elf/rtld.c b/elf/rtld.c
-index 4a9109e..617e30e 100644
---- a/elf/rtld.c
-+++ b/elf/rtld.c
-@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
+Index: libc/elf/rtld.c
+===================================================================
+--- libc.orig/elf/rtld.c 2011-10-22 09:34:03.000000000 -0700
++++ libc/elf/rtld.c 2011-12-05 20:17:15.863326893 -0800
+@@ -2264,6 +2264,7 @@
lnp->dont_free = 1;
lnp = lnp->next;
}
if (l != &GL(dl_rtld_map))
_dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
-diff --git a/include/link.h b/include/link.h
-index e877104..051b99a 100644
---- a/include/link.h
-+++ b/include/link.h
-@@ -192,6 +192,9 @@ struct link_map
+Index: libc/include/link.h
+===================================================================
+--- libc.orig/include/link.h 2011-10-22 09:32:35.000000000 -0700
++++ libc/include/link.h 2011-12-05 20:17:15.863326893 -0800
+@@ -192,6 +192,9 @@
during LD_TRACE_PRELINKING=1
contains any DT_SYMBOLIC
libraries. */
/* Collected information about own RPATH directories. */
struct r_search_path_struct l_rpath_dirs;
-@@ -240,9 +243,6 @@ struct link_map
+@@ -240,9 +243,6 @@
/* List of object in order of the init and fini calls. */
struct link_map **l_initfini;