49 lines · plain
1// REQUIRES: arm2// RUN: llvm-mc --arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t3// RUN: ld.lld %t -o %t24// RUN: llvm-objdump --no-print-imm-hex -d %t2 | FileCheck %s5 6/// Check that the ARM ABI rules for undefined weak symbols are applied.7/// Branch instructions are resolved to the next instruction. Relative8/// relocations are resolved to the place.9 10 .syntax unified11 12 .weak target13 .type target, %function14 15 .text16 .global _start17_start:18/// R_ARM_THM_JUMP1919 beq.w target20/// R_ARM_THM_JUMP2421 b.w target22/// R_ARM_THM_CALL23 bl target24/// R_ARM_THM_CALL with exchange25 blx target26/// R_ARM_THM_MOVT_PREL27 movt r0, :upper16:target - .28/// R_ARM_THM_MOVW_PREL_NC29 movw r0, :lower16:target - .30/// R_ARM_THM_ALU_PREL_11_031/// adr r0, target32 .inst.w 0xf2af000433 .reloc 0x18, R_ARM_THM_ALU_PREL_11_0, target34/// R_ARM_THM_PC1235/// ldr r0, target36 .inst.w 0xf85f000437 .reloc 0x1c, R_ARM_THM_PC12, target38// CHECK: Disassembly of section .text:39// CHECK-EMPTY:40// CHECK: 200b4: {{.*}} beq.w 0x200b8 <_start+0x4> @ imm = #041// CHECK-NEXT: 200b8: {{.*}} b.w 0x200bc <_start+0x8> @ imm = #042// CHECK-NEXT: 200bc: {{.*}} bl 0x200c0 <_start+0xc> @ imm = #043/// blx is transformed into bl so we don't change state44// CHECK-NEXT: 200c0: {{.*}} bl 0x200c4 <_start+0x10> @ imm = #045// CHECK-NEXT: 200c4: {{.*}} movt r0, #046// CHECK-NEXT: 200c8: {{.*}} movw r0, #047// CHECK-NEXT: 200cc: {{.*}} adr.w r0, #-448// CHECK-NEXT: 200d0: {{.*}} ldr.w r0, [pc, #-4]49