------- Comment #21 from davek at gcc dot gnu dot org  2009-09-15 17:51 -------
(In reply to comment #19)
> Index: varasm.c
> ===================================================================
> --- varasm.c    (revision 151703)
> +++ varasm.c    (working copy)
> @@ -6420,6 +6420,8 @@ default_encode_section_info (tree decl, rtx rtl, i
>    if (targetm.have_tls && TREE_CODE (decl) == VAR_DECL
>        && DECL_THREAD_LOCAL_P (decl))
>      flags |= DECL_TLS_MODEL (decl) << SYMBOL_FLAG_TLS_SHIFT;
> +  else if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
> +      flags |= TLS_MODEL_EMULATED << SYMBOL_FLAG_TLS_SHIFT;
>    else if (targetm.in_small_data_p (decl))
>      flags |= SYMBOL_FLAG_SMALL;
>    /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names?  Without
> 
> Can't you do
> 
> if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
> {
>   if (targetm.have_tls)
>   else
> }

  Yes, or I can do this:

Index: varasm.c
===================================================================
--- varasm.c    (revision 151703)
+++ varasm.c    (working copy)
@@ -6417,9 +6417,9 @@ default_encode_section_info (tree decl, rtx rtl, i
     flags |= SYMBOL_FLAG_FUNCTION;
   if (targetm.binds_local_p (decl))
     flags |= SYMBOL_FLAG_LOCAL;
-  if (targetm.have_tls && TREE_CODE (decl) == VAR_DECL
-      && DECL_THREAD_LOCAL_P (decl))
-    flags |= DECL_TLS_MODEL (decl) << SYMBOL_FLAG_TLS_SHIFT;
+  if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL_P (decl))
+    flags |= (targetm.have_tls ? DECL_TLS_MODEL (decl) : TLS_MODEL_EMULATED)
+               << SYMBOL_FLAG_TLS_SHIFT;
   else if (targetm.in_small_data_p (decl))
     flags |= SYMBOL_FLAG_SMALL;
   /* ??? Why is DECL_EXTERNAL ever set for non-PUBLIC names?  Without

  I'll test this variant.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41357

Reply via email to