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 --filetype=obj --args -O2 --verbose none -o %t \ | 6 ; RUN: %p2i -i %s --filetype=obj --args -O2 --verbose none -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: %if --need=allow_dump --command %p2i -i %s --args -O2 --verbose none \ | 10 ; RUN: %if --need=allow_dump --command %p2i -i %s --args -O2 --verbose none \ |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 @double_zero_const = internal constant [8 x i8] zeroinitializer, align 32 | 48 @double_zero_const = internal constant [8 x i8] zeroinitializer, align 32 |
49 @double_zero_const2 = internal constant [8 x i8] zeroinitializer, align 8 | 49 @double_zero_const2 = internal constant [8 x i8] zeroinitializer, align 8 |
50 | 50 |
51 ; Use float/double constants to test constant pools. | 51 ; Use float/double constants to test constant pools. |
52 define internal float @returnFloatConst() { | 52 define internal float @returnFloatConst() { |
53 entry: | 53 entry: |
54 %f = fadd float -0.0, 0x3FF3AE1400000000 | 54 %f = fadd float -0.0, 0x3FF3AE1400000000 |
55 ret float %f | 55 ret float %f |
56 } | 56 } |
57 ; TEXT-RELOCS-LABEL: returnFloatConst | 57 ; TEXT-RELOCS-LABEL: returnFloatConst |
58 ; TEXT-RELOCS: movss {{.*}} R_386_32 .L$float$0 | 58 ; TEXT-RELOCS: movss {{.*}} R_386_32 .L$float$80000000 |
59 ; TEXT-RELOCS: addss {{.*}} R_386_32 .L$float$1 | 59 ; TEXT-RELOCS: addss {{.*}} R_386_32 .L$float$3f9d70a0 |
60 | 60 |
61 define internal double @returnDoubleConst() { | 61 define internal double @returnDoubleConst() { |
62 entry: | 62 entry: |
63 %d = fadd double 0x7FFFFFFFFFFFFFFFF, 0xFFF7FFFFFFFFFFFF | 63 %d = fadd double 0x7FFFFFFFFFFFFFFFF, 0xFFF7FFFFFFFFFFFF |
64 %d2 = fadd double %d, 0xFFF8000000000003 | 64 %d2 = fadd double %d, 0xFFF8000000000003 |
65 ret double %d2 | 65 ret double %d2 |
66 } | 66 } |
67 ; TEXT-RELOCS-LABEL: returnDoubleConst | 67 ; TEXT-RELOCS-LABEL: returnDoubleConst |
68 ; TEXT-RELOCS: movsd {{.*}} R_386_32 .L$double$0 | 68 ; TEXT-RELOCS: movsd {{.*}} R_386_32 .L$double$ffffffffffffffff |
69 ; TEXT-RELOCS: addsd {{.*}} R_386_32 .L$double$1 | 69 ; TEXT-RELOCS: addsd {{.*}} R_386_32 .L$double$fff7ffffffffffff |
70 ; TEXT-RELOCS: addsd {{.*}} R_386_32 .L$double$2 | 70 ; TEXT-RELOCS: addsd {{.*}} R_386_32 .L$double$fff8000000000003 |
71 | 71 |
72 ; Test intrinsics that call out to external functions. | 72 ; Test intrinsics that call out to external functions. |
73 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { | 73 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { |
74 entry: | 74 entry: |
75 %dst = inttoptr i32 %iptr_dst to i8* | 75 %dst = inttoptr i32 %iptr_dst to i8* |
76 %src = bitcast [7 x i8]* @bytes to i8* | 76 %src = bitcast [7 x i8]* @bytes to i8* |
77 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, | 77 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, |
78 i32 %len, i32 1, i1 false) | 78 i32 %len, i32 1, i1 false) |
79 ret void | 79 ret void |
80 } | 80 } |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 ; CHECK: Size: {{[1-9][0-9]*}} | 376 ; CHECK: Size: {{[1-9][0-9]*}} |
377 ; CHECK: Link: 0 | 377 ; CHECK: Link: 0 |
378 ; CHECK: Info: 0 | 378 ; CHECK: Info: 0 |
379 ; CHECK: AddressAlignment: 1 | 379 ; CHECK: AddressAlignment: 1 |
380 ; CHECK: EntrySize: 0 | 380 ; CHECK: EntrySize: 0 |
381 ; CHECK: } | 381 ; CHECK: } |
382 | 382 |
383 | 383 |
384 ; CHECK: Relocations [ | 384 ; CHECK: Relocations [ |
385 ; CHECK: Section ({{[0-9]+}}) .rel.text { | 385 ; CHECK: Section ({{[0-9]+}}) .rel.text { |
386 ; CHECK: 0x4 R_386_32 .L$float$0 0x0 | 386 ; CHECK: 0x4 R_386_32 .L$float$80000000 0x0 |
387 ; CHECK: 0xC R_386_32 .L$float$1 0x0 | 387 ; CHECK: 0xC R_386_32 .L$float$3f9d70a0 0x0 |
388 ; CHECK: 0x24 R_386_32 .L$double$0 0x0 | 388 ; CHECK: 0x24 R_386_32 .L$double$ffffffffffffffff 0x0 |
389 ; CHECK: 0x2C R_386_32 .L$double$1 0x0 | 389 ; CHECK: 0x2C R_386_32 .L$double$fff7ffffffffffff 0x0 |
390 ; CHECK: 0x34 R_386_32 .L$double$2 0x0 | 390 ; CHECK: 0x34 R_386_32 .L$double$fff8000000000003 0x0 |
391 ; CHECK: 0x{{.*}} R_386_PC32 memcpy | 391 ; CHECK: 0x{{.*}} R_386_PC32 memcpy |
392 ; CHECK: 0x{{.*}} R_386_PC32 memset | 392 ; CHECK: 0x{{.*}} R_386_PC32 memset |
393 ; CHECK: 0x{{.*}} R_386_PC32 external_foo | 393 ; CHECK: 0x{{.*}} R_386_PC32 external_foo |
394 ; CHECK: } | 394 ; CHECK: } |
395 ; CHECK: Section ({{[0-9]+}}) .rel.data { | 395 ; CHECK: Section ({{[0-9]+}}) .rel.data { |
396 ; The set of relocations between llvm-mc and the integrated elf-writer | 396 ; The set of relocations between llvm-mc and the integrated elf-writer |
397 ; are different. For local symbols, llvm-mc uses the section + offset within | 397 ; are different. For local symbols, llvm-mc uses the section + offset within |
398 ; the section, while the integrated elf-writer refers the symbol itself. | 398 ; the section, while the integrated elf-writer refers the symbol itself. |
399 ; CHECK: 0x10 R_386_32 {{.*}} 0x0 | 399 ; CHECK: 0x10 R_386_32 {{.*}} 0x0 |
400 ; CHECK: 0x14 R_386_32 {{.*}} 0x0 | 400 ; CHECK: 0x14 R_386_32 {{.*}} 0x0 |
(...skipping 11 matching lines...) Expand all Loading... |
412 ; CHECK-NEXT: Symbol { | 412 ; CHECK-NEXT: Symbol { |
413 ; CHECK-NEXT: Name: (0) | 413 ; CHECK-NEXT: Name: (0) |
414 ; CHECK-NEXT: Value: 0x0 | 414 ; CHECK-NEXT: Value: 0x0 |
415 ; CHECK-NEXT: Size: 0 | 415 ; CHECK-NEXT: Size: 0 |
416 ; CHECK-NEXT: Binding: Local | 416 ; CHECK-NEXT: Binding: Local |
417 ; CHECK-NEXT: Type: None | 417 ; CHECK-NEXT: Type: None |
418 ; CHECK-NEXT: Other: 0 | 418 ; CHECK-NEXT: Other: 0 |
419 ; CHECK-NEXT: Section: Undefined (0x0) | 419 ; CHECK-NEXT: Section: Undefined (0x0) |
420 ; CHECK-NEXT: } | 420 ; CHECK-NEXT: } |
421 ; CHECK: Symbol { | 421 ; CHECK: Symbol { |
422 ; CHECK: Name: .L$double$0 | 422 ; CHECK: Name: .L$double$fff8000000000003 |
423 ; CHECK-NEXT: Value: 0x10 | 423 ; CHECK-NEXT: Value: 0x8 |
424 ; CHECK-NEXT: Size: 0 | 424 ; CHECK-NEXT: Size: 0 |
425 ; CHECK-NEXT: Binding: Local (0x0) | 425 ; CHECK-NEXT: Binding: Local (0x0) |
426 ; CHECK-NEXT: Type: None (0x0) | 426 ; CHECK-NEXT: Type: None (0x0) |
427 ; CHECK-NEXT: Other: 0 | 427 ; CHECK-NEXT: Other: 0 |
428 ; CHECK-NEXT: Section: .rodata.cst8 | 428 ; CHECK-NEXT: Section: .rodata.cst8 |
429 ; CHECK-NEXT: } | 429 ; CHECK-NEXT: } |
430 ; CHECK: Symbol { | 430 ; CHECK: Symbol { |
431 ; CHECK: Name: .L$double$2 | 431 ; CHECK: Name: .L$double$ffffffffffffffff |
432 ; CHECK-NEXT: Value: 0x8 | 432 ; CHECK-NEXT: Value: 0x10 |
433 ; CHECK-NEXT: Size: 0 | 433 ; CHECK-NEXT: Size: 0 |
434 ; CHECK-NEXT: Binding: Local (0x0) | 434 ; CHECK-NEXT: Binding: Local (0x0) |
435 ; CHECK-NEXT: Type: None (0x0) | 435 ; CHECK-NEXT: Type: None (0x0) |
436 ; CHECK-NEXT: Other: 0 | 436 ; CHECK-NEXT: Other: 0 |
437 ; CHECK-NEXT: Section: .rodata.cst8 | 437 ; CHECK-NEXT: Section: .rodata.cst8 |
438 ; CHECK-NEXT: } | 438 ; CHECK-NEXT: } |
439 ; CHECK: Symbol { | 439 ; CHECK: Symbol { |
440 ; CHECK: Name: .L$float$0 | 440 ; CHECK: Name: .L$float$3f9d70a0 |
441 ; CHECK-NEXT: Value: 0x4 | 441 ; CHECK-NEXT: Value: 0x0 |
442 ; CHECK-NEXT: Size: 0 | 442 ; CHECK-NEXT: Size: 0 |
443 ; CHECK-NEXT: Binding: Local (0x0) | 443 ; CHECK-NEXT: Binding: Local (0x0) |
444 ; CHECK-NEXT: Type: None (0x0) | 444 ; CHECK-NEXT: Type: None (0x0) |
445 ; CHECK-NEXT: Other: 0 | 445 ; CHECK-NEXT: Other: 0 |
446 ; CHECK-NEXT: Section: .rodata.cst4 | 446 ; CHECK-NEXT: Section: .rodata.cst4 |
447 ; CHECK-NEXT: } | 447 ; CHECK-NEXT: } |
448 ; CHECK: Symbol { | 448 ; CHECK: Symbol { |
449 ; CHECK: Name: .L$float$1 | 449 ; CHECK: Name: .L$float$80000000 |
450 ; CHECK-NEXT: Value: 0x0 | 450 ; CHECK-NEXT: Value: 0x4 |
451 ; CHECK-NEXT: Size: 0 | 451 ; CHECK-NEXT: Size: 0 |
452 ; CHECK-NEXT: Binding: Local (0x0) | 452 ; CHECK-NEXT: Binding: Local (0x0) |
453 ; CHECK-NEXT: Type: None (0x0) | 453 ; CHECK-NEXT: Type: None (0x0) |
454 ; CHECK-NEXT: Other: 0 | 454 ; CHECK-NEXT: Other: 0 |
455 ; CHECK-NEXT: Section: .rodata.cst4 | 455 ; CHECK-NEXT: Section: .rodata.cst4 |
456 ; CHECK-NEXT: } | 456 ; CHECK-NEXT: } |
457 ; CHECK: Symbol { | 457 ; CHECK: Symbol { |
458 ; CHECK: Name: addend_ptr | 458 ; CHECK: Name: addend_ptr |
459 ; CHECK-NEXT: Value: 0x18 | 459 ; CHECK-NEXT: Value: 0x18 |
460 ; CHECK-NEXT: Size: 4 | 460 ; CHECK-NEXT: Size: 4 |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 ; CHECK: Symbol { | 638 ; CHECK: Symbol { |
639 ; CHECK: Name: memset | 639 ; CHECK: Name: memset |
640 ; CHECK-NEXT: Value: 0x0 | 640 ; CHECK-NEXT: Value: 0x0 |
641 ; CHECK-NEXT: Size: 0 | 641 ; CHECK-NEXT: Size: 0 |
642 ; CHECK-NEXT: Binding: Global | 642 ; CHECK-NEXT: Binding: Global |
643 ; CHECK-NEXT: Type: None | 643 ; CHECK-NEXT: Type: None |
644 ; CHECK-NEXT: Other: 0 | 644 ; CHECK-NEXT: Other: 0 |
645 ; CHECK-NEXT: Section: Undefined | 645 ; CHECK-NEXT: Section: Undefined |
646 ; CHECK-NEXT: } | 646 ; CHECK-NEXT: } |
647 ; CHECK: ] | 647 ; CHECK: ] |
OLD | NEW |