Commit 214ebac5 authored by Daniel Sanders's avatar Daniel Sanders
Browse files

Merging r238751:

------------------------------------------------------------------------
r238751 | rafael | 2015-06-01 16:10:51 +0100 (Mon, 01 Jun 2015) | 3 lines

Fix relocation selection for foo-. on mips.

This handles only the 32 bit case.
------------------------------------------------------------------------

llvm-svn: 239698
parent 2f8c90e9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -656,7 +656,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
  (void)BlockNumber;
  bool MatchFilterBB = false; (void)MatchFilterBB;
#ifndef NDEBUG
  MatchFilterBB = (!FilterDAGBasicBlockName.empty() &&
  MatchFilterBB = (FilterDAGBasicBlockName.empty() ||
                   FilterDAGBasicBlockName ==
                       FuncInfo->MBB->getBasicBlock()->getName().str());
#endif
+2 −0
Original line number Diff line number Diff line
@@ -350,6 +350,8 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) {
    // eh_frame section can be read-only.  DW.ref.personality will be generated
    // for relocation.
    PersonalityEncoding = dwarf::DW_EH_PE_indirect;
    LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
    TTypeEncoding = dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
    break;
  case Triple::ppc64:
  case Triple::ppc64le:
+1 −2
Original line number Diff line number Diff line
@@ -55,8 +55,7 @@ unsigned MipsELFObjectWriter::GetRelocType(const MCValue &Target,
  default:
    llvm_unreachable("invalid fixup kind!");
  case FK_Data_4:
    Type = ELF::R_MIPS_32;
    break;
    return IsPCRel ? ELF::R_MIPS_PC32 : ELF::R_MIPS_32;
  case FK_Data_8:
    Type = ELF::R_MIPS_64;
    break;
+23 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
@@ -1033,6 +1035,27 @@ void MipsAsmPrinter::EmitEndOfAsmFile(Module &M) {
  }
  // return to the text section
  OutStreamer.SwitchSection(OutContext.getObjectFileInfo()->getTextSection());

  /* if (Subtarget->isTargetELF()) */ {
    const TargetLoweringObjectFileELF &TLOFELF =
      static_cast<const TargetLoweringObjectFileELF &>(getObjFileLowering());

    MachineModuleInfoELF &MMIELF = MMI->getObjFileInfo<MachineModuleInfoELF>();

    // Output stubs for external and common global variables.
    MachineModuleInfoELF::SymbolListTy Stubs = MMIELF.GetGVStubList();
    if (!Stubs.empty()) {
      OutStreamer.SwitchSection(TLOFELF.getDataRelSection());
      const DataLayout *TD = TM.getSubtargetImpl()->getDataLayout();

      for (const auto &Stub : Stubs) {
        OutStreamer.EmitLabel(Stub.first);
        OutStreamer.EmitSymbolValue(Stub.second.getPointer(),
                                    TD->getPointerSize());
      }
      Stubs.clear();
    }
  }
}

void MipsAsmPrinter::PrintDebugValueComment(const MachineInstr *MI,
+10 −0
Original line number Diff line number Diff line
// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux < %s | llvm-readobj -r | FileCheck  %s

// Test that we produce the correct relocation.
// FIXME: move more relocation only tests here.

        .long foo
// CHECK: R_MIPS_32 foo

        .long foo-.
// CHECK: R_MIPS_PC32 foo