diff options
Diffstat (limited to 'libpthread')
-rw-r--r-- | libpthread/nptl/sysdeps/generic/Makefile.in | 4 | ||||
-rw-r--r-- | libpthread/nptl/sysdeps/generic/libc-tls.c | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/libpthread/nptl/sysdeps/generic/Makefile.in b/libpthread/nptl/sysdeps/generic/Makefile.in index eb656ee17..a5ba9bbe8 100644 --- a/libpthread/nptl/sysdeps/generic/Makefile.in +++ b/libpthread/nptl/sysdeps/generic/Makefile.in @@ -13,6 +13,10 @@ subdirs += libpthread/nptl/sysdeps/generic libpthread_generic_DIR := $(top_srcdir)libpthread/nptl/sysdeps/generic libpthread_generic_OUT := $(top_builddir)libpthread/nptl/sysdeps/generic +ifeq ($(STATIC_PIE),y) +CFLAGS-libc-tls.c := -DSTATIC_PIE +endif + libpthread_generic_libc_a_CSRC = libc-tls.c libpthread_generic_libc_a_COBJ = $(patsubst %.c,$(libpthread_generic_OUT)/%.o,$(libpthread_generic_libc_a_CSRC)) libpthread_generic_libc_a_OBJS = $(libpthread_generic_libc_a_COBJ) diff --git a/libpthread/nptl/sysdeps/generic/libc-tls.c b/libpthread/nptl/sysdeps/generic/libc-tls.c index d746c9a38..0c8c558d0 100644 --- a/libpthread/nptl/sysdeps/generic/libc-tls.c +++ b/libpthread/nptl/sysdeps/generic/libc-tls.c @@ -142,6 +142,10 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) initimage = (void *) &__tdata_start; #else initimage = (void *) phdr->p_vaddr; +#if !defined(SHARED) && defined(STATIC_PIE) + extern ElfW(Addr) _dl_load_base; + initimage += _dl_load_base; +#endif #endif align = phdr->p_align; if (phdr->p_align > max_align) |