llvm-mirror/lib/MC
Ulrich Weigand b664c03f18 [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.

llvm-svn: 185945
2013-07-09 16:41:09 +00:00
..
MCDisassembler Use pointers to the MCAsmInfo and MCRegInfo. 2013-06-18 07:20:20 +00:00
MCParser MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
CMakeLists.txt MC: Disassembled CFG reconstruction. 2013-05-24 01:07:04 +00:00
ELFObjectWriter.cpp Remove MCELFObjectTargetWriter::adjustFixupOffset hack 2013-05-15 15:07:42 +00:00
LLVMBuild.txt LLVMBuild: Introduce a common section which currently has a list of the 2011-12-12 22:45:54 +00:00
MachObjectWriter.cpp [MC/Mach-O] Load commands are supposed to 8-byte aligned on 64-bit. 2013-01-22 03:42:49 +00:00
Makefile start straightening out libedis's dependencies and make it fit 2010-07-20 18:25:19 +00:00
MCAsmBackend.cpp MachO: direct-to-object attribute for data-in-code markers. 2012-10-01 22:20:54 +00:00
MCAsmInfo.cpp DebugInfo: PR14404: Avoid truncating 64 bit values into 32 bits for ULEB128/SLEB128 generation 2013-06-23 18:31:11 +00:00
MCAsmInfoCOFF.cpp Remove unused DwarfSectionOffsetDirective string 2013-04-22 22:49:11 +00:00
MCAsmInfoDarwin.cpp Fix alignment of .comm and .lcomm on mingw32. 2012-09-07 21:08:01 +00:00
MCAsmStreamer.cpp Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCAssembler.cpp Use MCFillFragment for zero-initialized data. 2013-06-27 14:35:03 +00:00
MCAtom.cpp MC: Disassembled CFG reconstruction. 2013-05-24 01:07:04 +00:00
MCCodeEmitter.cpp MC: Move target specific fixup info descriptors to TargetAsmBackend instead of 2010-12-16 03:20:06 +00:00
MCCodeGenInfo.cpp Sink codegen optimization level into MCCodeGenInfo along side relocation model 2011-11-16 08:38:26 +00:00
MCContext.cpp MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
MCDisassembler.cpp Follow up of the introduction of MCSymbolizer. 2013-05-24 22:51:52 +00:00
MCDwarf.cpp Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCELF.cpp ELF symbol table field st_other support, 2013-02-19 21:57:35 +00:00
MCELFObjectTargetWriter.cpp Cleanup relocation sorting for ELF. 2013-05-15 18:22:01 +00:00
MCELFStreamer.cpp [PowerPC] Revert r185476 and fix up TLS variant kinds 2013-07-09 16:41:09 +00:00
MCExpr.cpp [PowerPC] Revert r185476 and fix up TLS variant kinds 2013-07-09 16:41:09 +00:00
MCExternalSymbolizer.cpp Follow up of the introduction of MCSymbolizer. 2013-05-24 22:51:52 +00:00
MCFunction.cpp MC: Disassembled CFG reconstruction. 2013-05-24 01:07:04 +00:00
MCInst.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
MCInstPrinter.cpp Try to unbreak the build on hosts that don't transitively pull in a definition for int64_t. 2012-12-05 18:31:11 +00:00
MCInstrAnalysis.cpp MC: Disassembled CFG reconstruction. 2013-05-24 01:07:04 +00:00
MCLabel.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
MCMachObjectTargetWriter.cpp MC/Mach-O: On second thought, use a custom hook for enabling aggressive 2010-12-17 05:50:29 +00:00
MCMachOStreamer.cpp Add support for subsections to the ELF assembler. Fixes PR8717. 2013-04-17 21:18:16 +00:00
MCModule.cpp Remove use of asymmetric std::lower_bound comparator. 2013-07-04 23:20:12 +00:00
MCNullStreamer.cpp Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCObjectDisassembler.cpp Allow creation of single-byte MCAtoms. 2013-06-19 20:18:59 +00:00
MCObjectFileInfo.cpp Revert: Emit personality function and Dwarf EH data for Win64 SEH. 2013-07-08 04:43:23 +00:00
MCObjectStreamer.cpp Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCObjectSymbolizer.cpp Remove debug print added in r182949. 2013-05-30 23:46:47 +00:00
MCObjectWriter.cpp Move [SU]LEB128 encoding to a utility header. 2012-08-08 23:56:06 +00:00
MCPureStreamer.cpp Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCRegisterInfo.cpp Make SubRegIndex size mandatory, following r183020. 2013-05-31 23:45:26 +00:00
MCRelocationInfo.cpp Follow up of the introduction of MCSymbolizer. 2013-05-24 22:51:52 +00:00
MCSection.cpp Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MCSectionCOFF.cpp MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
MCSectionELF.cpp Add support for subsections to the ELF assembler. Fixes PR8717. 2013-04-17 21:18:16 +00:00
MCSectionMachO.cpp Add support for subsections to the ELF assembler. Fixes PR8717. 2013-04-17 21:18:16 +00:00
MCStreamer.cpp Revert: Fix wrong code offset for unwind code SET_FPREG. 2013-07-08 04:48:34 +00:00
MCSubtargetInfo.cpp Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MCSymbol.cpp Fix Doxygen issues: 2012-09-14 14:57:36 +00:00
MCSymbolizer.cpp Add MCSymbolizer for symbolic/annotated disassembly. 2013-05-24 00:39:57 +00:00
MCValue.cpp Release build: guard dump functions with 2012-09-12 05:06:18 +00:00
MCWin64EH.cpp Revert: Fix wrong code offset for unwind code SET_FPREG. 2013-07-08 04:48:34 +00:00
SubtargetFeature.cpp Symbol hygiene: Make sure declarations and definitions match, make helper functions static. 2012-10-20 12:53:26 +00:00
WinCOFFObjectWriter.cpp MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
WinCOFFStreamer.cpp MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00