diff --git a/ChangeLog b/ChangeLog index 687291b639..7489eaf59d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-09-12 Roland McGrath + + * 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 * 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)