From e13e33e279e193191e06811cb7ae3518d7acad1a Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 22 Feb 2005 03:51:38 +0000 Subject: 2005-02-21 Alan Modra * elf/dl-reloc.c (_dl_nothread_init_static_tls): Assert that dtv array index is within bounds. * elf/dl-load.c: Do not allow PT_TLS in modules loaded in statically linked code. * sysdeps/generic/dl-tls.c [!SHARED]: Don't build _dl_next_tls_modid. * elf/Makefile: Remove rules to build and run tst-tls9-static. --- elf/dl-load.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'elf/dl-load.c') diff --git a/elf/dl-load.c b/elf/dl-load.c index 088b2224e2..5c562471c9 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1056,6 +1056,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp, case PT_TLS: #ifdef USE_TLS +# ifdef SHARED if (ph->p_memsz == 0) /* Nothing to do for an empty segment. */ break; @@ -1083,7 +1084,6 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp, break; } -# ifdef SHARED if (l->l_prev == NULL || (mode & __RTLD_AUDIT) != 0) /* We are loading the executable itself when the dynamic linker was executed directly. The setup will happen later. */ @@ -1092,7 +1092,6 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp, /* In a static binary there is no way to tell if we dynamically loaded libpthread. */ if (GL(dl_error_catch_tsd) == &_dl_initial_error_catch_tsd) -# endif { /* We have not yet loaded libpthread. We can do the TLS setup right now! */ @@ -1125,6 +1124,12 @@ cannot allocate TLS data structures for initial thread"); _dl_deallocate_tls (tcb, 1); goto call_lose; } +# else + errval = EINVAL; + errstring = N_("\ +statically linked code cannot load module with TLS"); + goto call_lose; +# endif #endif /* Uh-oh, the binary expects TLS support but we cannot -- cgit 1.4.1