diff options
author | kib <kib@FreeBSD.org> | 2010-08-23 15:38:02 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-08-23 15:38:02 +0000 |
commit | df9bc4850f3a6aef289d53c0c3d1fc78d63bdda2 (patch) | |
tree | 509be3ad57df8011e952d3da4691f43abd346d2e /lib/libc/gen/Symbol.map | |
parent | 7ca1c6f40abcb8550b7bbf0c67ceb3a73d93b342 (diff) | |
download | FreeBSD-src-df9bc4850f3a6aef289d53c0c3d1fc78d63bdda2.zip FreeBSD-src-df9bc4850f3a6aef289d53c0c3d1fc78d63bdda2.tar.gz |
On shared object unload, in __cxa_finalize, call and clear all installed
atexit and __cxa_atexit handlers that are either installed by unloaded
dso, or points to the functions provided by the dso.
Use _rtld_addr_phdr to locate segment information from the address of
private variable belonging to the dso, supplied by crtstuff.c. Provide
utility function __elf_phdr_match_addr to do the match of address against
dso executable segment.
Call back into libthr from __cxa_finalize using weak
__pthread_cxa_finalize symbol to remove any atfork handler which
function points into unloaded object.
The rtld needs private __pthread_cxa_finalize symbol to not require
resolution of the weak undefined symbol at initialization time. This
cannot work, since rtld is relocated before sym_zero is set up.
Idea by: kan
Reviewed by: kan (previous version)
MFC after: 3 weeks
Diffstat (limited to 'lib/libc/gen/Symbol.map')
-rw-r--r-- | lib/libc/gen/Symbol.map | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map index c4f21b5..6bd3140 100644 --- a/lib/libc/gen/Symbol.map +++ b/lib/libc/gen/Symbol.map @@ -451,6 +451,7 @@ FBSDprivate_1.0 { _rtld_atfork_post; _rtld_error; /* for private use */ _rtld_thread_init; /* for private use */ + __elf_phdr_match_addr; _err; _warn; __fmtcheck; |