Patchwork Section anchors and thread-local storage

login
register
mail settings
Submitter David Edelsohn
Date Nov. 26, 2012, 4:53 p.m.
Message ID <CAGWvnynJvdTwwBEfFsRZc+=c9hpDdJiVg_4ZWfo9X6sFEkJGew@mail.gmail.com>
Download mbox | patch
Permalink /patch/201733/
State New
Headers show

Comments

David Edelsohn - Nov. 26, 2012, 4:53 p.m.
On Mon, Nov 26, 2012 at 3:26 AM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> David Edelsohn <dje.gcc@gmail.com> writes:
>> I have been working to enable native thread-local storage on AIX. One
>> problem I encountered is the AIX assembler has difficulty with the
>> anchor symbol for TLS CSECTs.  While the section anchors machinery
>> uses a separate pool for TLS entries, should section anchor blocks be
>> used for TLS symbols at all?
>>
>> powerpc-linux uses GOT annotations directly and never places TLS
>> symbols in the TOC at all. Section anchors seem to be avoided by TLS
>> code already.  The appended patch rejects TLS symbols for object
>> blocks in general. I could add a target hook, but I wanted to propose
>> this policy in general before pursing a target-specific hook.
>
> Yeah, TLS anchors "work" on mips64-linux-gnu, although admittedly
> section anchors aren't yet enabled by default there, so perhaps not
> many people have tried it.

I know that it *CAN* work. Part of my question was whether
thread-local symbols *SHOULD* be placed in section anchor blocks,
whether or not they can be placed there on some systems.

> A use_blocks_for_decl_p hook sounds good, and fits nicely with
> targetm.use_blocks_for_constant_p.

Below is the implementation as a new target hook.

Thanks, David

        * target.def (use_blocks_for_decl_p): New hook.
        * varasm.c (use_blocks_for_decl_p): Apply hook as final condition.
Richard Sandiford - Nov. 27, 2012, 8:17 p.m.
David Edelsohn <dje.gcc@gmail.com> writes:
> Below is the implementation as a new target hook.

Looks good to me.  The documentation string needs filling in though,
with a hook placeholder in tm.texi.in.

Richard
David Edelsohn - Nov. 27, 2012, 8:44 p.m.
On Tue, Nov 27, 2012 at 3:17 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> David Edelsohn <dje.gcc@gmail.com> writes:
>> Below is the implementation as a new target hook.
>
> Looks good to me.  The documentation string needs filling in though,
> with a hook placeholder in tm.texi.in.

Yes.

Thanks, David

Patch

Index: target.def
===================================================================
--- target.def  (revision 193798)
+++ target.def  (working copy)
@@ -1495,6 +1495,13 @@ 
  bool, (enum machine_mode mode, const_rtx x),
  hook_bool_mode_const_rtx_false)

+/* True if the given decl can be put into an object_block.  */
+DEFHOOK
+(use_blocks_for_decl_p,
+ "",
+ bool, (const_tree decl),
+ hook_bool_const_tree_true)
+
 /* The minimum and maximum byte offsets for anchored addresses.  */
 DEFHOOKPOD
 (min_anchor_offset,
Index: varasm.c
===================================================================
--- varasm.c    (revision 193798)
+++ varasm.c    (working copy)
@@ -1113,7 +1113,7 @@ 
   if (lookup_attribute ("alias", DECL_ATTRIBUTES (decl)))
     return false;

-  return true;
+  return targetm.use_blocks_for_decl_p (decl);
 }

 /* Create the DECL_RTL for a VAR_DECL or FUNCTION_DECL.  DECL should