OLD | NEW |
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 20 matching lines...) Expand all Loading... |
31 @const_short_zero = internal constant [2 x i8] zeroinitializer, align 2 | 31 @const_short_zero = internal constant [2 x i8] zeroinitializer, align 2 |
32 @const_double_zero = internal constant [8 x i8] zeroinitializer, align 8 | 32 @const_double_zero = internal constant [8 x i8] zeroinitializer, align 8 |
33 | 33 |
34 | 34 |
35 @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 128) | 35 @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 128) |
36 @const_addend_ptr = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32),
i32 64) | 36 @const_addend_ptr = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32),
i32 64) |
37 | 37 |
38 ; Use float/double constants to test constant pools. | 38 ; Use float/double constants to test constant pools. |
39 define internal float @returnFloatConst() { | 39 define internal float @returnFloatConst() { |
40 entry: | 40 entry: |
41 %f = fadd float 0x3FF3AE1480000000, 0x3FF3AE1400000000 | 41 %f = fadd float -0.0, 0x3FF3AE1400000000 |
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 1.230000e+00, 3.210000e+00 | 47 %d = fadd double 0x7FFFFFFFFFFFFFFFF, 0xFFF7FFFFFFFFFFFF |
48 ret double %d | 48 %d2 = fadd double %d, 0xFFF8000000000003 |
| 49 ret double %d2 |
49 } | 50 } |
50 | 51 |
51 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { | 52 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { |
52 entry: | 53 entry: |
53 %dst = inttoptr i32 %iptr_dst to i8* | 54 %dst = inttoptr i32 %iptr_dst to i8* |
54 %src = bitcast [7 x i8]* @bytes to i8* | 55 %src = bitcast [7 x i8]* @bytes to i8* |
55 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, | 56 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, |
56 i32 %len, i32 1, i1 false) | 57 i32 %len, i32 1, i1 false) |
57 ret void | 58 ret void |
58 } | 59 } |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 ; CHECK: Info: 0 | 135 ; CHECK: Info: 0 |
135 ; CHECK: AddressAlignment: 32 | 136 ; CHECK: AddressAlignment: 32 |
136 ; CHECK: EntrySize: 0 | 137 ; CHECK: EntrySize: 0 |
137 ; CHECK: SectionData ( | 138 ; CHECK: SectionData ( |
138 ; There's probably halt padding (0xF4) in there somewhere. | 139 ; There's probably halt padding (0xF4) in there somewhere. |
139 ; CHECK: {{.*}}F4 | 140 ; CHECK: {{.*}}F4 |
140 ; CHECK: ) | 141 ; CHECK: ) |
141 ; CHECK: } | 142 ; CHECK: } |
142 ; CHECK: Section { | 143 ; CHECK: Section { |
143 ; CHECK: Index: {{[1-9][0-9]*}} | 144 ; CHECK: Index: {{[1-9][0-9]*}} |
| 145 ; CHECK: Name: .rodata.cst4 |
| 146 ; CHECK: Type: SHT_PROGBITS |
| 147 ; CHECK: Flags [ (0x12) |
| 148 ; CHECK: SHF_ALLOC |
| 149 ; CHECK: SHF_MERGE |
| 150 ; CHECK: ] |
| 151 ; CHECK: Address: 0x0 |
| 152 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} |
| 153 ; CHECK: Size: 8 |
| 154 ; CHECK: Link: 0 |
| 155 ; CHECK: Info: 0 |
| 156 ; CHECK: AddressAlignment: 4 |
| 157 ; CHECK: EntrySize: 4 |
| 158 ; CHECK: SectionData ( |
| 159 ; CHECK: 0000: A0709D3F 00000080 |
| 160 ; CHECK: ) |
| 161 ; CHECK: } |
| 162 ; CHECK: Section { |
| 163 ; CHECK: Index: {{[1-9][0-9]*}} |
| 164 ; CHECK: Name: .rodata.cst8 |
| 165 ; CHECK: Type: SHT_PROGBITS |
| 166 ; CHECK: Flags [ (0x12) |
| 167 ; CHECK: SHF_ALLOC |
| 168 ; CHECK: SHF_MERGE |
| 169 ; CHECK: ] |
| 170 ; CHECK: Address: 0x0 |
| 171 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} |
| 172 ; CHECK: Size: 24 |
| 173 ; CHECK: Link: 0 |
| 174 ; CHECK: Info: 0 |
| 175 ; CHECK: AddressAlignment: 8 |
| 176 ; CHECK: EntrySize: 8 |
| 177 ; CHECK: SectionData ( |
| 178 ; CHECK: 0000: 03000000 0000F8FF FFFFFFFF FFFFF7FF |
| 179 ; CHECK: 0010: FFFFFFFF FFFFFFFF |
| 180 ; CHECK: ) |
| 181 ; CHECK: } |
| 182 ; CHECK: Section { |
| 183 ; CHECK: Index: {{[1-9][0-9]*}} |
144 ; CHECK: Name: .shstrtab | 184 ; CHECK: Name: .shstrtab |
145 ; CHECK: Type: SHT_STRTAB | 185 ; CHECK: Type: SHT_STRTAB |
146 ; CHECK: Flags [ (0x0) | 186 ; CHECK: Flags [ (0x0) |
147 ; CHECK: ] | 187 ; CHECK: ] |
148 ; CHECK: Address: 0x0 | 188 ; CHECK: Address: 0x0 |
149 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} | 189 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} |
150 ; CHECK: Size: {{[1-9][0-9]*}} | 190 ; CHECK: Size: {{[1-9][0-9]*}} |
151 ; CHECK: Link: 0 | 191 ; CHECK: Link: 0 |
152 ; CHECK: Info: 0 | 192 ; CHECK: Info: 0 |
153 ; CHECK: AddressAlignment: 1 | 193 ; CHECK: AddressAlignment: 1 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 ; CHECK-NEXT: Name: (0) | 236 ; CHECK-NEXT: Name: (0) |
197 ; CHECK-NEXT: Value: 0x0 | 237 ; CHECK-NEXT: Value: 0x0 |
198 ; CHECK-NEXT: Size: 0 | 238 ; CHECK-NEXT: Size: 0 |
199 ; CHECK-NEXT: Binding: Local | 239 ; CHECK-NEXT: Binding: Local |
200 ; CHECK-NEXT: Type: None | 240 ; CHECK-NEXT: Type: None |
201 ; CHECK-NEXT: Other: 0 | 241 ; CHECK-NEXT: Other: 0 |
202 ; CHECK-NEXT: Section: Undefined (0x0) | 242 ; CHECK-NEXT: Section: Undefined (0x0) |
203 ; CHECK-NEXT: } | 243 ; CHECK-NEXT: } |
204 ; TODO: fill in the data symbols. | 244 ; TODO: fill in the data symbols. |
205 ; CHECK: Symbol { | 245 ; CHECK: Symbol { |
| 246 ; CHECK: Name: .L$double$0 |
| 247 ; CHECK-NEXT: Value: 0x10 |
| 248 ; CHECK-NEXT: Size: 0 |
| 249 ; CHECK-NEXT: Binding: Local (0x0) |
| 250 ; CHECK-NEXT: Type: None (0x0) |
| 251 ; CHECK-NEXT: Other: 0 |
| 252 ; CHECK-NEXT: Section: .rodata.cst8 |
| 253 ; CHECK-NEXT: } |
| 254 ; CHECK: Symbol { |
| 255 ; CHECK: Name: .L$double$2 |
| 256 ; CHECK-NEXT: Value: 0x0 |
| 257 ; CHECK-NEXT: Size: 0 |
| 258 ; CHECK-NEXT: Binding: Local (0x0) |
| 259 ; CHECK-NEXT: Type: None (0x0) |
| 260 ; CHECK-NEXT: Other: 0 |
| 261 ; CHECK-NEXT: Section: .rodata.cst8 |
| 262 ; CHECK-NEXT: } |
| 263 ; CHECK: Symbol { |
| 264 ; CHECK: Name: .L$float$0 |
| 265 ; CHECK-NEXT: Value: 0x4 |
| 266 ; CHECK-NEXT: Size: 0 |
| 267 ; CHECK-NEXT: Binding: Local (0x0) |
| 268 ; CHECK-NEXT: Type: None (0x0) |
| 269 ; CHECK-NEXT: Other: 0 |
| 270 ; CHECK-NEXT: Section: .rodata.cst4 |
| 271 ; CHECK-NEXT: } |
| 272 ; CHECK: Symbol { |
| 273 ; CHECK: Name: .L$float$1 |
| 274 ; CHECK-NEXT: Value: 0x0 |
| 275 ; CHECK-NEXT: Size: 0 |
| 276 ; CHECK-NEXT: Binding: Local (0x0) |
| 277 ; CHECK-NEXT: Type: None (0x0) |
| 278 ; CHECK-NEXT: Other: 0 |
| 279 ; CHECK-NEXT: Section: .rodata.cst4 |
| 280 ; CHECK-NEXT: } |
| 281 ; CHECK: Symbol { |
206 ; CHECK: Name: returnDoubleConst | 282 ; CHECK: Name: returnDoubleConst |
207 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} | 283 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} |
208 ; CHECK-NEXT: Size: 0 | 284 ; CHECK-NEXT: Size: 0 |
209 ; CHECK-NEXT: Binding: Local | 285 ; CHECK-NEXT: Binding: Local |
210 ; CHECK-NEXT: Type: None | 286 ; CHECK-NEXT: Type: None |
211 ; CHECK-NEXT: Other: 0 | 287 ; CHECK-NEXT: Other: 0 |
212 ; CHECK-NEXT: Section: .text | 288 ; CHECK-NEXT: Section: .text |
213 ; CHECK-NEXT: } | 289 ; CHECK-NEXT: } |
214 ; CHECK: Symbol { | 290 ; CHECK: Symbol { |
215 ; CHECK: Name: returnFloatConst | 291 ; CHECK: Name: returnFloatConst |
(...skipping 17 matching lines...) Expand all Loading... |
233 ; CHECK: Symbol { | 309 ; CHECK: Symbol { |
234 ; CHECK: Name: _start | 310 ; CHECK: Name: _start |
235 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} | 311 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} |
236 ; CHECK-NEXT: Size: 0 | 312 ; CHECK-NEXT: Size: 0 |
237 ; CHECK-NEXT: Binding: Global | 313 ; CHECK-NEXT: Binding: Global |
238 ; CHECK-NEXT: Type: Function | 314 ; CHECK-NEXT: Type: Function |
239 ; CHECK-NEXT: Other: 0 | 315 ; CHECK-NEXT: Other: 0 |
240 ; CHECK-NEXT: Section: .text | 316 ; CHECK-NEXT: Section: .text |
241 ; CHECK-NEXT: } | 317 ; CHECK-NEXT: } |
242 ; CHECK: ] | 318 ; CHECK: ] |
OLD | NEW |