[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:46:48 PST 2012


On Mon, 2012-12-03 at 14:42 -0600, Hal Finkel wrote:
> Bill,
> 
> Thanks for working on this!
> 
> One quick comment: please add triples to the test cases (otherwise the Darwin ppc builtbots may complain).

Hi Hal,

I have triples in there, using the "target triple" syntax.  This is what
I've been doing for my other patches without problems.  Is it preferable
to put it on the command line?

Thanks,
Bill

> 
>  -Hal
> 
> ----- Original Message -----
> > From: "Bill Schmidt" <wschmidt at linux.vnet.ibm.com>
> > To: llvm-commits at cs.uiuc.edu
> > Sent: Monday, December 3, 2012 2:09:05 PM
> > Subject: [llvm-commits] [PATCH,	RFC] 64-bit PowerPC ELF support for Initial Exec TLS model
> > 
> > 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.
> > 
> > 
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> > 
> 





More information about the llvm-commits mailing list