llvm-6502/lib/MC
Rafael Espindola 0a70f9b3b9 Look through variables when computing relocations.
Given

bar = foo + 4
	.long bar

MC would eat the 4. GNU as includes it in the relocation. The rule seems to be
that a variable that defines a symbol is used in the relocation and one that
does not define a symbol is evaluated and the result included in the relocation.

Fixing this unfortunately required some other changes:

* Since the variable is now evaluated, it would prevent the ELF writer from
  noticing the weakref marker the elf streamer uses. This patch then replaces
  that with a VariantKind in MCSymbolRefExpr.

* Using VariantKind then requires us to look past other VariantKind to see

	.weakref	bar,foo
	call	bar@PLT

  doing this also fixes

	zed = foo +2
	call zed@PLT

  so that is a good thing.

* Looking past VariantKind means that the relocation selection has to use
  the fixup instead of the target.

This is a reboot of the previous fixes for MC. I will watch the sanitizer
buildbot and wait for a build before adding back the previous fixes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204294 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-20 02:12:01 +00:00
..
MCDisassembler [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-08 07:14:16 +00:00
MCParser Tidy up. Update per naming conventions. 2014-03-18 22:09:10 +00:00
CMakeLists.txt Look through variables when computing relocations. 2014-03-20 02:12:01 +00:00
ELFObjectWriter.cpp Look through variables when computing relocations. 2014-03-20 02:12:01 +00:00
LLVMBuild.txt
MachObjectWriter.cpp Darwin: Add assembler directives to create version-min load commands. 2014-03-18 22:09:05 +00:00
Makefile
MCAsmBackend.cpp Simplify a really complicated check for Arch == X86_64. 2014-03-11 21:22:57 +00:00
MCAsmInfo.cpp Move get[S|U]LEB128Size() to LEB128.h. 2014-02-22 14:00:39 +00:00
MCAsmInfoCOFF.cpp Re-commit: Demote EmitRawText call in AsmPrinter::EmitInlineAsm() and remove hasRawTextSupport() call 2014-02-13 14:44:26 +00:00
MCAsmInfoDarwin.cpp Re-commit: Demote EmitRawText call in AsmPrinter::EmitInlineAsm() and remove hasRawTextSupport() call 2014-02-13 14:44:26 +00:00
MCAsmInfoELF.cpp Refactor the setting of PrivateGlobalPrefix. 2013-12-02 23:39:26 +00:00
MCAsmStreamer.cpp Darwin: Add assembler directives to create version-min load commands. 2014-03-18 22:09:05 +00:00
MCAssembler.cpp Darwin: Add assembler directives to create version-min load commands. 2014-03-18 22:09:05 +00:00
MCAtom.cpp [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
MCCodeEmitter.cpp
MCCodeGenInfo.cpp
MCContext.cpp MC: don't create a backtrace for diagnostics. 2014-03-14 22:41:58 +00:00
MCDisassembler.cpp Change MCDisassembler::setSymbolizer to take unique_ptr by value. 2014-03-07 09:38:02 +00:00
MCDwarf.cpp DebugInfo: Avoid emitting standard opcode lengths in debug_line.dwo headers where opcodes are never used anyway 2014-03-18 02:13:23 +00:00
MCELF.cpp [mc] Fix ELF st_other flag. 2013-12-05 00:34:11 +00:00
MCELFObjectTargetWriter.cpp Provide basic type safety for array_pod_sort comparators. 2013-09-22 14:09:50 +00:00
MCELFStreamer.cpp Look through variables when computing relocations. 2014-03-20 02:12:01 +00:00
MCExpr.cpp Look through variables when computing relocations. 2014-03-20 02:12:01 +00:00
MCExternalSymbolizer.cpp Replace OwningPtr<T> with std::unique_ptr<T>. 2014-03-06 05:51:42 +00:00
MCFixup.cpp Look through variables when computing relocations. 2014-03-20 02:12:01 +00:00
MCFunction.cpp Style cleanup following David's review for r188876. 2013-08-21 19:40:25 +00:00
MCInst.cpp
MCInstPrinter.cpp [MC] When MCInstPrint::printAnnotation uses a comment stream, it has to ensure 2013-10-01 19:21:24 +00:00
MCInstrAnalysis.cpp
MCLabel.cpp
MCMachObjectTargetWriter.cpp
MCMachOStreamer.cpp Darwin: Add assembler directives to create version-min load commands. 2014-03-18 22:09:05 +00:00
MCModule.cpp MC CFG: Split MCBasicBlocks to mirror atom splitting. 2013-08-21 07:28:24 +00:00
MCModuleYAML.cpp Replace OwningPtr<T> with std::unique_ptr<T>. 2014-03-06 05:51:42 +00:00
MCNullStreamer.cpp DebugInfo: Improve reuse of file table entries in asm debug info 2014-03-17 01:52:11 +00:00
MCObjectDisassembler.cpp [C++11] Introduce ObjectFile::symbols() to use range-based loops. 2014-03-17 07:28:19 +00:00
MCObjectFileInfo.cpp MC: Remove superfluous section attribute flag definitions 2014-03-07 07:36:05 +00:00
MCObjectStreamer.cpp MCDwarf: Rename MCDwarfFileTable to MCDwarfLineTable 2014-03-13 21:59:51 +00:00
MCObjectSymbolizer.cpp [C++11] Introduce ObjectFile::symbols() to use range-based loops. 2014-03-17 07:28:19 +00:00
MCObjectWriter.cpp
MCRegisterInfo.cpp
MCRelocationInfo.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
MCSection.cpp
MCSectionCOFF.cpp MC COFF: Emit the 'b' section flag for .bss sections in GNU assembly 2013-12-17 22:12:40 +00:00
MCSectionELF.cpp Remove AllowQuotesInName and friends from MCAsmInfo. 2013-11-13 14:01:59 +00:00
MCSectionMachO.cpp MC: Appease the buildbots 2014-03-10 01:04:18 +00:00
MCStreamer.cpp DebugInfo: Improve reuse of file table entries in asm debug info 2014-03-17 01:52:11 +00:00
MCSubtargetInfo.cpp Reverting r199886 (Prevent repetitive warnings for unrecognized processors and features) 2014-01-25 16:56:18 +00:00
MCSymbol.cpp Revert "Add back r203962, r204028 and r204059." 2014-03-19 00:13:43 +00:00
MCSymbolizer.cpp Replace OwningPtr<T> with std::unique_ptr<T>. 2014-03-06 05:51:42 +00:00
MCValue.cpp
MCWin64EH.cpp Fix alignment of unwind data. 2013-09-15 18:01:09 +00:00
SubtargetFeature.cpp Reverting r199886 (Prevent repetitive warnings for unrecognized processors and features) 2014-01-25 16:56:18 +00:00
WinCOFFObjectWriter.cpp [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-08 07:02:02 +00:00
WinCOFFStreamer.cpp [C++11] Add 'override' keyword to virtual methods that override their base class. 2014-03-08 07:02:02 +00:00