diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-05-07 13:26:34 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-06-24 16:30:58 -0700 |
commit | a7fcc2f8edb26e4d54b6a740aaa3f3bb0caebd14 (patch) | |
tree | 93de3ec2350c8af7ccc5927071f38382be139de2 | |
parent | f9536db79065ad00efd877b4d80a1dd06938bd0a (diff) | |
download | glibc-a7fcc2f8edb26e4d54b6a740aaa3f3bb0caebd14.zip glibc-a7fcc2f8edb26e4d54b6a740aaa3f3bb0caebd14.tar.gz glibc-a7fcc2f8edb26e4d54b6a740aaa3f3bb0caebd14.tar.bz2 |
Align TCB offset to the maximum alignment
We need to align TCB offset to the maximum alignment for TLS_TCB_AT_TP
targets, as _dl_allocate_tls_storage (in elf/dl-tls.c) does using
__libc_memalign and dl_tls_static_align.
[BZ #18383]
* csu/libc-tls.c (__libc_setup_tls) [TLS_TCB_AT_TP]: Align
TCB_OFFSET to MAX_ALIGN, not just TCBALIGN. Add comment.
* elf/Makefile (test-xfail-tst-tlsalign{,-static}): Remove
comment for i386/x86-64.
(test-xfail-tst-tlsalign-extern-static): Removed.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | csu/libc-tls.c | 5 | ||||
-rw-r--r-- | elf/Makefile | 5 |
3 files changed, 14 insertions, 5 deletions
@@ -1,3 +1,12 @@ +2015-06-24 H.J. Lu <hongjiu.lu@intel.com> + + [BZ #18383] + * csu/libc-tls.c (__libc_setup_tls) [TLS_TCB_AT_TP]: Align + TCB_OFFSET to MAX_ALIGN, not just TCBALIGN. Add comment. + * elf/Makefile (test-xfail-tst-tlsalign{,-static}): Remove + comment for i386/x86-64. + (test-xfail-tst-tlsalign-extern-static): Removed. + 2015-06-24 Joseph Myers <joseph@codesourcery.com> * math/test-double.h: New file. diff --git a/csu/libc-tls.c b/csu/libc-tls.c index 64d1779..3f13425 100644 --- a/csu/libc-tls.c +++ b/csu/libc-tls.c @@ -138,7 +138,10 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) to request some surplus that permits dynamic loading of modules with IE-model TLS. */ #if TLS_TCB_AT_TP - tcb_offset = roundup (memsz + GL(dl_tls_static_size), tcbalign); + /* Align the TCB offset to the maximum alignment, as + _dl_allocate_tls_storage (in elf/dl-tls.c) does using __libc_memalign + and dl_tls_static_align. */ + tcb_offset = roundup (memsz + GL(dl_tls_static_size), max_align); tlsblock = __sbrk (tcb_offset + tcbsize + max_align); #elif TLS_DTV_AT_TP tcb_offset = roundup (tcbsize, align ?: 1); diff --git a/elf/Makefile b/elf/Makefile index 871cb4f..4ea3ccf 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -523,16 +523,13 @@ $(objpfx)tst-initorder: $(objpfx)tst-initordera4.so $(objpfx)tst-initordera1.so $(objpfx)tst-null-argv: $(objpfx)tst-null-argv-lib.so $(objpfx)tst-tlsalign: $(objpfx)tst-tlsalign-lib.so -# BZ#18383: broken on at least ARM (both) and i386/x86-64 (static only). +# BZ#18383: broken on at least ARM (both). test-xfail-tst-tlsalign = yes test-xfail-tst-tlsalign-static = yes $(objpfx)tst-tlsalign-extern: $(objpfx)tst-tlsalign-vars.o $(objpfx)tst-tlsalign-extern-static: $(objpfx)tst-tlsalign-vars.o -# BZ#18383: broken on at least i386/x86-64 (static only). -test-xfail-tst-tlsalign-extern-static = yes - tst-null-argv-ENV = LD_DEBUG=all LD_DEBUG_OUTPUT=$(objpfx)tst-null-argv.debug.out LDFLAGS-nodel2mod3.so = $(no-as-needed) LDFLAGS-reldepmod5.so = $(no-as-needed) |