File tree Expand file tree Collapse file tree 4 files changed +234
-3
lines changed Expand file tree Collapse file tree 4 files changed +234
-3
lines changed Original file line number Diff line number Diff line change @@ -509,11 +509,11 @@ class RewriteInstance {
509
509
};
510
510
511
511
// / AArch64 PLT sections.
512
- const PLTSectionInfo AArch64_PLTSections[3 ] = {
513
- {" .plt" }, {" .iplt" }, {nullptr }};
512
+ const PLTSectionInfo AArch64_PLTSections[4 ] = {
513
+ {" .plt" }, {" .plt.got " }, { " . iplt" }, {nullptr }};
514
514
515
515
// / RISCV PLT sections.
516
- const PLTSectionInfo RISCV_PLTSections[3 ] = {{" .plt" }, {nullptr }};
516
+ const PLTSectionInfo RISCV_PLTSections[2 ] = {{" .plt" }, {nullptr }};
517
517
518
518
// / Return PLT information for a section with \p SectionName or nullptr
519
519
// / if the section is not PLT.
Original file line number Diff line number Diff line change @@ -862,6 +862,14 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
862
862
// / add x16, x16, #0xbe0
863
863
// / br x17
864
864
// /
865
+ // / The other type of trampolines are located in .plt.got, that are used for
866
+ // / non-lazy bindings so doesn't use x16 arg to transfer .got entry address:
867
+ // /
868
+ // / adrp x16, 230000
869
+ // / ldr x17, [x16, #3040]
870
+ // / br x17
871
+ // / nop
872
+ // /
865
873
uint64_t analyzePLTEntry (MCInst &Instruction, InstructionIterator Begin,
866
874
InstructionIterator End,
867
875
uint64_t BeginPC) const override {
Original file line number Diff line number Diff line change
1
+ --- !ELF
2
+ FileHeader :
3
+ Class : ELFCLASS64
4
+ Data : ELFDATA2LSB
5
+ Type : ET_DYN
6
+ Machine : EM_AARCH64
7
+ Entry : 0x10360
8
+ ProgramHeaders :
9
+ - Type : PT_PHDR
10
+ Flags : [ PF_R ]
11
+ VAddr : 0x40
12
+ Align : 0x8
13
+ Offset : 0x40
14
+ - Type : PT_INTERP
15
+ Flags : [ PF_R ]
16
+ FirstSec : .interp
17
+ LastSec : .interp
18
+ VAddr : 0x270
19
+ Offset : 0x270
20
+ - Type : PT_LOAD
21
+ Flags : [ PF_R ]
22
+ FirstSec : .interp
23
+ LastSec : .rela.dyn
24
+ Align : 0x10000
25
+ Offset : 0x0
26
+ - Type : PT_LOAD
27
+ Flags : [ PF_X, PF_R ]
28
+ FirstSec : .plt.got
29
+ LastSec : .text
30
+ VAddr : 0x10350
31
+ Align : 0x10000
32
+ Offset : 0x2e0
33
+ - Type : PT_LOAD
34
+ Flags : [ PF_W, PF_R ]
35
+ FirstSec : .interp
36
+ LastSec : .got
37
+ VAddr : 0x203B0
38
+ Align : 0x10000
39
+ Offset : 0x270
40
+ - Type : PT_LOAD
41
+ Flags : [ PF_W, PF_R ]
42
+ FirstSec : .got.plt
43
+ LastSec : .got.plt
44
+ VAddr : 0x304E0
45
+ Align : 0x10000
46
+ Offset : 0x420
47
+ - Type : PT_DYNAMIC
48
+ Flags : [ PF_W, PF_R ]
49
+ FirstSec : .dynamic
50
+ LastSec : .dynamic
51
+ VAddr : 0x203B0
52
+ Align : 0x8
53
+ Offset : 0x340
54
+ - Type : PT_GNU_STACK
55
+ Flags : [ PF_W, PF_R ]
56
+ Offset : 0x0
57
+ Sections :
58
+ - Name : .interp
59
+ Type : SHT_PROGBITS
60
+ Flags : [ SHF_ALLOC ]
61
+ Address : 0x270
62
+ AddressAlign : 0x1
63
+ Offset : 0x270
64
+ Content : 2F6C69622F6C642D6C696E75782D616172636836342E736F2E3100
65
+ - Name : .dynsym
66
+ Type : SHT_DYNSYM
67
+ Flags : [ SHF_ALLOC ]
68
+ Address : 0x2B0
69
+ Link : .dynstr
70
+ AddressAlign : 0x8
71
+ - Name : .dynstr
72
+ Type : SHT_STRTAB
73
+ Flags : [ SHF_ALLOC ]
74
+ Address : 0x2E0
75
+ AddressAlign : 0x1
76
+ - Name : .rela.dyn
77
+ Type : SHT_RELA
78
+ Flags : [ SHF_ALLOC ]
79
+ Address : 0x2F0
80
+ Link : .dynsym
81
+ AddressAlign : 0x8
82
+ Relocations :
83
+ - Offset : 0x204D8
84
+ Symbol : abort
85
+ Type : R_AARCH64_GLOB_DAT
86
+ - Name : .plt.got
87
+ Type : SHT_PROGBITS
88
+ Flags : [ SHF_ALLOC, SHF_EXECINSTR ]
89
+ Address : 0x10350
90
+ AddressAlign : 0x10
91
+ Content : 90000090116E42F920021FD61F2003D5
92
+ - Name : .text
93
+ Type : SHT_PROGBITS
94
+ Flags : [ SHF_ALLOC, SHF_EXECINSTR ]
95
+ Address : 0x10360
96
+ AddressAlign : 0x4
97
+ Content : FF8300D1FD7B01A9FD43009188000090086D42F9E80700F9E80740F9080100F1E8179F1AA800003701000014E80740F900013FD601000014EEFFFF97007D20D41000009010420D9100021FD61F2003D5
98
+ - Name : .dynamic
99
+ Type : SHT_DYNAMIC
100
+ Flags : [ SHF_WRITE, SHF_ALLOC ]
101
+ Address : 0x203B0
102
+ Link : .dynstr
103
+ AddressAlign : 0x8
104
+ Entries :
105
+ - Tag : DT_NEEDED
106
+ Value : 0x1
107
+ - Tag : DT_RELA
108
+ Value : 0x2F0
109
+ - Tag : DT_RELASZ
110
+ Value : 0x18
111
+ - Tag : DT_RELAENT
112
+ Value : 0x18
113
+ - Tag : DT_PLTGOT
114
+ Value : 0x304E0
115
+ - Tag : DT_SYMTAB
116
+ Value : 0x2B0
117
+ - Tag : DT_SYMENT
118
+ Value : 0x18
119
+ - Tag : DT_STRTAB
120
+ Value : 0x2E0
121
+ - Tag : DT_STRSZ
122
+ Value : 0x10
123
+ - Tag : DT_GNU_HASH
124
+ Value : 0x290
125
+ - Tag : DT_FLAGS_1
126
+ Value : 0x8000000
127
+ - Tag : DT_DEBUG
128
+ Value : 0x0
129
+ - Tag : DT_NULL
130
+ Value : 0x0
131
+ - Name : .got
132
+ Type : SHT_PROGBITS
133
+ Flags : [ SHF_WRITE, SHF_ALLOC ]
134
+ Address : 0x204D0
135
+ AddressAlign : 0x8
136
+ Content : ' 00000000000000000000000000000000'
137
+ - Name : .got.plt
138
+ Type : SHT_PROGBITS
139
+ Flags : [ SHF_WRITE, SHF_ALLOC ]
140
+ Address : 0x304E0
141
+ AddressAlign : 0x8
142
+ Content : B00302000000000000000000000000000000000000000000
143
+ - Name : .rela.text
144
+ Type : SHT_RELA
145
+ Flags : [ SHF_INFO_LINK ]
146
+ Link : .symtab
147
+ AddressAlign : 0x8
148
+ Offset : 0x1268
149
+ Info : .text
150
+ Relocations :
151
+ - Offset : 0x1036C
152
+ Symbol : abort
153
+ Type : R_AARCH64_ADR_GOT_PAGE
154
+ - Offset : 0x10370
155
+ Symbol : abort
156
+ Type : R_AARCH64_LD64_GOT_LO12_NC
157
+ - Offset : 0x10398
158
+ Symbol : abort
159
+ Type : R_AARCH64_CALL26
160
+ - Type : SectionHeaderTable
161
+ Sections :
162
+ - Name : .interp
163
+ - Name : .dynsym
164
+ - Name : .dynstr
165
+ - Name : .rela.dyn
166
+ - Name : .plt.got
167
+ - Name : .text
168
+ - Name : .dynamic
169
+ - Name : .got
170
+ - Name : .got.plt
171
+ - Name : .strtab
172
+ - Name : .symtab
173
+ - Name : .shstrtab
174
+ - Name : .rela.text
175
+ Symbols :
176
+ - Name : .text
177
+ Type : STT_SECTION
178
+ Section : .text
179
+ Value : 0x10360
180
+ - Name : .dynamic
181
+ Type : STT_SECTION
182
+ Section : .dynamic
183
+ Value : 0x203B0
184
+ - Name : .got
185
+ Type : STT_SECTION
186
+ Section : .got
187
+ Value : 0x204D0
188
+ - Name : .got.plt
189
+ Type : STT_SECTION
190
+ Section : .got.plt
191
+ Value : 0x304E0
192
+ - Name : ' abort$got'
193
+ Type : STT_OBJECT
194
+ Section : .got
195
+ Value : 0x204D8
196
+ - Name : _start
197
+ Type : STT_FUNC
198
+ Section : .text
199
+ Value : 0x10360
200
+ Size : 0x3C
201
+ - Name : _DYNAMIC
202
+ Section : .dynamic
203
+ Value : 0x203B0
204
+ - Name : _GLOBAL_OFFSET_TABLE_
205
+ Section : .got
206
+ Value : 0x204D0
207
+ - Name : abort
208
+ Type : STT_FUNC
209
+ Binding : STB_GLOBAL
210
+ Size : 0x8
211
+ DynamicSymbols :
212
+ - Name : abort
213
+ Type : STT_FUNC
214
+ Binding : STB_GLOBAL
215
+ Size : 0x8
216
+ ...
Original file line number Diff line number Diff line change
1
+ // This test checks .plt.got handling by BOLT
2
+
3
+ RUN: yaml2obj %p/Inputs/plt-got.yaml &> %t.exe
4
+ RUN: llvm-bolt %t.exe -o %t.bolt --print-disasm --print-only=_start/1 | \
5
+ RUN: FileCheck %s
6
+
7
+ CHECK: bl abort@PLT
You can’t perform that action at this time.
0 commit comments