diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/rtld.c | 7 |
2 files changed, 12 insertions, 0 deletions
@@ -1,3 +1,8 @@ +2002-09-12 Roland McGrath <roland@redhat.com> + + * elf/rtld.c (dl_main) [USE_TLS]: Adjust l_tls_initimage of main + executable if needed, in case it's actually a shared object. + 2002-09-11 Roland McGrath <roland@redhat.com> * elf/dl-load.c (_dl_map_object_from_fd): Use l_addr instead of diff --git a/elf/rtld.c b/elf/rtld.c index 273926ef53..22aa48543a 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -832,6 +832,13 @@ of this helper program; chances are you did not intend to run this program.\n\ break; #endif } +#ifdef USE_TLS + /* Adjust the address of the TLS initialization image in case + the executable is actually an ET_DYN object. */ + if (GL(dl_loaded)->l_tls_initimage != NULL) + GL(dl_loaded)->l_tls_initimage + = (char *) GL(dl_loaded)->l_tls_initimage + GL(dl_loaded)->l_addr; +#endif if (! GL(dl_loaded)->l_map_end) GL(dl_loaded)->l_map_end = ~0; if (! GL(dl_rtld_map).l_libname && GL(dl_rtld_map).l_name) |