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 Whitespace. 2013-06-02 19:51:54 +00:00
MachineLocation.h
MCAsmBackend.h
MCAsmInfo.h Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCAsmInfoCOFF.h
MCAsmInfoDarwin.h
MCAsmLayout.h
MCAssembler.h
MCAtom.h
MCCodeEmitter.h
MCCodeGenInfo.h
MCContext.h MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
MCDirectives.h
MCDisassembler.h
MCDwarf.h [MC/DWARF] Support .debug_frame / .debug_line code alignment factors 2013-06-12 14:46:54 +00:00
MCELF.h
MCELFObjectWriter.h
MCELFStreamer.h Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCELFSymbolFlags.h
MCExpr.h [PowerPC] Revert r185476 and fix up TLS variant kinds 2013-07-09 16:41:09 +00:00
MCExternalSymbolizer.h
MCFixedLenDisassembler.h
MCFixup.h
MCFixupKindInfo.h
MCFunction.h
MCInst.h
MCInstBuilder.h
MCInstPrinter.h
MCInstrAnalysis.h
MCInstrDesc.h
MCInstrInfo.h
MCInstrItineraries.h Machine Model: Add MicroOpBufferSize and resource BufferSize. 2013-06-15 04:49:57 +00:00
MCLabel.h
MCMachObjectWriter.h
MCMachOSymbolFlags.h
MCModule.h Remove use of asymmetric std::lower_bound comparator. 2013-07-04 23:20:12 +00:00
MCObjectDisassembler.h
MCObjectFileInfo.h
MCObjectStreamer.h Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCObjectSymbolizer.h MCObjectSymbolizer: Switch from IntervalMap to sorted vector, following r182625. 2013-05-30 18:18:36 +00:00
MCObjectWriter.h
MCRegisterInfo.h Make SubRegIndex size mandatory, following r183020. 2013-05-31 23:45:26 +00:00
MCRelocationInfo.h
MCSchedule.h Machine Model: Add MicroOpBufferSize and resource BufferSize. 2013-06-15 04:49:57 +00:00
MCSection.h
MCSectionCOFF.h MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
MCSectionELF.h
MCSectionMachO.h
MCStreamer.h Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCSubtargetInfo.h
MCSymbol.h
MCSymbolizer.h
MCTargetAsmParser.h
MCValue.h
MCWin64EH.h
MCWinCOFFObjectWriter.h
SectionKind.h
SubtargetFeature.h