forked from rpms/glibc
25 lines
946 B
Diff
25 lines
946 B
Diff
|
Emergency patch for #1778344: A reference to a unique symbol in
|
||
|
libstdc++ causes it to be marked as NODELETE (as expected), but the
|
||
|
assert is not prepared for that situation.
|
||
|
|
||
|
diff --git a/elf/dl-open.c b/elf/dl-open.c
|
||
|
index df9f29a5e5683bf2..763e90187afaf09a 100644
|
||
|
--- a/elf/dl-open.c
|
||
|
+++ b/elf/dl-open.c
|
||
|
@@ -452,12 +452,9 @@ activate_nodelete (struct link_map *new, int mode)
|
||
|
_dl_debug_printf ("activating NODELETE for %s [%lu]\n",
|
||
|
imap->l_name, imap->l_ns);
|
||
|
|
||
|
- /* Only new objects should have set
|
||
|
- link_map_nodelete_pending. Existing objects should not
|
||
|
- have gained any new dependencies and therefore cannot
|
||
|
- reach NODELETE status. */
|
||
|
- assert (!imap->l_init_called || imap->l_type != lt_loaded);
|
||
|
-
|
||
|
+ /* Note that this can also activate NODELETE for objects
|
||
|
+ which had already been loaded at the time of the dlopen
|
||
|
+ call. */
|
||
|
imap->l_nodelete = link_map_nodelete_active;
|
||
|
}
|
||
|
}
|