2 // RUN
: llvm-mc
-filetype
=obj
-triple
=thumbv7-windows
%s
-o
%t.obj
3 // RUN
: lld-link
-entry
:main
-subsystem
:console
%t.obj
-out
:%t.exe
-verbose
2>&1 | FileCheck
-check-prefix
=VERBOSE
%s
4 // RUN
: llvm-objdump
--no-print-imm-hex
-d
%t.exe
--start-address
=0x403000 --stop-address
=0x403008 | FileCheck
--check-prefix
=FUNC01
%s
5 // RUN
: llvm-objdump
--no-print-imm-hex
-d
%t.exe
--start-address
=0x404ffa --stop-address
=0x405012 | FileCheck
--check-prefix
=FUNC01-THUNKS
%s
7 // VERBOSE
: Added
{{.*}} thunks with margin 204800 in 2 passes
16 .irp i, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18
17 .section .text$\i\()a, "xr"
21 bne func_within_margin\i
22 // Originally
, the first section is less than
8192 bytes large
, and the
23 // second one follows almost directly. After adding one thunk after
24 // the first section
, the second one will move forward by
8192 bytes
25 // due to the alignment.
28 .section .text$\i\()b, "xr"
34 .section .text$999, "xr"
36 .space 0x100000 - 100*1024 - 18*8192*2
37 // Initially
, these symbols are within range from all the sections above
,
38 // even when taking the initial margin into account. After adding thunks
39 // to all the sections above
, some of these are also out of range
, forcing
40 // running
a second pass.
41 .irp i, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18
47 // These are always out of range.
48 .irp i, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18
54 // FUNC01
: 403000: f041
87fc bne.w
0x404ffc <.text+0x3ffc>
55 // FUNC01
: 403004: f041
87ff bne.w
0x405006 <.text+0x4006>
57 // Check that we only have two thunks here
, even if we created the first
58 // thunk twice
(once in the first pass
, then thrown away
and recreated
59 // in the second pass
).
61 // FUNC01-THUNKS
: 404ffa
: 0000 movs
r0, r0
62 // The instruction above is padding from the
.space
63 // FUNC01-THUNKS
: 404ffc
: f247
0c1e movw
r12, #28702
64 // FUNC01-THUNKS
: 405000: f2c0
0c20 movt
r12, #32
65 // FUNC01-THUNKS
: 405004: 44e7
add pc
, r12
66 // FUNC01-THUNKS
: 405006: f646
7cf0 movw
r12, #28656
67 // FUNC01-THUNKS
: 40500a: f2c0
0c10 movt
r12, #16
68 // FUNC01-THUNKS
: 40500e
: 44e7
add pc
, r12
69 // The instruction below is padding from the
.balign
70 // FUNC01-THUNKS
: 405010: 0000 movs
r0, r0