2007-05-03 Jakub Jelinek * varasm.c (align_variable): Don't increase alignment for DECL_THREAD_LOCAL_P variables above BITS_PER_WORD through DATA_ALIGNMENT or CONSTANT_ALIGNMENT. --- gcc/varasm.c.jj 2007-04-14 14:55:25.000000000 +0200 +++ gcc/varasm.c 2007-05-03 11:23:56.000000000 +0200 @@ -1097,11 +1097,22 @@ align_variable (tree decl, bool dont_out if (! DECL_USER_ALIGN (decl)) { #ifdef DATA_ALIGNMENT - align = DATA_ALIGNMENT (TREE_TYPE (decl), align); + unsigned int data_align = DATA_ALIGNMENT (TREE_TYPE (decl), align); + /* Don't increase alignment too much for TLS variables - TLS space + is too precious. */ + if (! DECL_THREAD_LOCAL_P (decl) || data_align <= BITS_PER_WORD) + align = data_align; #endif #ifdef CONSTANT_ALIGNMENT if (DECL_INITIAL (decl) != 0 && DECL_INITIAL (decl) != error_mark_node) - align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), align); + { + unsigned int const_align = CONSTANT_ALIGNMENT (DECL_INITIAL (decl), + align); + /* Don't increase alignment too much for TLS variables - TLS space + is too precious. */ + if (! DECL_THREAD_LOCAL_P (decl) || const_align <= BITS_PER_WORD) + align = const_align; + } #endif }