[llvm] r193247 - Support for microMIPS relocations 1.
Rafael EspĂndola
rafael.espindola at gmail.com
Wed Oct 23 09:36:32 PDT 2013
testcase?
On 23 October 2013 12:14, Zoran Jovanovic <zoran.jovanovic at imgtec.com> wrote:
> Author: zjovanovic
> Date: Wed Oct 23 11:14:44 2013
> New Revision: 193247
>
> URL: http://llvm.org/viewvc/llvm-project?rev=193247&view=rev
> Log:
> Support for microMIPS relocations 1.
>
> Modified:
> llvm/trunk/include/llvm/Support/ELF.h
> llvm/trunk/lib/Object/ELF.cpp
> llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
> llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
> llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h
> llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
>
> Modified: llvm/trunk/include/llvm/Support/ELF.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ELF.h?rev=193247&r1=193246&r2=193247&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/ELF.h (original)
> +++ llvm/trunk/include/llvm/Support/ELF.h Wed Oct 23 11:14:44 2013
> @@ -880,6 +880,17 @@ enum {
> R_MIPS_GLOB_DAT = 51,
> R_MIPS_COPY = 126,
> R_MIPS_JUMP_SLOT = 127,
> + R_MICROMIPS_HI16 = 134,
> + R_MICROMIPS_LO16 = 135,
> + R_MICROMIPS_GOT16 = 138,
> + R_MICROMIPS_CALL16 = 142,
> + R_MICROMIPS_GOT_DISP = 145,
> + R_MICROMIPS_GOT_PAGE = 146,
> + R_MICROMIPS_GOT_OFST = 147,
> + R_MICROMIPS_TLS_DTPREL_HI16 = 164,
> + R_MICROMIPS_TLS_DTPREL_LO16 = 165,
> + R_MICROMIPS_TLS_TPREL_HI16 = 169,
> + R_MICROMIPS_TLS_TPREL_LO16 = 170,
> R_MIPS_NUM = 218
> };
>
>
> Modified: llvm/trunk/lib/Object/ELF.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELF.cpp?rev=193247&r1=193246&r2=193247&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/ELF.cpp (original)
> +++ llvm/trunk/lib/Object/ELF.cpp Wed Oct 23 11:14:44 2013
> @@ -161,6 +161,17 @@ StringRef getELFRelocationTypeName(uint3
> LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_GLOB_DAT);
> LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_COPY);
> LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_JUMP_SLOT);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_HI16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_LO16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_GOT16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_CALL16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_GOT_DISP);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_GOT_PAGE);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_GOT_OFST);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_TLS_DTPREL_HI16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_TLS_DTPREL_LO16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_TLS_TPREL_HI16);
> + LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MICROMIPS_TLS_TPREL_LO16);
> LLVM_ELF_SWITCH_RELOC_TYPE_NAME(R_MIPS_NUM);
> default:
> break;
>
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp?rev=193247&r1=193246&r2=193247&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Wed Oct 23 11:14:44 2013
> @@ -45,6 +45,10 @@ static unsigned adjustFixupValue(unsigne
> case Mips::fixup_Mips_GOT_DISP:
> case Mips::fixup_Mips_GOT_LO16:
> case Mips::fixup_Mips_CALL_LO16:
> + case Mips::fixup_MICROMIPS_LO16:
> + case Mips::fixup_MICROMIPS_GOT_PAGE:
> + case Mips::fixup_MICROMIPS_GOT_OFST:
> + case Mips::fixup_MICROMIPS_GOT_DISP:
> break;
> case Mips::fixup_Mips_PC16:
> // So far we are only using this type for branches.
> @@ -65,6 +69,7 @@ static unsigned adjustFixupValue(unsigne
> case Mips::fixup_Mips_GOT_Local:
> case Mips::fixup_Mips_GOT_HI16:
> case Mips::fixup_Mips_CALL_HI16:
> + case Mips::fixup_MICROMIPS_HI16:
> // Get the 2nd 16-bits. Also add 1 if bit 15 is 1.
> Value = ((Value + 0x8000) >> 16) & 0xffff;
> break;
> @@ -188,7 +193,18 @@ public:
> { "fixup_Mips_GOT_HI16", 0, 16, 0 },
> { "fixup_Mips_GOT_LO16", 0, 16, 0 },
> { "fixup_Mips_CALL_HI16", 0, 16, 0 },
> - { "fixup_Mips_CALL_LO16", 0, 16, 0 }
> + { "fixup_Mips_CALL_LO16", 0, 16, 0 },
> + { "fixup_MICROMIPS_HI16", 0, 16, 0 },
> + { "fixup_MICROMIPS_LO16", 0, 16, 0 },
> + { "fixup_MICROMIPS_GOT16", 0, 16, 0 },
> + { "fixup_MICROMIPS_CALL16", 0, 16, 0 },
> + { "fixup_MICROMIPS_GOT_DISP", 0, 16, 0 },
> + { "fixup_MICROMIPS_GOT_PAGE", 0, 16, 0 },
> + { "fixup_MICROMIPS_GOT_OFST", 0, 16, 0 },
> + { "fixup_MICROMIPS_TLS_DTPREL_HI16", 0, 16, 0 },
> + { "fixup_MICROMIPS_TLS_DTPREL_LO16", 0, 16, 0 },
> + { "fixup_MICROMIPS_TLS_TPREL_HI16", 0, 16, 0 },
> + { "fixup_MICROMIPS_TLS_TPREL_LO16", 0, 16, 0 }
> };
>
> if (Kind < FirstTargetFixupKind)
>
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp?rev=193247&r1=193246&r2=193247&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp Wed Oct 23 11:14:44 2013
> @@ -183,6 +183,39 @@ unsigned MipsELFObjectWriter::GetRelocTy
> case Mips::fixup_Mips_CALL_LO16:
> Type = ELF::R_MIPS_CALL_LO16;
> break;
> + case Mips::fixup_MICROMIPS_HI16:
> + Type = ELF::R_MICROMIPS_HI16;
> + break;
> + case Mips::fixup_MICROMIPS_LO16:
> + Type = ELF::R_MICROMIPS_LO16;
> + break;
> + case Mips::fixup_MICROMIPS_GOT16:
> + Type = ELF::R_MICROMIPS_GOT16;
> + break;
> + case Mips::fixup_MICROMIPS_CALL16:
> + Type = ELF::R_MICROMIPS_CALL16;
> + break;
> + case Mips::fixup_MICROMIPS_GOT_DISP:
> + Type = ELF::R_MICROMIPS_GOT_DISP;
> + break;
> + case Mips::fixup_MICROMIPS_GOT_PAGE:
> + Type = ELF::R_MICROMIPS_GOT_PAGE;
> + break;
> + case Mips::fixup_MICROMIPS_GOT_OFST:
> + Type = ELF::R_MICROMIPS_GOT_OFST;
> + break;
> + case Mips::fixup_MICROMIPS_TLS_DTPREL_HI16:
> + Type = ELF::R_MICROMIPS_TLS_DTPREL_HI16;
> + break;
> + case Mips::fixup_MICROMIPS_TLS_DTPREL_LO16:
> + Type = ELF::R_MICROMIPS_TLS_DTPREL_LO16;
> + break;
> + case Mips::fixup_MICROMIPS_TLS_TPREL_HI16:
> + Type = ELF::R_MICROMIPS_TLS_TPREL_HI16;
> + break;
> + case Mips::fixup_MICROMIPS_TLS_TPREL_LO16:
> + Type = ELF::R_MICROMIPS_TLS_TPREL_LO16;
> + break;
> }
> return Type;
> }
>
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h?rev=193247&r1=193246&r2=193247&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsFixupKinds.h Wed Oct 23 11:14:44 2013
> @@ -128,6 +128,39 @@ namespace Mips {
> // resulting in - R_MIPS_CALL_LO16
> fixup_Mips_CALL_LO16,
>
> + // resulting in - R_MICROMIPS_HI16
> + fixup_MICROMIPS_HI16,
> +
> + // resulting in - R_MICROMIPS_LO16
> + fixup_MICROMIPS_LO16,
> +
> + // resulting in - R_MICROMIPS_GOT16
> + fixup_MICROMIPS_GOT16,
> +
> + // resulting in - R_MICROMIPS_CALL16
> + fixup_MICROMIPS_CALL16,
> +
> + // resulting in - R_MICROMIPS_GOT_DISP
> + fixup_MICROMIPS_GOT_DISP,
> +
> + // resulting in - R_MICROMIPS_GOT_PAGE
> + fixup_MICROMIPS_GOT_PAGE,
> +
> + // resulting in - R_MICROMIPS_GOT_OFST
> + fixup_MICROMIPS_GOT_OFST,
> +
> + // resulting in - R_MICROMIPS_TLS_DTPREL_HI16
> + fixup_MICROMIPS_TLS_DTPREL_HI16,
> +
> + // resulting in - R_MICROMIPS_TLS_DTPREL_LO16
> + fixup_MICROMIPS_TLS_DTPREL_LO16,
> +
> + // resulting in - R_MICROMIPS_TLS_TPREL_HI16
> + fixup_MICROMIPS_TLS_TPREL_HI16,
> +
> + // resulting in - R_MICROMIPS_TLS_TPREL_LO16
> + fixup_MICROMIPS_TLS_TPREL_LO16,
> +
> // Marker
> LastTargetFixupKind,
> NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
>
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp?rev=193247&r1=193246&r2=193247&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp Wed Oct 23 11:14:44 2013
> @@ -320,31 +320,39 @@ getExprOpValue(const MCExpr *Expr,SmallV
> FixupKind = Mips::fixup_Mips_GPOFF_LO;
> break;
> case MCSymbolRefExpr::VK_Mips_GOT_PAGE :
> - FixupKind = Mips::fixup_Mips_GOT_PAGE;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_GOT_PAGE
> + : Mips::fixup_Mips_GOT_PAGE;
> break;
> case MCSymbolRefExpr::VK_Mips_GOT_OFST :
> - FixupKind = Mips::fixup_Mips_GOT_OFST;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_GOT_OFST
> + : Mips::fixup_Mips_GOT_OFST;
> break;
> case MCSymbolRefExpr::VK_Mips_GOT_DISP :
> - FixupKind = Mips::fixup_Mips_GOT_DISP;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_GOT_DISP
> + : Mips::fixup_Mips_GOT_DISP;
> break;
> case MCSymbolRefExpr::VK_Mips_GPREL:
> FixupKind = Mips::fixup_Mips_GPREL16;
> break;
> case MCSymbolRefExpr::VK_Mips_GOT_CALL:
> - FixupKind = Mips::fixup_Mips_CALL16;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_CALL16
> + : Mips::fixup_Mips_CALL16;
> break;
> case MCSymbolRefExpr::VK_Mips_GOT16:
> - FixupKind = Mips::fixup_Mips_GOT_Global;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_GOT16
> + : Mips::fixup_Mips_GOT_Global;
> break;
> case MCSymbolRefExpr::VK_Mips_GOT:
> - FixupKind = Mips::fixup_Mips_GOT_Local;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_GOT16
> + : Mips::fixup_Mips_GOT_Local;
> break;
> case MCSymbolRefExpr::VK_Mips_ABS_HI:
> - FixupKind = Mips::fixup_Mips_HI16;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_HI16
> + : Mips::fixup_Mips_HI16;
> break;
> case MCSymbolRefExpr::VK_Mips_ABS_LO:
> - FixupKind = Mips::fixup_Mips_LO16;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_LO16
> + : Mips::fixup_Mips_LO16;
> break;
> case MCSymbolRefExpr::VK_Mips_TLSGD:
> FixupKind = Mips::fixup_Mips_TLSGD;
> @@ -353,19 +361,23 @@ getExprOpValue(const MCExpr *Expr,SmallV
> FixupKind = Mips::fixup_Mips_TLSLDM;
> break;
> case MCSymbolRefExpr::VK_Mips_DTPREL_HI:
> - FixupKind = Mips::fixup_Mips_DTPREL_HI;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_TLS_DTPREL_HI16
> + : Mips::fixup_Mips_DTPREL_HI;
> break;
> case MCSymbolRefExpr::VK_Mips_DTPREL_LO:
> - FixupKind = Mips::fixup_Mips_DTPREL_LO;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_TLS_DTPREL_LO16
> + : Mips::fixup_Mips_DTPREL_LO;
> break;
> case MCSymbolRefExpr::VK_Mips_GOTTPREL:
> FixupKind = Mips::fixup_Mips_GOTTPREL;
> break;
> case MCSymbolRefExpr::VK_Mips_TPREL_HI:
> - FixupKind = Mips::fixup_Mips_TPREL_HI;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_TLS_TPREL_HI16
> + : Mips::fixup_Mips_TPREL_HI;
> break;
> case MCSymbolRefExpr::VK_Mips_TPREL_LO:
> - FixupKind = Mips::fixup_Mips_TPREL_LO;
> + FixupKind = IsMicroMips ? Mips::fixup_MICROMIPS_TLS_TPREL_LO16
> + : Mips::fixup_Mips_TPREL_LO;
> break;
> case MCSymbolRefExpr::VK_Mips_HIGHER:
> FixupKind = Mips::fixup_Mips_HIGHER;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list