Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(765)

Side by Side Diff: tests_lit/llvm2ice_tests/elf_container.ll

Issue 828873002: Subzero: Start writing out some relocation sections (text) (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: review fixes Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/llvm2ice.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; Tests that we generate an ELF container with fields that make sense, 1 ; Tests that we generate an ELF container with fields that make sense,
2 ; cross-validating against llvm-mc. 2 ; cross-validating against llvm-mc.
3 3
4 ; For the integrated ELF writer, we can't pipe the output because we need 4 ; For the integrated ELF writer, we can't pipe the output because we need
5 ; to seek backward and patch up the file headers. So, use a temporary file. 5 ; to seek backward and patch up the file headers. So, use a temporary file.
6 ; RUN: %p2i -i %s --args -O2 --verbose none -elf-writer -o %t \ 6 ; RUN: %p2i -i %s --args -O2 --verbose none -elf-writer -o %t \
7 ; RUN: && llvm-readobj -file-headers -sections -section-data \ 7 ; RUN: && llvm-readobj -file-headers -sections -section-data \
8 ; RUN: -relocations -symbols %t | FileCheck %s 8 ; RUN: -relocations -symbols %t | FileCheck %s
9 9
10 ; RUN: %p2i -i %s --args -O2 --verbose none \ 10 ; RUN: %p2i -i %s --args -O2 --verbose none \
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 ret float %f 42 ret float %f
43 } 43 }
44 44
45 define internal double @returnDoubleConst() { 45 define internal double @returnDoubleConst() {
46 entry: 46 entry:
47 %d = fadd double 0x7FFFFFFFFFFFFFFFF, 0xFFF7FFFFFFFFFFFF 47 %d = fadd double 0x7FFFFFFFFFFFFFFFF, 0xFFF7FFFFFFFFFFFF
48 %d2 = fadd double %d, 0xFFF8000000000003 48 %d2 = fadd double %d, 0xFFF8000000000003
49 ret double %d2 49 ret double %d2
50 } 50 }
51 51
52 ; Test intrinsics that call out to external functions.
52 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { 53 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) {
53 entry: 54 entry:
54 %dst = inttoptr i32 %iptr_dst to i8* 55 %dst = inttoptr i32 %iptr_dst to i8*
55 %src = bitcast [7 x i8]* @bytes to i8* 56 %src = bitcast [7 x i8]* @bytes to i8*
56 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, 57 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src,
57 i32 %len, i32 1, i1 false) 58 i32 %len, i32 1, i1 false)
58 ret void 59 ret void
59 } 60 }
60 61
61 define internal void @test_memset(i32 %iptr_dst, i32 %wide_val, i32 %len) { 62 define internal void @test_memset(i32 %iptr_dst, i32 %wide_val, i32 %len) {
62 entry: 63 entry:
63 %val = trunc i32 %wide_val to i8 64 %val = trunc i32 %wide_val to i8
64 %dst = inttoptr i32 %iptr_dst to i8* 65 %dst = inttoptr i32 %iptr_dst to i8*
65 call void @llvm.memset.p0i8.i32(i8* %dst, i8 %val, 66 call void @llvm.memset.p0i8.i32(i8* %dst, i8 %val,
66 i32 %len, i32 1, i1 false) 67 i32 %len, i32 1, i1 false)
67 ret void 68 ret void
68 } 69 }
69 70
70 ; Test non-internal functions too. 71 ; Test calling internal functions (may be able to do the fixup,
72 ; without emitting a relocation).
73 define internal float @test_call_internal() {
74 %f = call float @returnFloatConst()
75 ret float %f
76 }
77
78 ; Test copying a function pointer, or a global data pointer.
79 define internal i32 @test_ret_fp() {
80 %r = ptrtoint float ()* @returnFloatConst to i32
81 ret i32 %r
82 }
83
84 define internal i32 @test_ret_global_pointer() {
85 %r = ptrtoint [7 x i8]* @bytes to i32
86 ret i32 %r
87 }
88
89 ; Test defining a non-internal function.
71 define void @_start(i32) { 90 define void @_start(i32) {
72 %f = call float @returnFloatConst() 91 %f = call float @returnFloatConst()
73 %d = call double @returnDoubleConst() 92 %d = call double @returnDoubleConst()
74 call void @test_memcpy(i32 0, i32 99) 93 call void @test_memcpy(i32 0, i32 99)
75 call void @test_memset(i32 0, i32 0, i32 99) 94 call void @test_memset(i32 0, i32 0, i32 99)
95 %f2 = call float @test_call_internal()
96 %p1 = call i32 @test_ret_fp()
97 %p2 = call i32 @test_ret_global_pointer()
76 ret void 98 ret void
77 } 99 }
78 100
79
80 ; CHECK: ElfHeader { 101 ; CHECK: ElfHeader {
81 ; CHECK: Ident { 102 ; CHECK: Ident {
82 ; CHECK: Magic: (7F 45 4C 46) 103 ; CHECK: Magic: (7F 45 4C 46)
83 ; CHECK: Class: 32-bit 104 ; CHECK: Class: 32-bit
84 ; CHECK: DataEncoding: LittleEndian 105 ; CHECK: DataEncoding: LittleEndian
85 ; CHECK: OS/ABI: SystemV (0x0) 106 ; CHECK: OS/ABI: SystemV (0x0)
86 ; CHECK: ABIVersion: 0 107 ; CHECK: ABIVersion: 0
87 ; CHECK: Unused: (00 00 00 00 00 00 00) 108 ; CHECK: Unused: (00 00 00 00 00 00 00)
88 ; CHECK: } 109 ; CHECK: }
89 ; CHECK: Type: Relocatable (0x1) 110 ; CHECK: Type: Relocatable (0x1)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 ; CHECK: Info: 0 156 ; CHECK: Info: 0
136 ; CHECK: AddressAlignment: 32 157 ; CHECK: AddressAlignment: 32
137 ; CHECK: EntrySize: 0 158 ; CHECK: EntrySize: 0
138 ; CHECK: SectionData ( 159 ; CHECK: SectionData (
139 ; There's probably halt padding (0xF4) in there somewhere. 160 ; There's probably halt padding (0xF4) in there somewhere.
140 ; CHECK: {{.*}}F4 161 ; CHECK: {{.*}}F4
141 ; CHECK: ) 162 ; CHECK: )
142 ; CHECK: } 163 ; CHECK: }
143 ; CHECK: Section { 164 ; CHECK: Section {
144 ; CHECK: Index: {{[1-9][0-9]*}} 165 ; CHECK: Index: {{[1-9][0-9]*}}
166 ; CHECK: Name: .rel.text
167 ; CHECK: Type: SHT_REL
168 ; CHECK: Flags [ (0x0)
169 ; CHECK: ]
170 ; CHECK: Address: 0x0
171 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
172 ; CHECK: Size: {{[1-9][0-9]*}}
173 ; CHECK: Link: [[SYMTAB_INDEX:[1-9][0-9]*]]
174 ; CHECK: Info: {{[1-9][0-9]*}}
175 ; CHECK: AddressAlignment: 4
176 ; CHECK: EntrySize: 8
177 ; CHECK: SectionData (
178 ; CHECK: )
179 ; CHECK: }
180 ; CHECK: Section {
181 ; CHECK: Index: {{[1-9][0-9]*}}
145 ; CHECK: Name: .rodata.cst4 182 ; CHECK: Name: .rodata.cst4
146 ; CHECK: Type: SHT_PROGBITS 183 ; CHECK: Type: SHT_PROGBITS
147 ; CHECK: Flags [ (0x12) 184 ; CHECK: Flags [ (0x12)
148 ; CHECK: SHF_ALLOC 185 ; CHECK: SHF_ALLOC
149 ; CHECK: SHF_MERGE 186 ; CHECK: SHF_MERGE
150 ; CHECK: ] 187 ; CHECK: ]
151 ; CHECK: Address: 0x0 188 ; CHECK: Address: 0x0
152 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} 189 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
153 ; CHECK: Size: 8 190 ; CHECK: Size: 8
154 ; CHECK: Link: 0 191 ; CHECK: Link: 0
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 ; CHECK: Size: {{[1-9][0-9]*}} 227 ; CHECK: Size: {{[1-9][0-9]*}}
191 ; CHECK: Link: 0 228 ; CHECK: Link: 0
192 ; CHECK: Info: 0 229 ; CHECK: Info: 0
193 ; CHECK: AddressAlignment: 1 230 ; CHECK: AddressAlignment: 1
194 ; CHECK: EntrySize: 0 231 ; CHECK: EntrySize: 0
195 ; CHECK: SectionData ( 232 ; CHECK: SectionData (
196 ; CHECK: {{.*}}.text{{.*}} 233 ; CHECK: {{.*}}.text{{.*}}
197 ; CHECK: ) 234 ; CHECK: )
198 ; CHECK: } 235 ; CHECK: }
199 ; CHECK: Section { 236 ; CHECK: Section {
200 ; CHECK: Index: {{[1-9][0-9]*}} 237 ; CHECK: Index: [[SYMTAB_INDEX]]
201 ; CHECK: Name: .symtab 238 ; CHECK-NEXT: Name: .symtab
202 ; CHECK: Type: SHT_SYMTAB 239 ; CHECK: Type: SHT_SYMTAB
203 ; CHECK: Flags [ (0x0) 240 ; CHECK: Flags [ (0x0)
204 ; CHECK: ] 241 ; CHECK: ]
205 ; CHECK: Address: 0x0 242 ; CHECK: Address: 0x0
206 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} 243 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
207 ; CHECK: Size: {{[1-9][0-9]*}} 244 ; CHECK: Size: {{[1-9][0-9]*}}
208 ; CHECK: Link: [[STRTAB_INDEX:[1-9][0-9]*]] 245 ; CHECK: Link: [[STRTAB_INDEX:[1-9][0-9]*]]
209 ; CHECK: Info: [[GLOBAL_START_INDEX:[1-9][0-9]*]] 246 ; CHECK: Info: [[GLOBAL_START_INDEX:[1-9][0-9]*]]
210 ; CHECK: AddressAlignment: 4 247 ; CHECK: AddressAlignment: 4
211 ; CHECK: EntrySize: 16 248 ; CHECK: EntrySize: 16
212 ; CHECK: } 249 ; CHECK: }
213 ; CHECK: Section { 250 ; CHECK: Section {
214 ; CHECK: Index: [[STRTAB_INDEX]] 251 ; CHECK: Index: [[STRTAB_INDEX]]
215 ; CHECK: Name: .strtab 252 ; CHECK-NEXT: Name: .strtab
216 ; CHECK: Type: SHT_STRTAB 253 ; CHECK: Type: SHT_STRTAB
217 ; CHECK: Flags [ (0x0) 254 ; CHECK: Flags [ (0x0)
218 ; CHECK: ] 255 ; CHECK: ]
219 ; CHECK: Address: 0x0 256 ; CHECK: Address: 0x0
220 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} 257 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}}
221 ; CHECK: Size: {{[1-9][0-9]*}} 258 ; CHECK: Size: {{[1-9][0-9]*}}
222 ; CHECK: Link: 0 259 ; CHECK: Link: 0
223 ; CHECK: Info: 0 260 ; CHECK: Info: 0
224 ; CHECK: AddressAlignment: 1 261 ; CHECK: AddressAlignment: 1
225 ; CHECK: EntrySize: 0 262 ; CHECK: EntrySize: 0
226 ; CHECK: } 263 ; CHECK: }
227 264
228 265
229 ; CHECK: Relocations [ 266 ; CHECK: Relocations [
230 ; TODO: fill it out. 267 ; CHECK: Section ({{[0-9]+}}) .rel.text {
268 ; CHECK: 0x4 R_386_32 .L$float$0 0x0
269 ; CHECK: 0xC R_386_32 .L$float$1 0x0
270 ; CHECK: 0x24 R_386_32 .L$double$0 0x0
271 ; CHECK: 0x2C R_386_32 .L$double$1 0x0
272 ; CHECK: 0x34 R_386_32 .L$double$2 0x0
273 ; The set of relocations between llvm-mc and integrated elf-writer
274 ; are different. The integrated elf-writer doesn't yet handle
275 ; global data and external/undef functions like memcpy.
276 ; Also, it does not resolve internal function calls and instead
277 ; writes out the relocation. However, there's probably some
278 ; function call so check for a PC32 relocation at least.
279 ; CHECK: 0x{{.*}} R_386_PC32
280 ; CHECK: }
231 ; CHECK: ] 281 ; CHECK: ]
232 282
233 283
234 ; CHECK: Symbols [ 284 ; CHECK: Symbols [
235 ; CHECK-NEXT: Symbol { 285 ; CHECK-NEXT: Symbol {
236 ; CHECK-NEXT: Name: (0) 286 ; CHECK-NEXT: Name: (0)
237 ; CHECK-NEXT: Value: 0x0 287 ; CHECK-NEXT: Value: 0x0
238 ; CHECK-NEXT: Size: 0 288 ; CHECK-NEXT: Size: 0
239 ; CHECK-NEXT: Binding: Local 289 ; CHECK-NEXT: Binding: Local
240 ; CHECK-NEXT: Type: None 290 ; CHECK-NEXT: Type: None
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 ; CHECK: Symbol { 359 ; CHECK: Symbol {
310 ; CHECK: Name: _start 360 ; CHECK: Name: _start
311 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} 361 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}}
312 ; CHECK-NEXT: Size: 0 362 ; CHECK-NEXT: Size: 0
313 ; CHECK-NEXT: Binding: Global 363 ; CHECK-NEXT: Binding: Global
314 ; CHECK-NEXT: Type: Function 364 ; CHECK-NEXT: Type: Function
315 ; CHECK-NEXT: Other: 0 365 ; CHECK-NEXT: Other: 0
316 ; CHECK-NEXT: Section: .text 366 ; CHECK-NEXT: Section: .text
317 ; CHECK-NEXT: } 367 ; CHECK-NEXT: }
318 ; CHECK: ] 368 ; CHECK: ]
OLDNEW
« no previous file with comments | « src/llvm2ice.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698