diff options
author | Florian Weimer <fweimer@redhat.com> | 2022-10-27 11:36:44 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2023-09-11 09:35:47 +0200 |
commit | b6c713557688bfb42c6279ec3d8dfab5884510fe (patch) | |
tree | bd5a07389c454b18582aa460ce9f73cded01c075 /sysdeps | |
parent | eb8bf044bd725663fb8747dcf436cc7467ad4be1 (diff) | |
download | glibc-b6c713557688bfb42c6279ec3d8dfab5884510fe.tar.gz glibc-b6c713557688bfb42c6279ec3d8dfab5884510fe.tar.xz glibc-b6c713557688bfb42c6279ec3d8dfab5884510fe.zip |
elf: Introduce to _dl_call_fini
This consolidates the destructor invocations from _dl_fini and dlclose. Remove the micro-optimization that avoids calling _dl_call_fini if they are no destructors (as dlclose is quite expensive anyway). The debug log message is now printed unconditionally. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 6b256b8388..c2627fced7 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -105,6 +105,9 @@ typedef struct link_map *lookup_t; DT_PREINIT_ARRAY. */ typedef void (*dl_init_t) (int, char **, char **); +/* Type of a constructor function, in DT_FINI, DT_FINI_ARRAY. */ +typedef void (*fini_t) (void); + /* On some architectures a pointer to a function is not just a pointer to the actual code of the function but rather an architecture specific descriptor. */ @@ -1048,6 +1051,11 @@ extern void _dl_init (struct link_map *main_map, int argc, char **argv, initializer functions have completed. */ extern void _dl_fini (void) attribute_hidden; +/* Invoke the DT_FINI_ARRAY and DT_FINI destructors for MAP, which + must be a struct link_map *. Can be used as an argument to + _dl_catch_exception. */ +void _dl_call_fini (void *map) attribute_hidden; + /* Sort array MAPS according to dependencies of the contained objects. If FORCE_FIRST, MAPS[0] keeps its place even if the dependencies say otherwise. */ |