diff options
author | Roland McGrath <roland@gnu.org> | 2002-09-12 09:15:22 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-09-12 09:15:22 +0000 |
commit | 75aafc716bfcf989abc986c68d506e8a4f991ade (patch) | |
tree | 58ffa005d758692cedd1d11ab2b8d42976e43f89 | |
parent | fb848e15854db60732536c0767ad529b6206311c (diff) | |
download | glibc-75aafc716bfcf989abc986c68d506e8a4f991ade.tar glibc-75aafc716bfcf989abc986c68d506e8a4f991ade.tar.gz glibc-75aafc716bfcf989abc986c68d506e8a4f991ade.tar.bz2 glibc-75aafc716bfcf989abc986c68d506e8a4f991ade.zip |
* elf/rtld.c (dl_main) [USE_TLS]: Adjust l_tls_initimage of main
executable if needed, in case it's actually a shared object.
-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) |