Skip to content

Commit 870094d

Browse files
committed
[ELF] Decrease alignment of ThunkSection on 64-bit targets from 8 to 4
ThunkSection contains 4-byte instructions on all targets that use thunks. Thunks should not be used in any performance sensitive places, and locality/cache line/instruction fetching arguments should not apply. We use 16 bytes as preferred function alignments for modern PowerPC cores. In any case, 8 is not optimal. Differential Revision: https://reviews.llvm.org/D72819
1 parent c87982b commit 870094d

11 files changed

+58
-58
lines changed

lld/ELF/SyntheticSections.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3451,8 +3451,8 @@ bool ARMExidxSyntheticSection::classof(const SectionBase *d) {
34513451
}
34523452

34533453
ThunkSection::ThunkSection(OutputSection *os, uint64_t off)
3454-
: SyntheticSection(SHF_ALLOC | SHF_EXECINSTR, SHT_PROGBITS,
3455-
config->wordsize, ".text.thunk") {
3454+
: SyntheticSection(SHF_ALLOC | SHF_EXECINSTR, SHT_PROGBITS, 4,
3455+
".text.thunk") {
34563456
this->parent = os;
34573457
this->outSecOff = off;
34583458
}

lld/test/ELF/aarch64-call26-thunk.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ _start:
1212
// CHECK: Disassembly of section .text:
1313
// CHECK-EMPTY:
1414
// CHECK-NEXT: _start:
15-
// CHECK-NEXT: 210120: bl #8
15+
// CHECK-NEXT: 210120: bl #4
1616
// CHECK: __AArch64AbsLongThunk_big:
17-
// CHECK-NEXT: 210128: ldr x16, #8
18-
// CHECK-NEXT: 21012c: br x16
17+
// CHECK-NEXT: 210124: ldr x16, #8
18+
// CHECK-NEXT: 210128: br x16
1919
// CHECK: $d:
20-
// CHECK-NEXT: 210130: 00 00 00 00 .word 0x00000000
21-
// CHECK-NEXT: 210134: 10 00 00 00 .word 0x00000010
20+
// CHECK-NEXT: 21012c: 00 00 00 00 .word 0x00000000
21+
// CHECK-NEXT: 210130: 10 00 00 00 .word 0x00000010
2222

lld/test/ELF/aarch64-cortex-a53-843419-thunk.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ t3_ff8_ldr:
4040
ldr x0, [x0, :got_lo12:dat]
4141
ret
4242

43-
// CHECK-PRINT: detected cortex-a53-843419 erratum sequence starting at 11FFC in unpatched output.
44-
// CHECK: 0000000000011ffc t3_ff8_ldr:
43+
// CHECK-PRINT: detected cortex-a53-843419 erratum sequence starting at 11FF8 in unpatched output.
44+
// CHECK: 0000000000011ff8 t3_ff8_ldr:
4545
// CHECK-NEXT: adrp x0, #134213632
4646
// CHECK-NEXT: ldr x1, [x1]
4747
// CHECK-NEXT: b #8
4848
// CHECK-NEXT: ret
49-
// CHECK: 000000000001200c __CortexA53843419_12004:
49+
// CHECK: 0000000000012008 __CortexA53843419_12000:
5050
// CHECK-NEXT: ldr x0, [x0, #8]
5151
// CHECK-NEXT: b #-8
5252
.section .text.04, "ax", %progbits

lld/test/ELF/aarch64-jump26-thunk.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ _start:
1212
// CHECK: Disassembly of section .text:
1313
// CHECK-EMPTY:
1414
// CHECK-NEXT: _start:
15-
// CHECK-NEXT: 210120: b #8
15+
// CHECK-NEXT: 210120: b #4
1616
// CHECK: __AArch64AbsLongThunk_big:
17-
// CHECK-NEXT: 210128: ldr x16, #8
18-
// CHECK-NEXT: 21012c: br x16
17+
// CHECK-NEXT: 210124: ldr x16, #8
18+
// CHECK-NEXT: 210128: br x16
1919
// CHECK: $d:
20-
// CHECK-NEXT: 210130: 00 00 00 00 .word 0x00000000
21-
// CHECK-NEXT: 210134: 10 00 00 00 .word 0x00000010
20+
// CHECK-NEXT: 21012c: 00 00 00 00 .word 0x00000000
21+
// CHECK-NEXT: 210130: 10 00 00 00 .word 0x00000010

lld/test/ELF/aarch64-thunk-pi.s

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ low_target:
1616
bl high_target
1717
ret
1818
// CHECK: low_target:
19-
// CHECK-NEXT: d8: bl #0x18 <__AArch64ADRPThunk_high_target>
19+
// CHECK-NEXT: d8: bl #0x14 <__AArch64ADRPThunk_high_target>
2020
// CHECK-NEXT: ret
2121

2222
.hidden low_target2
@@ -29,23 +29,23 @@ low_target2:
2929
bl .text_high+8
3030
ret
3131
// CHECK: low_target2:
32-
// CHECK-NEXT: e0: bl #0x1c <__AArch64ADRPThunk_high_target2>
33-
// CHECK-NEXT: e4: bl #0x24 <__AArch64ADRPThunk_>
32+
// CHECK-NEXT: e0: bl #0x18 <__AArch64ADRPThunk_high_target2>
33+
// CHECK-NEXT: e4: bl #0x20 <__AArch64ADRPThunk_>
3434
// CHECK-NEXT: ret
3535

3636
// Expect range extension thunks for .text_low
3737
// adrp calculation is (PC + signed immediate) & (!0xfff)
3838
// CHECK: __AArch64ADRPThunk_high_target:
39-
// CHECK-NEXT: f0: adrp x16, #0x10000000
39+
// CHECK-NEXT: ec: adrp x16, #0x10000000
4040
// CHECK-NEXT: add x16, x16, #0x40
4141
// CHECK-NEXT: br x16
4242
// CHECK: __AArch64ADRPThunk_high_target2:
43-
// CHECK-NEXT: fc: adrp x16, #0x10000000
43+
// CHECK-NEXT: f8: adrp x16, #0x10000000
4444
// CHECK-NEXT: add x16, x16, #0x8
4545
// CHECK-NEXT: br x16
4646
/// Identical to the previous one, but for the target .text_high+8.
4747
// CHECK: __AArch64ADRPThunk_:
48-
// CHECK-NEXT: 108: adrp x16, #0x10000000
48+
// CHECK-NEXT: 104: adrp x16, #0x10000000
4949
// CHECK-NEXT: add x16, x16, #0x8
5050
// CHECK-NEXT: br x16
5151

lld/test/ELF/aarch64-thunk-script.s

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,21 @@ high_target:
3030
// CHECK: Disassembly of section .text_low:
3131
// CHECK-EMPTY:
3232
// CHECK-NEXT: _start:
33-
// CHECK-NEXT: 2000: bl #0x10 <__AArch64AbsLongThunk_high_target>
34-
// CHECK-NEXT: 2004: bl #0x1c <__AArch64AbsLongThunk_>
33+
// CHECK-NEXT: 2000: bl #0xc <__AArch64AbsLongThunk_high_target>
34+
// CHECK-NEXT: 2004: bl #0x18 <__AArch64AbsLongThunk_>
3535
// CHECK-NEXT: ret
3636
// CHECK: __AArch64AbsLongThunk_high_target:
37-
// CHECK-NEXT: 2010: ldr x16, #0x8
37+
// CHECK-NEXT: 200c: ldr x16, #0x8
3838
// CHECK-NEXT: br x16
3939
// CHECK: $d:
40-
// CHECK-NEXT: 2018: 00 20 00 08 .word 0x08002000
41-
// CHECK-NEXT: 201c: 00 00 00 00 .word 0x00000000
40+
// CHECK-NEXT: 2014: 00 20 00 08 .word 0x08002000
41+
// CHECK-NEXT: 2018: 00 00 00 00 .word 0x00000000
4242
// CHECK: __AArch64AbsLongThunk_:
43-
// CHECK-NEXT: 2020: ldr x16, #0x8
44-
// CHECK-NEXT: 2024: br x16
43+
// CHECK-NEXT: 201c: ldr x16, #0x8
44+
// CHECK-NEXT: 2020: br x16
4545
// CHECK: $d:
46-
// CHECK-NEXT: 2028: 04 20 00 08 .word 0x08002004
47-
// CHECK-NEXT: 202c: 00 00 00 00 .word 0x00000000
46+
// CHECK-NEXT: 2024: 04 20 00 08 .word 0x08002004
47+
// CHECK-NEXT: 2028: 00 00 00 00 .word 0x00000000
4848
// CHECK: Disassembly of section .text_high:
4949
// CHECK-EMPTY:
5050
// CHECK-NEXT: high_target:

lld/test/ELF/ppc64-dtprel.s

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@ k:
140140
// The got entry for i is at .got+8*1 = 0x4209e0
141141
// i@dtprel = 1024 - 0x8000 = -31744 = 0xffffffffffff8400
142142
// HEX-LE: section '.got':
143-
// HEX-LE-NEXT: 4209d0 d0894200 00000000 00000000 00000000
144-
// HEX-LE-NEXT: 4209e0 00000000 00000000
143+
// HEX-LE-NEXT: 4209c8 c8894200 00000000 00000000 00000000
144+
// HEX-LE-NEXT: 4209d8 00000000 00000000
145145

146146
// HEX-BE: section '.got':
147-
// HEX-BE-NEXT: 4209d0 00000000 004289d0 00000000 00000000
148-
// HEX-BE-NEXT: 4209e0 00000000 00000000
147+
// HEX-BE-NEXT: 4209c8 00000000 004289c8 00000000 00000000
148+
// HEX-BE-NEXT: 4209d8 00000000 00000000
149149

150150
// Dis: test:
151151
// Dis: addi 4, 3, -31744

lld/test/ELF/ppc64-ifunc.s

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616

1717
# SYM: Value Size Type Bind Vis Ndx
1818
# SYM: 0000000010028298 0 NOTYPE LOCAL HIDDEN 4 .TOC.
19-
# SYM: 0000000010010288 0 FUNC GLOBAL DEFAULT 3 ifunc1
19+
# SYM: 0000000010010284 0 FUNC GLOBAL DEFAULT 3 ifunc1
2020
# SYM: 0000000010010210 0 IFUNC GLOBAL DEFAULT 2 ifunc2
21-
# SYM: 0000000010010278 0 FUNC GLOBAL DEFAULT 3 ifunc3
21+
# SYM: 0000000010010274 0 FUNC GLOBAL DEFAULT 3 ifunc3
2222

2323
# SECTIONS: .plt NOBITS 00000000100302a0 0002a0 000018 00 WA 0 0 8
2424

@@ -27,24 +27,24 @@
2727
# CHECK: _start:
2828
# CHECK-NEXT: addis 2, 12, 2
2929
# CHECK-NEXT: addi 2, 2, -32636
30-
# CHECK-NEXT: 1001021c: bl .+36
30+
# CHECK-NEXT: 1001021c: bl .+32
3131
# CHECK-NEXT: ld 2, 24(1)
32-
# CHECK-NEXT: 10010224: bl .+48
32+
# CHECK-NEXT: 10010224: bl .+44
3333
# CHECK-NEXT: ld 2, 24(1)
3434
# CHECK-NEXT: addis 3, 2, -2
35-
# CHECK-NEXT: addi 3, 3, 32752
35+
# CHECK-NEXT: addi 3, 3, 32748
3636
# CHECK-NEXT: addis 3, 2, -2
37-
# CHECK-NEXT: addi 3, 3, 32736
37+
# CHECK-NEXT: addi 3, 3, 32732
3838

39-
# .plt[0] - .TOC. = 0x100302b0 - 0x100282a8 = (1<<16) - 32760
39+
# .plt[0] - .TOC. = 0x100302a0 - 0x10028298 = (1<<16) - 32760
4040
# CHECK: __plt_ifunc2:
4141
# CHECK-NEXT: std 2, 24(1)
4242
# CHECK-NEXT: addis 12, 2, 1
4343
# CHECK-NEXT: ld 12, -32760(12)
4444
# CHECK-NEXT: mtctr 12
4545
# CHECK-NEXT: bctr
4646

47-
# .plt[1] - .TOC. = 0x100302b0+8 - 0x100282a8 = (1<<16) - 32752
47+
# .plt[1] - .TOC. = 0x100302a0+8 - 0x10028298 = (1<<16) - 32752
4848
# CHECK: __plt_ifunc3:
4949
# CHECK-NEXT: std 2, 24(1)
5050
# CHECK-NEXT: addis 12, 2, 1
@@ -57,19 +57,19 @@
5757
## ifunc2 and ifunc3 have the same code sequence as their PLT call stubs.
5858
# CHECK: Disassembly of section .glink:
5959
# CHECK-EMPTY:
60-
# CHECK-NEXT: 0000000010010268 .glink:
60+
# CHECK-NEXT: 0000000010010264 .glink:
6161
# CHECK-NEXT: addis 12, 2, 1
6262
# CHECK-NEXT: ld 12, -32760(12)
6363
# CHECK-NEXT: mtctr 12
6464
# CHECK-NEXT: bctr
6565
# CHECK-EMPTY:
66-
# CHECK-NEXT: 0000000010010278 ifunc3:
66+
# CHECK-NEXT: 0000000010010274 ifunc3:
6767
# CHECK-NEXT: addis 12, 2, 1
6868
# CHECK-NEXT: ld 12, -32752(12)
6969
# CHECK-NEXT: mtctr 12
7070
# CHECK-NEXT: bctr
7171
# CHECK-EMPTY:
72-
# CHECK-NEXT: 0000000010010288 ifunc1:
72+
# CHECK-NEXT: 0000000010010284 ifunc1:
7373
# CHECK-NEXT: addis 12, 2, 1
7474
# CHECK-NEXT: ld 12, -32744(12)
7575
# CHECK-NEXT: mtctr 12

lld/test/ELF/ppc64-long-branch.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ blr
6464
# CHECK-NEXT: 2002000: addis 2, 12, 1
6565
# CHECK-NEXT: addi 2, 2, -32728
6666
# CHECK-NEXT: bl .-33554432
67-
# CHECK-NEXT: bl .+12
67+
# CHECK-NEXT: bl .+8
6868
# CHECK: __long_branch_:
69-
# CHECK-NEXT: 2002018: addis 12, 2, 0
69+
# CHECK-NEXT: 2002014: addis 12, 2, 0
7070
# CHECK-NEXT: ld 12, -32744(12)
7171
# CHECK-NEXT: mtctr 12
7272
# CHECK-NEXT: bctr

lld/test/ELF/ppc64-tls-gd.s

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,29 @@
1616
# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=IE %s
1717

1818
# GD-REL: .rela.dyn {
19-
# GD-REL-NEXT: 0x20540 R_PPC64_DTPMOD64 a 0x0
20-
# GD-REL-NEXT: 0x20548 R_PPC64_DTPREL64 a 0x0
21-
# GD-REL-NEXT: 0x20550 R_PPC64_DTPMOD64 b 0x0
22-
# GD-REL-NEXT: 0x20558 R_PPC64_DTPREL64 b 0x0
23-
# GD-REL-NEXT: 0x20560 R_PPC64_DTPMOD64 c 0x0
24-
# GD-REL-NEXT: 0x20568 R_PPC64_DTPREL64 c 0x0
19+
# GD-REL-NEXT: 0x20538 R_PPC64_DTPMOD64 a 0x0
20+
# GD-REL-NEXT: 0x20540 R_PPC64_DTPREL64 a 0x0
21+
# GD-REL-NEXT: 0x20548 R_PPC64_DTPMOD64 b 0x0
22+
# GD-REL-NEXT: 0x20550 R_PPC64_DTPREL64 b 0x0
23+
# GD-REL-NEXT: 0x20558 R_PPC64_DTPMOD64 c 0x0
24+
# GD-REL-NEXT: 0x20560 R_PPC64_DTPREL64 c 0x0
2525
# GD-REL-NEXT: }
2626

2727
## &DTPMOD(a) - .TOC. = &.got[0] - (.got+0x8000) = -32768
2828
# GD: addis 3, 2, 0
2929
# GD-NEXT: addi 3, 3, -32768
30-
# GD-NEXT: bl .+40
30+
# GD-NEXT: bl .+36
3131
# GD-NEXT: ld 2, 24(1)
3232

3333
## &DTPMOD(b) - .TOC. = &.got[2] - (.got+0x8000) = -32752
3434
# GD-NEXT: addis 3, 2, 0
3535
# GD-NEXT: addi 3, 3, -32752
36-
# GD-NEXT: bl .+24
36+
# GD-NEXT: bl .+20
3737
# GD-NEXT: ld 2, 24(1)
3838

3939
## &DTPMOD(b) - .TOC. = &.got[4] - (.got+0x8000) = -32736
4040
# GD-NEXT: li 3, -32736
41-
# GD-NEXT: bl .+12
41+
# GD-NEXT: bl .+8
4242
# GD-NEXT: ld 2, 24(1)
4343

4444
# NOREL: no relocations

lld/test/ELF/ppc64-toc-restore.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ _start:
2929
nop
3030
bl bar_local
3131
// CHECK-LABEL: _start:
32-
// CHECK-NEXT: 100102c8: bl .+64
32+
// CHECK-NEXT: 100102c8: bl .+60
3333
// CHECK-NEXT: 100102cc: ld 2, 24(1)
3434
// CHECK-NEXT: 100102d0: bl .-16
3535
// CHECK-EMPTY:
@@ -61,5 +61,5 @@ last:
6161
bl foo
6262
nop
6363
// CHECK-LABEL: last:
64-
// CHECK-NEXT: 100102e4: bl .+36
64+
// CHECK-NEXT: 100102e4: bl .+32
6565
// CHECK-NEXT: 100102e8: ld 2, 24(1)

0 commit comments

Comments
 (0)