Index: lld/trunk/ELF/Arch/ARM.cpp =================================================================== --- lld/trunk/ELF/Arch/ARM.cpp +++ lld/trunk/ELF/Arch/ARM.cpp @@ -514,6 +514,12 @@ ((Val << 4) & 0x7000) | // imm3 (Val & 0x00ff)); // imm8 break; + case R_ARM_V4BX: + // V4BX is just a marker to indicate there's a "bx rN" instruction at the + // given address. It can be used to implement a special linker mode which + // rewrites ARMv4T inputs to ARMv4. Since we support only ARMv4 input and + // not ARMv4 output, we can just ignore it. + break; default: error(getErrorLocation(Loc) + "unrecognized reloc " + Twine(Type)); } Index: lld/trunk/test/ELF/v4bx.yaml =================================================================== --- lld/trunk/test/ELF/v4bx.yaml +++ lld/trunk/test/ELF/v4bx.yaml @@ -0,0 +1,38 @@ +# REQUIRES: arm +# RUN: yaml2obj %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-readelf -sections %t | FileCheck %s + +# CHECK: .text + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_ARM + Flags: [ EF_ARM_EABI_VER5 ] +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x0000000000000004 + Content: 1EFF2F01 + - Name: .rel.text + Type: SHT_REL + Link: .symtab + AddressAlign: 0x0000000000000004 + Info: .text + Relocations: + - Offset: 0x0000000000000000 + Symbol: '' + Type: R_ARM_V4BX +Symbols: + Global: + - Name: _start + Section: .text + Local: + - Name: .text + Type: STT_SECTION + Section: .text +DynamicSymbols: