[llvm-commits] [PATCH, RFC] 64-bit PowerPC ELF support for Initial Exec TLS model

Bill Schmidt wschmidt at linux.vnet.ibm.com
Mon Dec 3 12:09:05 PST 2012


Here's some incremental progress on thread-local storage.  I've verified
it introduces no regressions.  Thought I'd open it up to comments before
committing in case there's anything obvious I've missed.

I've had one comment that the lib/Target/PowerPC/PPC.h changes could be
a separate patch.  I'm not sure if that's useful, since there isn't any
new testable function by doing that.  But I don't feel strongly either
way.

Thanks,
Bill
-- 
Bill Schmidt, Ph.D.
IBM Advance Toolchain for PowerLinux
IBM Linux Technology Center
wschmidt at linux.vnet.ibm.com
wschmidt at us.ibm.com

--------------------------------------------------------------------------
This patch introduces initial-exec model support for thread-local storage
on 64-bit PowerPC ELF.

The patch includes code to handle external assembly and MC output with the
integrated assembler.  It intentionally does not support the "old" JIT.

For the initial-exec TLS model, the ABI requires the following to calculate
the address of external thread-local variable x:

 Code sequence            Relocation                  Symbol
  ld 9,x at got@tprel(2)      R_PPC64_GOT_TPREL16_DS      x
  add 9,9,x at tls            R_PPC64_TLS                 x

The register 9 is arbitrary here.  The linker will replace x at got@tprel
with the offset relative to the thread pointer to the generated GOT
entry for symbol x.  It will replace x at tls with the thread-pointer
register (13).

The two test cases verify correct assembly output and relocation output
as just described.

PowerPC-specific selection node variants are added for the two
instructions above:  LD_GOT_TPREL and ADD_TLS.  These are inserted
when an initial-exec global variable is encountered by
PPCTargetLowering::LowerGlobalTLSAddress(), and later lowered to
machine instructions LDgotTPREL and ADD8TLS.  LDgotTPREL is a pseudo
that uses the same LDrs support added for medium code model's LDtocL,
with a different relocation type.

The rest of the processing is (relatively) straightforward.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: tls-ie-2012-12-03.patch
Type: text/x-patch
Size: 19824 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121203/c1d6f93d/attachment.bin>


More information about the llvm-commits mailing list