mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
b664c03f18
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. llvm-svn: 185945 |
||
---|---|---|
.. | ||
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 | ||
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 |