llvm-6502/include/llvm/MC
Ulrich Weigand 7a34599db0 [PowerPC] Revert r185476 and fix up TLS variant kinds
In the commit message to r185476 I wrote:

>The PowerPC-specific modifiers VK_PPC_TLSGD and VK_PPC_TLSLD
>correspond exactly to the generic modifiers VK_TLSGD and VK_TLSLD.
>This causes some confusion with the asm parser, since VK_PPC_TLSGD
>is output as @tlsgd, which is then read back in as VK_TLSGD.
>
>To avoid this confusion, this patch removes the PowerPC-specific
>modifiers and uses the generic modifiers throughout.  (The only
>drawback is that the generic modifiers are printed in upper case
>while the usual convention on PowerPC is to use lower-case modifiers.
>But this is just a cosmetic issue.)

This was unfortunately incorrect, there is is fact another,
serious drawback to using the default VK_TLSLD/VK_TLSGD
variant kinds: using these causes ELFObjectWriter::RelocNeedsGOT
to return true, which in turn causes the ELFObjectWriter to emit
an undefined reference to _GLOBAL_OFFSET_TABLE_.

This is a problem on powerpc64, because it uses the TOC instead
of the GOT, and the linker does not provide _GLOBAL_OFFSET_TABLE_,
so the symbol remains undefined.  This means shared libraries
using TLS built with the integrated assembler are currently
broken.

While the whole RelocNeedsGOT / _GLOBAL_OFFSET_TABLE_ situation
probably ought to be properly fixed at some point, for now I'm
simply reverting the r185476 commit.  Now this in turn exposes
the breakage of handling @tlsgd/@tlsld in the asm parser that
this check-in was originally intended to fix.

To avoid this regression, I'm also adding a different fix for
this problem: while common code now parses @tlsgd as VK_TLSGD,
a special hack in the asm parser translates this code to the
platform-specific VK_PPC_TLSGD that the back-end now expects.
While this is not really pretty, it's self-contained and
shouldn't hurt anything else for now.  One the underlying
problem is fixed, this hack can be reverted again.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185945 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-09 16:41:09 +00:00
..
MCParser
MachineLocation.h
MCAsmBackend.h
MCAsmInfo.h
MCAsmInfoCOFF.h
MCAsmInfoDarwin.h
MCAsmLayout.h
MCAssembler.h
MCAtom.h
MCCodeEmitter.h
MCCodeGenInfo.h
MCContext.h
MCDirectives.h
MCDisassembler.h
MCDwarf.h
MCELF.h
MCELFObjectWriter.h
MCELFStreamer.h
MCELFSymbolFlags.h
MCExpr.h
MCExternalSymbolizer.h
MCFixedLenDisassembler.h
MCFixup.h
MCFixupKindInfo.h
MCFunction.h
MCInst.h
MCInstBuilder.h
MCInstPrinter.h
MCInstrAnalysis.h
MCInstrDesc.h Resort the #include lines in include/... and lib/... with the 2013-01-02 10:22:59 +00:00
MCInstrInfo.h
MCInstrItineraries.h
MCLabel.h
MCMachObjectWriter.h
MCMachOSymbolFlags.h
MCModule.h
MCObjectDisassembler.h
MCObjectFileInfo.h
MCObjectStreamer.h
MCObjectSymbolizer.h
MCObjectWriter.h
MCRegisterInfo.h
MCRelocationInfo.h
MCSchedule.h
MCSection.h
MCSectionCOFF.h
MCSectionELF.h
MCSectionMachO.h
MCStreamer.h
MCSubtargetInfo.h
MCSymbol.h
MCSymbolizer.h
MCTargetAsmParser.h
MCValue.h
MCWin64EH.h
MCWinCOFFObjectWriter.h
SectionKind.h
SubtargetFeature.h