// REQUIRES: arm
// RUN: llvm-mc -arm-add-build-attributes -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t
// RUN: echo "SECTIONS { \
// RUN: .text 0x100000 : { *(SORT_BY_NAME(.text.*)) } \
// RUN: }" > %t.script
// RUN: ld.lld --script %t.script %t -o %t2
// RUN: llvm-objdump -d %t2 --start-address=0x100000 --stop-address=0x100008 | FileCheck --check-prefix=CHECK1 %s
// RUN: llvm-objdump -d %t2 --start-address=0x1000004 --stop-address=0x100000e | FileCheck --check-prefix=CHECK2 %s
.syntax unified
// Test that linkerscript sorting does not apply to Thunks, we expect that the
// sort will reverse the order of sections presented here.
// Define a function aligned on a megabyte boundary
.macro FUNCTION suff
.section .text.\suff\(), "ax", %progbits
.thumb
.balign 0x100000
.globl tfunc\suff\()
.type tfunc\suff\(), %function
tfunc\suff\():
bx lr
.endm
FUNCTION 31
FUNCTION 30
FUNCTION 29
FUNCTION 28
FUNCTION 27
FUNCTION 26
FUNCTION 25
FUNCTION 24
FUNCTION 23
FUNCTION 22
FUNCTION 21
FUNCTION 20
FUNCTION 19
FUNCTION 18
FUNCTION 17
FUNCTION 16
FUNCTION 15
// CHECK2: <__Thumbv7ABSLongThunk_tfunc31>:
// CHECK2-NEXT: 1000004: f3ff 97fc b.w 0x2000000 <tfunc31>
FUNCTION 14
FUNCTION 13
FUNCTION 12
FUNCTION 11
FUNCTION 10
FUNCTION 09
FUNCTION 08
FUNCTION 07
FUNCTION 06
FUNCTION 05
FUNCTION 04
FUNCTION 03
FUNCTION 02
FUNCTION 01
.section .text.00, "ax", %progbits
.thumb
.globl _start
_start:
// Expect no range extension needed for tfunc01 and an extension needed for
// tfunc31
bl tfunc01
bl tfunc31
// CHECK1: <_start>:
// CHECK1-NEXT: 100000: f0ff fffe bl 0x200000 <tfunc01>
// CHECK1-NEXT: 100004: f2ff d7fe bl 0x1000004 <__Thumbv7ABSLongThunk_tfunc31>