24 changes: 7 additions & 17 deletions lld/test/ELF/arm-thumb-condbranch-thunk.s
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,9 @@ _start:
// CHECK1-NEXT: 80000: 70 47 bx lr
// CHECK1-NEXT: 80002: 7f f3 ff d7 bl #16252926
// CHECK1: __Thumbv7ABSLongThunk_tfunc05:
// CHECK1-NEXT: 80008: 40 f2 01 0c movw r12, #1
// CHECK1-NEXT: 8000c: c0 f2 30 0c movt r12, #48
// CHECK1-NEXT: 80010: 60 47 bx r12
// CHECK1-NEXT: 80008: 7f f2 fa bf b.w #2621428 <tfunc05>
// CHECK1: __Thumbv7ABSLongThunk_tfunc00:
// CHECK1-NEXT: 80012: 40 f2 01 0c movw r12, #1
// CHECK1-NEXT: 80016: c0 f2 08 0c movt r12, #8
// CHECK1-NEXT: 8001a: 60 47 bx r12
// CHECK1-NEXT: 8000c: ff f7 f8 bf b.w #-16 <tfunc00>
FUNCTION 01
// tfunc02 is within range of tfunc02
beq.w tfunc02
Expand All @@ -61,7 +57,7 @@ _start:
beq.w tfunc00
// CHECK3: 180000: 70 47 bx lr
// CHECK3-NEXT: 180002: 40 f4 01 80 bne.w #-1048574 <__Thumbv7ABSLongThunk_tfunc05>
// CHECK3-NEXT: 180006: 00 f4 04 80 beq.w #-1048568 <__Thumbv7ABSLongThunk_tfunc00>
// CHECK3-NEXT: 180006: 00 f4 01 80 beq.w #-1048574 <__Thumbv7ABSLongThunk_tfunc00>
FUNCTION 03
FUNCTION 04
FUNCTION 05
Expand All @@ -70,9 +66,7 @@ _start:
FUNCTION 08
FUNCTION 09
// CHECK4: __Thumbv7ABSLongThunk_tfunc03:
// CHECK4-NEXT: 500004: 40 f2 01 0c movw r12, #1
// CHECK4-NEXT: 500008: c0 f2 20 0c movt r12, #32
// CHECK4-NEXT: 50000c: 60 47 bx r12
// CHECK4-NEXT: 500004: ff f4 fc bf b.w #-3145736 <tfunc03>
FUNCTION 10
// We can't reach any Thunk Section, create a new one
beq.w tfunc03
Expand Down Expand Up @@ -101,17 +95,13 @@ _start:
FUNCTION 30
FUNCTION 31
// CHECK6: __Thumbv7ABSLongThunk_tfunc33:
// CHECK6-NEXT: 1000004: 40 f2 01 0c movw r12, #1
// CHECK6-NEXT: 1000008: c0 f2 10 1c movt r12, #272
// CHECK6-NEXT: 100000c: 60 47 bx r12
// CHECK6-NEXT: 1000004: ff f0 fc bf b.w #1048568 <tfunc33>
// CHECK6: __Thumbv7ABSLongThunk_tfunc00:
// CHECK6-NEXT: 100000e: 40 f2 01 0c movw r12, #1
// CHECK6-NEXT: 1000012: c0 f2 08 0c movt r12, #8
// CHECK6-NEXT: 1000016: 60 47 bx r12
// CHECK6-NEXT: 1000008: 7f f4 fa 97 b.w #-16252940 <tfunc00>
FUNCTION 32
FUNCTION 33
// We should be able to reach an existing ThunkSection.
b.w tfunc00
// CHECK7: tfunc33:
// CHECK7-NEXT: 1100000: 70 47 bx lr
// CHECK7-NEXT: 1100002: 00 f7 04 b8 b.w #-1048568 <__Thumbv7ABSLongThunk_tfunc00>
// CHECK7-NEXT: 1100002: 00 f7 01 b8 b.w #-1048574 <__Thumbv7ABSLongThunk_tfunc00>
44 changes: 17 additions & 27 deletions lld/test/ELF/arm-thumb-range-thunk-os.s
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ _start:
b.w tfunc28
// CHECK4: tfunc02:
// CHECK4-NEXT: 400000: 70 47 bx lr
// CHECK4-NEXT: 400002: 00 f0 04 90 b.w #12582920 <__Thumbv7ABSLongThunk_tfunc28>
// CHECK4-NEXT: 400002: 00 f0 01 90 b.w #12582914 <__Thumbv7ABSLongThunk_tfunc28>
FUNCTION 03
FUNCTION 04
FUNCTION 05
Expand All @@ -75,25 +75,19 @@ _start:
FUNCTION 14
// Expect precreated ThunkSection here
// CHECK5: __Thumbv7ABSLongThunk_tfunc16:
// CHECK5-NEXT: 1000004: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 1000008: c0 f2 20 1c movt r12, #288
// CHECK5-NEXT: 100000c: 60 47 bx r12
// CHECK5-NEXT: 1000004: ff f1 fc bf b.w #2097144 <tfunc16>
// CHECK5: __Thumbv7ABSLongThunk_tfunc28:
// CHECK5-NEXT: 100000e: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 1000012: c0 f2 e0 1c movt r12, #480
// CHECK5-NEXT: 1000016: 60 47 bx r12
// CHECK5-NEXT: 1000008: ff f1 fa 97 b.w #14680052 <tfunc28>
// CHECK5: __Thumbv7ABSLongThunk_tfunc32:
// CHECK5-NEXT: 1000018: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 100001c: c0 f2 20 2c movt r12, #544
// CHECK5-NEXT: 1000020: 60 47 bx r12
// CHECK5-NEXT: 100000c: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 1000010: c0 f2 20 2c movt r12, #544
// CHECK5-NEXT: 1000014: 60 47 bx r12
// CHECK5: __Thumbv7ABSLongThunk_tfunc33:
// CHECK5-NEXT: 1000022: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 1000026: c0 f2 30 2c movt r12, #560
// CHECK5-NEXT: 100002a: 60 47 bx r12
// CHECK5-NEXT: 1000016: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 100001a: c0 f2 30 2c movt r12, #560
// CHECK5-NEXT: 100001e: 60 47 bx r12
// CHECK5: __Thumbv7ABSLongThunk_tfunc02:
// CHECK5-NEXT: 100002c: 40 f2 01 0c movw r12, #1
// CHECK5-NEXT: 1000030: c0 f2 40 0c movt r12, #64
// CHECK5-NEXT: 1000034: 60 47 bx r12
// CHECK5-NEXT: 1000020: ff f7 ee 97 b.w #-12582948 <tfunc02>
FUNCTION 15
// tfunc00 and tfunc01 are < 16Mb away, expect no range extension thunks
bl tfunc00
Expand All @@ -106,8 +100,8 @@ _start:
// CHECK6-NEXT: 1100000: 70 47 bx lr
// CHECK6-NEXT: 1100002: ff f4 fd d7 bl #-15728646
// CHECK6-NEXT: 1100006: ff f5 fb d7 bl #-14680074
// CHECK6-NEXT: 110000a: 00 f7 05 f8 bl #-1048566
// CHECK6-NEXT: 110000e: 00 f7 08 f8 bl #-1048560
// CHECK6-NEXT: 110000a: ff f6 ff ff bl #-1048578
// CHECK6-NEXT: 110000e: 00 f7 02 f8 bl #-1048572
FUNCTION 16
FUNCTION 17
FUNCTION 18
Expand All @@ -125,19 +119,15 @@ _start:
// section
// CHECK7: tfunc28:
// CHECK7-NEXT: 1e00000: 70 47 bx lr
// CHECK7-NEXT: 1e00002: 00 f6 13 90 b.w #-14680026 <__Thumbv7ABSLongThunk_tfunc02>
// CHECK7-NEXT: 1e00002: 00 f6 0d 90 b.w #-14680038 <__Thumbv7ABSLongThunk_tfunc02>

b.w tfunc02
FUNCTION 29
// Expect another precreated thunk section here
// CHECK8: __Thumbv7ABSLongThunk_tfunc15:
// CHECK8-NEXT: 1f00004: 40 f2 01 0c movw r12, #1
// CHECK8-NEXT: 1f00008: c0 f2 10 1c movt r12, #272
// CHECK8-NEXT: 1f0000c: 60 47 bx r12
// CHECK8-NEXT: 1f00004: ff f5 fc 97 b.w #-14680072 <tfunc15>
// CHECK8: __Thumbv7ABSLongThunk_tfunc16:
// CHECK8-NEXT: 1f0000e: 40 f2 01 0c movw r12, #1
// CHECK8-NEXT: 1f00012: c0 f2 20 1c movt r12, #288
// CHECK8-NEXT: 1f00016: 60 47 bx r12
// CHECK8-NEXT: 1f00008: ff f6 fa 97 b.w #-13631500 <tfunc16>
FUNCTION 30
FUNCTION 31
FUNCTION 32
Expand All @@ -148,12 +138,12 @@ _start:
// CHECK9: tfunc32:
// CHECK9: 2200000: 70 47 bx lr
// CHECK9-NEXT: 2200002: ff f4 ff ff bl #-3145730
// CHECK9-NEXT: 2200006: 00 f5 02 f8 bl #-3145724
// CHECK9-NEXT: 2200006: ff f4 ff ff bl #-3145730

FUNCTION 33
bl tfunc15
bl tfunc16
// CHECK10: tfunc33:
// CHECK10: 2300000: 70 47 bx lr
// CHECK10-NEXT: 2300002: ff f7 ff f7 bl #-4194306
// CHECK10-NEXT: 2300006: 00 f4 02 f8 bl #-4194300
// CHECK10-NEXT: 2300006: ff f7 ff f7 bl #-4194306
14 changes: 6 additions & 8 deletions lld/test/ELF/arm-thumb-thunk-empty-pass.s
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// RUN: llvm-mc -filetype=obj -triple=thumbv7a-none-linux-gnueabi %s -o %t
// RUN: ld.lld %t -o %t2 2>&1
// RUN: llvm-objdump -d %t2 -start-address=69632 -stop-address=69646 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK1 %s
// RUN: llvm-objdump -d %t2 -start-address=16846860 -stop-address=16846874 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK2 %s
// RUN: llvm-objdump -d %t2 -start-address=16846856 -stop-address=16846874 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK2 %s
.syntax unified
.global _start, foo
.type _start, %function
Expand All @@ -20,13 +20,11 @@ foo:
// CHECK1-NEXT: _start:
// CHECK1-NEXT: 11000: ff f7 fe ff bl #-4
// CHECK1: __Thumbv7ABSLongThunk__start:
// CHECK1-NEXT: 11004: 41 f2 01 0c movw r12, #4097
// CHECK1-NEXT: 11008: c0 f2 01 0c movt r12, #1
// CHECK1-NEXT: 1100c: 60 47 bx r12
// CHECK1-NEXT: 11004: ff f7 fc bf b.w #-8 <_start>

// CHECK2: __Thumbv7ABSLongThunk__start:
// CHECK2: 101100c: 41 f2 01 0c movw r12, #4097
// CHECK2-NEXT: 1011010: c0 f2 01 0c movt r12, #1
// CHECK2-NEXT: 1011014: 60 47 bx r12
// CHECK2: 1011008: 41 f2 01 0c movw r12, #4097
// CHECK2-NEXT: 101100c: c0 f2 01 0c movt r12, #1
// CHECK2-NEXT: 1011010: 60 47 bx r12
// CHECK2: foo:
// CHECK2-NEXT: 1011016: ff f7 f9 ff bl #-14
// CHECK2-NEXT: 1011012: ff f7 f9 ff bl #-14
20 changes: 9 additions & 11 deletions lld/test/ELF/arm-thunk-largesection.s
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
// RUN: ld.lld %t -o %t2 2>&1
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=69632 -stop-address=69636 %t2 | FileCheck -check-prefix=CHECK1 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=73732 -stop-address=73742 %t2 | FileCheck -check-prefix=CHECK2 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=16850944 -stop-address=16850948 %t2 | FileCheck -check-prefix=CHECK3 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=33628160 -stop-address=33628164 %t2 | FileCheck -check-prefix=CHECK4 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=50405364 -stop-address=50405376 %t2 | FileCheck -check-prefix=CHECK5 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=16850936 -stop-address=16850940 %t2 | FileCheck -check-prefix=CHECK3 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=33628152 -stop-address=33628156 %t2 | FileCheck -check-prefix=CHECK4 %s
// RUN: llvm-objdump -d -triple=thumbv7a-none-linux-gnueabi -start-address=50405356 -stop-address=50405376 %t2 | FileCheck -check-prefix=CHECK5 %s
// REQUIRES: arm
.syntax unified
.balign 0x1000
Expand All @@ -21,9 +21,7 @@ _start:
// CHECK1-NEXT: 11002: 00 00 movs r0, r0

// CHECK2: __Thumbv7ABSLongThunk__start:
// CHECK2-NEXT: 12004: 41 f2 01 0c movw r12, #4097
// CHECK2-NEXT: 12008: c0 f2 01 0c movt r12, #1
// CHECK2-NEXT: 1200c: 60 47 bx r12
// CHECK2-NEXT: 12004: fe f7 fc bf b.w #-4104 <_start>

// Gigantic section where we need a ThunkSection either side of it
.section .text.large1, "ax", %progbits
Expand All @@ -33,10 +31,10 @@ _start:
.space (16 * 1024 * 1024) - 4
bl _start
.space (16 * 1024 * 1024) - 16
// CHECK3: 1012000: 00 f4 00 d0 bl #-16777216
// CHECK4: 2012000: ff f3 f8 d7 bl #16777200
// CHECK3: 1011ff8: 00 f4 04 d0 bl #-16777208
// CHECK4: 2011ff8: ff f3 f8 d7 bl #16777200

// CHECK5: __Thumbv7ABSLongThunk__start:
// CHECK5-NEXT: 3011ff4: 41 f2 01 0c movw r12, #4097
// CHECK5-NEXT: 3011ff8: c0 f2 01 0c movt r12, #1
// CHECK5-NEXT: 3011ffc: 60 47 bx r12
// CHECK5-NEXT: 3011fec: 41 f2 01 0c movw r12, #4097
// CHECK5-NEXT: 3011ff0: c0 f2 01 0c movt r12, #1
// CHECK5-NEXT: 3011ff4: 60 47 bx r12
4 changes: 1 addition & 3 deletions lld/test/ELF/arm-thunk-linkerscript-large.s
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,7 @@ _start:
FUNCTIONL 08
FUNCTIONL 09
// CHECK3: __Thumbv7ABSLongThunk_tfuncl24:
// CHECK3-NEXT: b00004: 40 f2 01 0c movw r12, #1
// CHECK3-NEXT: b00008: c0 f2 a0 1c movt r12, #416
// CHECK3-NEXT: b0000c: 60 47 bx r12
// CHECK3-NEXT: b00004: ff f2 fc 97 b.w #15728632 <tfuncl24>
FUNCTIONL 10
FUNCTIONL 11
FUNCTIONL 12
Expand Down
4 changes: 1 addition & 3 deletions lld/test/ELF/arm-thunk-linkerscript-sort.s
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ tfunc\suff\():
FUNCTION 16
FUNCTION 15
// CHECK2: __Thumbv7ABSLongThunk_tfunc31:
// CHECK2-NEXT: 1000004: 40 f2 01 0c movw r12, #1
// CHECK2-NEXT: 1000008: c0 f2 00 2c movt r12, #512
// CHECK2-NEXT: 100000c: 60 47 bx r12
// CHECK2-NEXT: 1000004: ff f3 fc 97 b.w #16777208 <tfunc31>
FUNCTION 14
FUNCTION 13
FUNCTION 12
Expand Down
20 changes: 8 additions & 12 deletions lld/test/ELF/arm-thunk-multipass.s
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// parts we need to speed up the test and avoid a large output file
// RUN: llvm-objdump -d %t2 -start-address=1048578 -stop-address=1048586 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK1 %s
// RUN: llvm-objdump -d %t2 -start-address=16777224 -stop-address=16777254 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK2 %s
// RUN: llvm-objdump -d %t2 -start-address=17825818 -stop-address=17825828 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK3 %s
// RUN: llvm-objdump -d %t2 -start-address=17825812 -stop-address=17825826 -triple=thumbv7a-linux-gnueabihf | FileCheck -check-prefix=CHECK3 %s
// In this test case a branch that is in range and does not need its range
// extended can be pushed out of range by another Thunk, necessitating another
// pass
Expand Down Expand Up @@ -64,19 +64,15 @@ arm_target:
// CHECK2-NEXT: 100000c: c0 f2 00 1c movt r12, #256
// CHECK2-NEXT: 1000010: 60 47 bx r12
// CHECK2: __Thumbv7ABSLongThunk_target:
// CHECK2-NEXT: 1000012: 40 f2 1b 0c movw r12, #27
// CHECK2-NEXT: 1000016: c0 f2 10 1c movt r12, #272
// CHECK2-NEXT: 100001a: 60 47 bx r12
// CHECK2-NEXT: 1000012: ff f0 ff bf b.w #1048574 <target>
// CHECK2: __Thumbv7ABSLongThunk_target2:
// CHECK2-NEXT: 100001c: 40 f2 13 0c movw r12, #19
// CHECK2-NEXT: 1000020: c0 f2 10 0c movt r12, #16
// CHECK2-NEXT: 1000024: 60 47 bx r12
// CHECK2-NEXT: 1000016: ff f4 fc 97 b.w #-15728648 <target2>

.section .text.17, "ax", %progbits
// Just enough space so that bl target is in range if no extension thunks are
// generated.

.space 0x100000 - 12
.space 0x100000 - 6

.section .text.18, "ax", %progbits
.thumb
Expand All @@ -90,7 +86,7 @@ target:
nop
bx lr
// CHECK3: target:
// CHECK3-NEXT: 110001a: ff f6 ff ff bl #-1048578
// CHECK3-NEXT: 110001e: 00 bf nop
// CHECK3-NEXT: 1100020: 00 bf nop
// CHECK3-NEXT: 1100022: 70 47 bx lr
// CHECK3-NEXT: 1100014: ff f6 ff ff bl #-1048578
// CHECK3-NEXT: 1100018: 00 bf nop
// CHECK3-NEXT: 110001a: 00 bf nop
// CHECK3-NEXT: 110001c: 70 47 bx lr