mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
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. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_36@239698 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
4b3f6b49e5
commit
1c51539f21
5 files changed
+37
-3
No files matched your search
@@ -656,7 +656,7 @@ void SelectionDAGISel::CodeGenAndEmitDAG() {
|
|||||||
(void)BlockNumber;
|
(void)BlockNumber;
|
||||||
bool MatchFilterBB = false; (void)MatchFilterBB;
|
bool MatchFilterBB = false; (void)MatchFilterBB;
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
MatchFilterBB = (!FilterDAGBasicBlockName.empty() &&
|
MatchFilterBB = (FilterDAGBasicBlockName.empty() ||
|
||||||
FilterDAGBasicBlockName ==
|
FilterDAGBasicBlockName ==
|
||||||
FuncInfo->MBB->getBasicBlock()->getName().str());
|
FuncInfo->MBB->getBasicBlock()->getName().str());
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -350,6 +350,8 @@ void MCObjectFileInfo::InitELFMCObjectFileInfo(Triple T) {
|
|||||||
// eh_frame section can be read-only. DW.ref.personality will be generated
|
// eh_frame section can be read-only. DW.ref.personality will be generated
|
||||||
// for relocation.
|
// for relocation.
|
||||||
PersonalityEncoding = dwarf::DW_EH_PE_indirect;
|
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;
|
break;
|
||||||
case Triple::ppc64:
|
case Triple::ppc64:
|
||||||
case Triple::ppc64le:
|
case Triple::ppc64le:
|
||||||
|
|||||||
@@ -55,8 +55,7 @@ unsigned MipsELFObjectWriter::GetRelocType(const MCValue &Target,
|
|||||||
default:
|
default:
|
||||||
llvm_unreachable("invalid fixup kind!");
|
llvm_unreachable("invalid fixup kind!");
|
||||||
case FK_Data_4:
|
case FK_Data_4:
|
||||||
Type = ELF::R_MIPS_32;
|
return IsPCRel ? ELF::R_MIPS_PC32 : ELF::R_MIPS_32;
|
||||||
break;
|
|
||||||
case FK_Data_8:
|
case FK_Data_8:
|
||||||
Type = ELF::R_MIPS_64;
|
Type = ELF::R_MIPS_64;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
#include "llvm/CodeGen/MachineInstr.h"
|
#include "llvm/CodeGen/MachineInstr.h"
|
||||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||||
#include "llvm/CodeGen/MachineMemOperand.h"
|
#include "llvm/CodeGen/MachineMemOperand.h"
|
||||||
|
#include "llvm/CodeGen/MachineModuleInfoImpls.h"
|
||||||
|
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
|
||||||
#include "llvm/IR/BasicBlock.h"
|
#include "llvm/IR/BasicBlock.h"
|
||||||
#include "llvm/IR/DataLayout.h"
|
#include "llvm/IR/DataLayout.h"
|
||||||
#include "llvm/IR/InlineAsm.h"
|
#include "llvm/IR/InlineAsm.h"
|
||||||
@@ -1033,6 +1035,27 @@ void MipsAsmPrinter::EmitEndOfAsmFile(Module &M) {
|
|||||||
}
|
}
|
||||||
// return to the text section
|
// return to the text section
|
||||||
OutStreamer.SwitchSection(OutContext.getObjectFileInfo()->getTextSection());
|
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,
|
void MipsAsmPrinter::PrintDebugValueComment(const MachineInstr *MI,
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// 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
|
||||||
Reference in new issue
Block a user