From 08da062122aef3020fd4bf258984102d38bfc12d Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 5 Aug 2002 18:56:03 +0000 Subject: 2002-08-05 Roland McGrath * sysdeps/generic/ldsodefs.h (struct rtld_global): Replace member `bool _dl_initial_dtv_malloced' with `void *_dl_initial_dtv'. * elf/rtld.c (dl_main): Set it to the new dtv for the main thread. * sysdeps/generic/dl-tls.c (__tls_get_addr): When reallocating the dtv, check if it matches _dl_initial_dtv; if so, malloc and copy the old data, abandoning the original memory allocated by rtld at startup, instead of calling realloc normally. --- elf/rtld.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'elf') diff --git a/elf/rtld.c b/elf/rtld.c index 1472c18..a035a26 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -1091,6 +1091,10 @@ of this helper program; chances are you did not intend to run this program.\n\ if (tcbp == NULL) _dl_fatal_printf ("\ cannot allocate TLS data structures for initial thread"); + + /* Store for detection of the special case by __tls_get_addr + so it knows not to pass this dtv to the normal realloc. */ + _dl_initial_dtv = GET_DTV (tcbp); } #endif -- cgit v1.1