Index: lld/trunk/test/ELF/arm-thumb-undefined-weak-narrow.test =================================================================== --- lld/trunk/test/ELF/arm-thumb-undefined-weak-narrow.test +++ lld/trunk/test/ELF/arm-thumb-undefined-weak-narrow.test @@ -0,0 +1,50 @@ +# REQUIRES: arm +# RUN: yaml2obj %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-objdump -triple=thumbv7a-linux-gnueabi -d %t | FileCheck %s + +# CHECK: Disassembly of section .text: +# CHECK-NEXT:_start: +# CHECK-NEXT: 11000: ff e7 b #-2 + +# Test the R_ARM_THM_JUMP11 relocation (102) to an undefined weak reference +# It should resolve to the next instruction, which is an offset of -2 which +# when added to the Thumb PC-bias of 4 is +2. We can't use llvm-mc to construct +# the object as it relaxes b.n to b.w (R_ARM_JUMP24). + +!ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_ARM +Sections: + - Type: SHT_PROGBITS + Name: .text + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Content: "fee7" + - Type: SHT_REL + Name: .rel.text + Link: .symtab + Info: .text + Relocations: + - Offset: 0 + Symbol: undefined_weak + Type: R_ARM_THM_JUMP11 + +Symbols: + Global: + - Type: STT_FUNC + Name: _start + Value: 1 + Section: .text + Local: + - Type: STT_NOTYPE + Name: "$t" + Section: .text + Value: 0 + Weak: + - Type: STT_NOTYPE + Name: undefined_weak + Value: 0 +