66 lines · plain
1// REQUIRES: arm2// RUN: split-file %s %t3// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi %t/test.s -o %t.o4// RUN: ld.lld --script %t/script %t.o -o %t25// RUN: llvm-objdump --no-print-imm-hex --no-show-raw-insn -d %t2 | FileCheck %s6 7// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7aeb-none-linux-gnueabi -mcpu=cortex-a8 %t/test.s -o %t.o8// RUN: ld.lld --script %t/script %t.o -o %t29// RUN: llvm-objdump --no-print-imm-hex --no-show-raw-insn -d %t2 | FileCheck %s10// RUN: ld.lld --be8 --script %t/script %t.o -o %t211// RUN: llvm-objdump --no-print-imm-hex --no-show-raw-insn -d %t2 | FileCheck %s12 13/// Test that we can reuse thunks between Arm and Thumb callers14/// using a BL. Expect two thunks, one for far, one for far2.15 16//--- script17SECTIONS {18 .text 0x10000 : { *(.text) }19 .text.far 0x10000000 : AT (0x10000000) { *(.far) }20}21 22//--- test.s23 24.syntax unified25.text26.globl _start27.type _start, %function28 .arm29_start:30 bl far31 .thumb32 bl far33 bl far234 .arm35 bl far236 37// CHECK: 00010000 <_start>:38// CHECK-NEXT: 10000: bl 0x10010 <__ARMv7ABSLongThunk_far>39// CHECK-NEXT: 10004: blx 0x10010 <__ARMv7ABSLongThunk_far>40// CHECK-NEXT: 10008: bl 0x1001c <__Thumbv7ABSLongThunk_far2>41// CHECK-NEXT: 1000c: blx 0x1001c <__Thumbv7ABSLongThunk_far2>42// CHECK: 00010010 <__ARMv7ABSLongThunk_far>:43// CHECK-NEXT: 10010: movw r12, #044// CHECK-NEXT: 10014: movt r12, #409645// CHECK-NEXT: 10018: bx r1246// CHECK: 0001001c <__Thumbv7ABSLongThunk_far2>:47// CHECK-NEXT: 1001c: movw r12, #448// CHECK-NEXT: 10020: movt r12, #409649// CHECK-NEXT: 10024: bx r1250 51.section .text.far, "ax", %progbits52.globl far53.type far, %function54far:55 bx lr56.globl far257.type far2, %function58far2:59 bx lr60 61// CHECK: Disassembly of section .text.far:62// CHECK: 10000000 <far>:63// CHECK-NEXT: 10000000: bx lr64// CHECK: 10000004 <far2>:65// CHECK-NEXT: 10000004: bx lr66