about summary refs log tree commit diff
path: root/include
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2023-10-18 11:30:38 +0200
committerFlorian Weimer <fweimer@redhat.com>2023-10-18 11:30:38 +0200
commitdd32e1db386c77c61850a7cbd0c126b7b3c63ece (patch)
tree9f0c9c3ead1a6be1c63b6841c85ec5597bf10f6a /include
parent2ad9b674cf6cd6ba59c064427cb7aeb43a66d8a9 (diff)
downloadglibc-dd32e1db386c77c61850a7cbd0c126b7b3c63ece.tar.gz
glibc-dd32e1db386c77c61850a7cbd0c126b7b3c63ece.tar.xz
glibc-dd32e1db386c77c61850a7cbd0c126b7b3c63ece.zip
Revert "elf: Always call destructors in reverse constructor order (bug 30785)"
This reverts commit 6985865bc3ad5b23147ee73466583dd7fdf65892.

Reason for revert:

The commit changes the order of ELF destructor calls too much relative
to what applications expect or can handle.  In particular, during
process exit and _dl_fini, after the revert commit, we no longer call
the destructors of the main program first; that only happens after
some dlopen'ed objects have been destructed.  This robs applications
of an opportunity to influence destructor order by calling dlclose
explicitly from the main program's ELF destructors.  A couple of
different approaches involving reverse constructor order were tried,
and none of them worked really well.  It seems we need to keep the
dependency sorting in _dl_fini.

There is also an ambiguity regarding nested dlopen calls from ELF
constructors: Should those destructors run before or after the object
that called dlopen?  Commit 6985865bc3ad5b2314 used reverse order
of the start of ELF constructor calls for destructors, but arguably
using completion of constructors is more correct.  However, that alone
is not sufficient to address application compatibility issues (it
does not change _dl_fini ordering at all).
Diffstat (limited to 'include')
-rw-r--r--include/link.h4
1 files changed, 0 insertions, 4 deletions
diff --git a/include/link.h b/include/link.h
index c6af095d87..adb3886193 100644
--- a/include/link.h
+++ b/include/link.h
@@ -276,10 +276,6 @@ struct link_map
     /* List of object in order of the init and fini calls.  */
     struct link_map **l_initfini;
 
-    /* Linked list of objects in reverse ELF constructor execution
-       order.  Head of list is stored in _dl_init_called_list.  */
-    struct link_map *l_init_called_next;
-
     /* List of the dependencies introduced through symbol binding.  */
     struct link_map_reldeps
       {