diff --git a/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp b/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp index a5e63856401..36112fbf550 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp +++ b/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp @@ -502,13 +502,10 @@ bool MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym, // are not supported yet but can be added as required. case ELF::R_MIPS_GOT16: case ELF::R_MIPS16_GOT16: - case ELF::R_MICROMIPS_GOT16: case ELF::R_MIPS_HI16: case ELF::R_MIPS16_HI16: - case ELF::R_MICROMIPS_HI16: case ELF::R_MIPS_LO16: case ELF::R_MIPS16_LO16: - case ELF::R_MICROMIPS_LO16: // FIXME: It should be safe to return false for the STO_MIPS_MICROMIPS but // we neglect to handle the adjustment to the LSB of the addend that // it causes in applyFixup() and similar. @@ -516,6 +513,13 @@ bool MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym, return true; return false; + // FIXME: These three belong in the previous group but applyFixup() and + // similar do not get the addend correct at the moment. + case ELF::R_MICROMIPS_GOT16: + case ELF::R_MICROMIPS_HI16: + case ELF::R_MICROMIPS_LO16: + return true; + case ELF::R_MIPS_16: case ELF::R_MIPS_32: case ELF::R_MIPS_GPREL32: diff --git a/test/MC/Mips/relocation-xfail.s b/test/MC/Mips/relocation-xfail.s index 2db2c469855..dcb78beb413 100644 --- a/test/MC/Mips/relocation-xfail.s +++ b/test/MC/Mips/relocation-xfail.s @@ -11,10 +11,12 @@ // The addend must therefore be 0x9. // DATA-LABEL: Name: .text // DATA: SectionData ( -// DATA: 0000: 30430000 30420009 +// DATA: 0000: 30430000 30420009 30430000 30420009 addiu $2, $3, %got(baz) addiu $2, $2, %lo(baz) baz: + addiu $2, $3, %hi(baz) + addiu $2, $2, %lo(baz) // DATA-LABEL: Name: .data // DATA: SectionData (