Skip to content
Snippets Groups Projects
Commit 4dd14fb5 authored by Logan Chien's avatar Logan Chien
Browse files

Add ARM NONE and PREL31 relocation types.

Add R_ARM_NONE and R_ARM_PREL31 relocation types
to MCExpr.  Both of them will be used while
generating .ARM.extab and .ARM.exidx sections.

llvm-svn: 169965
parent ad80c5ef
No related branches found
No related tags found
No related merge requests found
...@@ -160,6 +160,7 @@ public: ...@@ -160,6 +160,7 @@ public:
VK_TLVP, // Mach-O thread local variable relocation VK_TLVP, // Mach-O thread local variable relocation
VK_SECREL, VK_SECREL,
// FIXME: We'd really like to use the generic Kinds listed above for these. // FIXME: We'd really like to use the generic Kinds listed above for these.
VK_ARM_NONE,
VK_ARM_PLT, // ARM-style PLT references. i.e., (PLT) instead of @PLT VK_ARM_PLT, // ARM-style PLT references. i.e., (PLT) instead of @PLT
VK_ARM_TLSGD, // ditto for TLSGD, GOT, GOTOFF, TPOFF and GOTTPOFF VK_ARM_TLSGD, // ditto for TLSGD, GOT, GOTOFF, TPOFF and GOTTPOFF
VK_ARM_GOT, VK_ARM_GOT,
...@@ -168,6 +169,7 @@ public: ...@@ -168,6 +169,7 @@ public:
VK_ARM_GOTTPOFF, VK_ARM_GOTTPOFF,
VK_ARM_TARGET1, VK_ARM_TARGET1,
VK_ARM_TARGET2, VK_ARM_TARGET2,
VK_ARM_PREL31,
VK_PPC_TOC, // TOC base VK_PPC_TOC, // TOC base
VK_PPC_TOC_ENTRY, // TOC entry VK_PPC_TOC_ENTRY, // TOC entry
......
...@@ -54,14 +54,16 @@ void MCExpr::print(raw_ostream &OS) const { ...@@ -54,14 +54,16 @@ void MCExpr::print(raw_ostream &OS) const {
else else
OS << Sym; OS << Sym;
if (SRE.getKind() == MCSymbolRefExpr::VK_ARM_PLT || if (SRE.getKind() == MCSymbolRefExpr::VK_ARM_NONE ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_PLT ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_TLSGD || SRE.getKind() == MCSymbolRefExpr::VK_ARM_TLSGD ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_GOT || SRE.getKind() == MCSymbolRefExpr::VK_ARM_GOT ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_GOTOFF || SRE.getKind() == MCSymbolRefExpr::VK_ARM_GOTOFF ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_TPOFF || SRE.getKind() == MCSymbolRefExpr::VK_ARM_TPOFF ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_GOTTPOFF || SRE.getKind() == MCSymbolRefExpr::VK_ARM_GOTTPOFF ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_TARGET1 || SRE.getKind() == MCSymbolRefExpr::VK_ARM_TARGET1 ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_TARGET2) SRE.getKind() == MCSymbolRefExpr::VK_ARM_TARGET2 ||
SRE.getKind() == MCSymbolRefExpr::VK_ARM_PREL31)
OS << MCSymbolRefExpr::getVariantKindName(SRE.getKind()); OS << MCSymbolRefExpr::getVariantKindName(SRE.getKind());
else if (SRE.getKind() != MCSymbolRefExpr::VK_None && else if (SRE.getKind() != MCSymbolRefExpr::VK_None &&
SRE.getKind() != MCSymbolRefExpr::VK_PPC_DARWIN_HA16 && SRE.getKind() != MCSymbolRefExpr::VK_PPC_DARWIN_HA16 &&
...@@ -193,6 +195,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { ...@@ -193,6 +195,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) {
case VK_DTPOFF: return "DTPOFF"; case VK_DTPOFF: return "DTPOFF";
case VK_TLVP: return "TLVP"; case VK_TLVP: return "TLVP";
case VK_SECREL: return "SECREL"; case VK_SECREL: return "SECREL";
case VK_ARM_NONE: return "(NONE)";
case VK_ARM_PLT: return "(PLT)"; case VK_ARM_PLT: return "(PLT)";
case VK_ARM_GOT: return "(GOT)"; case VK_ARM_GOT: return "(GOT)";
case VK_ARM_GOTOFF: return "(GOTOFF)"; case VK_ARM_GOTOFF: return "(GOTOFF)";
...@@ -201,6 +204,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { ...@@ -201,6 +204,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) {
case VK_ARM_TLSGD: return "(tlsgd)"; case VK_ARM_TLSGD: return "(tlsgd)";
case VK_ARM_TARGET1: return "(target1)"; case VK_ARM_TARGET1: return "(target1)";
case VK_ARM_TARGET2: return "(target2)"; case VK_ARM_TARGET2: return "(target2)";
case VK_ARM_PREL31: return "(prel31)";
case VK_PPC_TOC: return "tocbase"; case VK_PPC_TOC: return "tocbase";
case VK_PPC_TOC_ENTRY: return "toc"; case VK_PPC_TOC_ENTRY: return "toc";
case VK_PPC_DARWIN_HA16: return "ha16"; case VK_PPC_DARWIN_HA16: return "ha16";
......
...@@ -133,6 +133,7 @@ const MCSymbol *ARMELFObjectWriter::ExplicitRelSym(const MCAssembler &Asm, ...@@ -133,6 +133,7 @@ const MCSymbol *ARMELFObjectWriter::ExplicitRelSym(const MCAssembler &Asm,
switch (RelocType) { switch (RelocType) {
default: EmitThisSym = true; break; default: EmitThisSym = true; break;
case ELF::R_ARM_ABS32: EmitThisSym = false; break; case ELF::R_ARM_ABS32: EmitThisSym = false; break;
case ELF::R_ARM_PREL31: EmitThisSym = false; break;
} }
} }
...@@ -225,6 +226,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, ...@@ -225,6 +226,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
case FK_Data_4: case FK_Data_4:
switch (Modifier) { switch (Modifier) {
default: llvm_unreachable("Unsupported Modifier"); default: llvm_unreachable("Unsupported Modifier");
case MCSymbolRefExpr::VK_ARM_NONE:
Type = ELF::R_ARM_NONE;
break;
case MCSymbolRefExpr::VK_ARM_GOT: case MCSymbolRefExpr::VK_ARM_GOT:
Type = ELF::R_ARM_GOT_BREL; Type = ELF::R_ARM_GOT_BREL;
break; break;
...@@ -249,7 +253,10 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, ...@@ -249,7 +253,10 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
case MCSymbolRefExpr::VK_ARM_TARGET2: case MCSymbolRefExpr::VK_ARM_TARGET2:
Type = ELF::R_ARM_TARGET2; Type = ELF::R_ARM_TARGET2;
break; break;
} case MCSymbolRefExpr::VK_ARM_PREL31:
Type = ELF::R_ARM_PREL31;
break;
}
break; break;
case ARM::fixup_arm_ldst_pcrel_12: case ARM::fixup_arm_ldst_pcrel_12:
case ARM::fixup_arm_pcrel_10: case ARM::fixup_arm_pcrel_10:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment