aboutsummaryrefslogtreecommitdiff
path: root/gcc/toplev.c
diff options
context:
space:
mode:
authorIain Sandoe <iains@gcc.gnu.org>2010-05-24 14:36:32 +0000
committerIain Sandoe <iains@gcc.gnu.org>2010-05-24 14:36:32 +0000
commit1db0429a13b229a2a2ad43ca895786871f0b4834 (patch)
tree572e1afe3e6475f92e50a9110276f5d8b13583fa /gcc/toplev.c
parente72e2da4db2f88219961c6615f0d5a673be3aaa4 (diff)
downloadgcc-1db0429a13b229a2a2ad43ca895786871f0b4834.zip
gcc-1db0429a13b229a2a2ad43ca895786871f0b4834.tar.gz
gcc-1db0429a13b229a2a2ad43ca895786871f0b4834.tar.bz2
re PR target/44132 (emutls is broken under a range of circumstances.)
2010-05-24 Iain Sandoe <iains@gcc.gnu.org> PR target/44132 PR middle-end/43602 * varasm.c (get_emutls_init_templ_addr): Copy DECL_PRESERVE_P, DECL_VISIBILITY_SPECIFIED. (emutls_decl): Set DECL_PRESERVE_P and copy DECL_VISIBILITY_SPECIFIED, DECL_RESTRICTED_P. (emutls_finalize_control_var): New callback. (emutls_finish): Finalize emutls control variables. * toplev.c (compile_file): Move the call to emutls_finish () before varpool_assemble_pending_decls (). From-SVN: r159781
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r--gcc/toplev.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 3cf65ba..fcd720d 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1063,6 +1063,11 @@ compile_file (void)
if (errorcount || sorrycount)
return;
+ /* Ensure that emulated TLS control vars are finalized and build
+ a static constructor for them, when it is required. */
+ if (!targetm.have_tls)
+ emutls_finish ();
+
varpool_assemble_pending_decls ();
finish_aliases_2 ();
@@ -1070,10 +1075,6 @@ compile_file (void)
if (flag_mudflap)
mudflap_finish_file ();
- /* Likewise for emulated thread-local storage. */
- if (!targetm.have_tls)
- emutls_finish ();
-
output_shared_constant_pool ();
output_object_blocks ();