[ELF][MIPS] Ignore R_MIPS_JALR relocation for now

The `R_MIPS_JALR` is a relocation generated by gcc and gas. This
relocation points to the `jalr` instruction which might be optimized and
converted to the `b` instruction under some conditions.

Now we just ignore this relocation and keep instructions unchanged.

llvm-svn: 255453
This commit is contained in:
Simon Atanasyan 2015-12-13 06:49:14 +00:00
parent dddbeb7a46
commit e4361859c0
2 changed files with 50 additions and 0 deletions

View File

@ -1318,6 +1318,9 @@ void MipsTargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint8_t *BufEnd,
}
break;
}
case R_MIPS_JALR:
// Ignore this optimization relocation for now
break;
case R_MIPS_LO16: {
uint32_t Instr = read32<E>(Loc);
int64_t AHL = SignExtend64<16>(Instr & 0xffff);

View File

@ -0,0 +1,47 @@
# Check that lld ignores R_MIPS_JALR relocation for now.
# RUN: yaml2obj -format elf %s -o %t.o
# RUN: ld.lld %t.o -o %t.so -shared
# RUN: llvm-objdump -d %t.so | FileCheck %s
# REQUIRES: mips
# CHECK: 10000: 09 f8 20 03 jalr $25
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_MIPS
Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 16
Content: "09f82003"
# ^-- jalr T1
- Name: .rel.text
Type: SHT_REL
Link: .symtab
Info: .text
Relocations:
- Offset: 0
Symbol: T1
Type: R_MIPS_JALR
Symbols:
Local:
- Name: T1
Type: STT_FUNC
Section: .text
Value: 0
Size: 4
Global:
- Name: __start
Type: STT_FUNC
Section: .text
Value: 0
Size: 4