Fangrui Song | b6772b8 | 2018-06-26 22:20:04 | [diff] [blame^] | 1 | // REQUIRES: arm |
Peter Smith | 75030b6d | 2017-10-27 09:04:11 | [diff] [blame] | 2 | // RUN: llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t |
| 3 | // RUN: llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi %S/Inputs/far-arm-thumb-abs.s -o %tfar |
| 4 | // RUN: ld.lld %t %tfar -o %t2 2>&1 |
| 5 | // RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi %t2 |
Peter Smith | 75030b6d | 2017-10-27 09:04:11 | [diff] [blame] | 6 | .syntax unified |
| 7 | .thumb |
| 8 | .section .text, "ax",%progbits |
| 9 | .globl _start |
| 10 | .balign 0x10000 |
| 11 | .type _start,%function |
| 12 | _start: |
| 13 | // address of too_far symbols are just out of range of ARM branch with |
| 14 | // 26-bit immediate field and an addend of -8 |
| 15 | bl too_far1 |
| 16 | b too_far2 |
| 17 | beq.w too_far3 |
| 18 | |
| 19 | // CHECK: Disassembly of section .text: |
| 20 | // CHECK-NEXT: _start: |
| 21 | // CHECK-NEXT: 20000: 00 f0 04 f8 bl #8 |
| 22 | // CHECK-NEXT: 20004: 00 f0 07 b8 b.w #14 <__Thumbv7ABSLongThunk_too_far2> |
| 23 | // CHECK-NEXT: 20008: 00 f0 0a 80 beq.w #20 <__Thumbv7ABSLongThunk_too_far3> |
| 24 | // CHECK: __Thumbv7ABSLongThunk_too_far1: |
| 25 | // CHECK-NEXT: 2000c: 40 f2 05 0c movw r12, #5 |
| 26 | // CHECK-NEXT: 20010: c0 f2 02 1c movt r12, #258 |
| 27 | // CHECK-NEXT: 20014: 60 47 bx r12 |
| 28 | // CHECK: __Thumbv7ABSLongThunk_too_far2: |
| 29 | // CHECK-NEXT: 20016: 40 f2 09 0c movw r12, #9 |
| 30 | // CHECK-NEXT: 2001a: c0 f2 02 1c movt r12, #258 |
| 31 | // CHECK-NEXT: 2001e: 60 47 bx r12 |
| 32 | // CHECK: __Thumbv7ABSLongThunk_too_far3: |
| 33 | // CHECK-NEXT: 20020: 40 f2 0d 0c movw r12, #13 |
| 34 | // CHECK-NEXT: 20024: c0 f2 12 0c movt r12, #18 |
| 35 | // CHECK-NEXT: 20028: 60 47 bx r12 |
| 36 | // CHECK-NEXT: 2002a: 00 00 movs r0, r0 |