|
1 | 1 | # REQUIRES: x86
|
2 | 2 | # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
3 |
| -# RUN: ld.lld %t.o -r -o %t-rel |
4 |
| -# RUN: llvm-readobj -S --section-data %t-rel | FileCheck %s |
| 3 | +# RUN: ld.lld %t.o -r -o %t.ro |
| 4 | +# RUN: llvm-readelf -S %t.ro | FileCheck %s |
| 5 | +# RUN: llvm-objdump -s %t.ro | FileCheck %s --check-prefix=OBJDUMP |
5 | 6 |
|
6 |
| -# When linker generates a relocatable object it does string merging in the same |
7 |
| -# way as for regular link. It should keep SHF_MERGE flag and set proper sh_entsize |
8 |
| -# value so that final link can perform the final merging optimization. |
| 7 | +# RUN: ld.lld %t.o -o %t |
| 8 | +# RUN: llvm-readelf -S %t | FileCheck %s --check-prefix=CHECK-PDE |
9 | 9 |
|
10 |
| -# CHECK: Section { |
11 |
| -# CHECK: Index: |
12 |
| -# CHECK: Name: .rodata.1 ( |
13 |
| -# CHECK-NEXT: Type: SHT_PROGBITS |
14 |
| -# CHECK-NEXT: Flags [ |
15 |
| -# CHECK-NEXT: SHF_ALLOC |
16 |
| -# CHECK-NEXT: SHF_MERGE |
17 |
| -# CHECK-NEXT: ] |
18 |
| -# CHECK-NEXT: Address: |
19 |
| -# CHECK-NEXT: Offset: |
20 |
| -# CHECK-NEXT: Size: 4 |
21 |
| -# CHECK-NEXT: Link: 0 |
22 |
| -# CHECK-NEXT: Info: 0 |
23 |
| -# CHECK-NEXT: AddressAlignment: 4 |
24 |
| -# CHECK-NEXT: EntrySize: 4 |
25 |
| -# CHECK-NEXT: SectionData ( |
26 |
| -# CHECK-NEXT: 0000: 42000000 |
27 |
| -# CHECK-NEXT: ) |
28 |
| -# CHECK-NEXT: } |
29 |
| -# CHECK: Section { |
30 |
| -# CHECK: Index: |
31 |
| -# CHECK: Name: .rodata.2 ( |
32 |
| -# CHECK-NEXT: Type: SHT_PROGBITS |
33 |
| -# CHECK-NEXT: Flags [ |
34 |
| -# CHECK-NEXT: SHF_ALLOC |
35 |
| -# CHECK-NEXT: SHF_MERGE |
36 |
| -# CHECK-NEXT: ] |
37 |
| -# CHECK-NEXT: Address: |
38 |
| -# CHECK-NEXT: Offset: |
39 |
| -# CHECK-NEXT: Size: 8 |
40 |
| -# CHECK-NEXT: Link: 0 |
41 |
| -# CHECK-NEXT: Info: 0 |
42 |
| -# CHECK-NEXT: AddressAlignment: 8 |
43 |
| -# CHECK-NEXT: EntrySize: 8 |
44 |
| -# CHECK-NEXT: SectionData ( |
45 |
| -# CHECK-NEXT: 0000: 42000000 42000000 |
46 |
| -# CHECK-NEXT: ) |
47 |
| -# CHECK-NEXT: } |
48 |
| -# CHECK: Section { |
49 |
| -# CHECK: Index: |
50 |
| -# CHECK: Name: .data |
51 |
| -# CHECK-NEXT: Type: SHT_PROGBITS |
52 |
| -# CHECK-NEXT: Flags [ |
53 |
| -# CHECK-NEXT: SHF_ALLOC |
54 |
| -# CHECK-NEXT: SHF_WRITE |
55 |
| -# CHECK-NEXT: ] |
56 |
| -# CHECK-NEXT: Address: |
57 |
| -# CHECK-NEXT: Offset: |
58 |
| -# CHECK-NEXT: Size: 16 |
59 |
| -# CHECK-NEXT: Link: 0 |
60 |
| -# CHECK-NEXT: Info: 0 |
61 |
| -# CHECK-NEXT: AddressAlignment: 1 |
62 |
| -# CHECK-NEXT: EntrySize: 0 |
63 |
| -# CHECK-NEXT: SectionData ( |
64 |
| -# CHECK-NEXT: 0000: 42000000 42000000 42000000 42000000 |
65 |
| -# CHECK-NEXT: ) |
66 |
| -# CHECK-NEXT: } |
| 10 | +# CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| 11 | +# CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 |
| 12 | +# CHECK-NEXT: [ 1] .text PROGBITS 0000000000000000 000040 000000 00 AX 0 0 4 |
| 13 | +# CHECK-NEXT: [ 2] .rodata.1 PROGBITS 0000000000000000 000040 000004 04 AM 0 0 4 |
| 14 | +# CHECK-NEXT: [ 3] .rodata.2 PROGBITS 0000000000000000 000048 000008 08 AM 0 0 8 |
| 15 | +# CHECK-NEXT: [ 4] .rodata.cst8 PROGBITS 0000000000000000 000050 000010 00 AM 0 0 1 |
| 16 | +# CHECK-NEXT: [ 5] .rela.rodata.cst8 RELA 0000000000000000 000068 000030 18 I 9 4 8 |
| 17 | +# CHECK-NEXT: [ 6] .cst4 PROGBITS 0000000000000000 000060 000008 00 AM 0 0 1 |
| 18 | +# CHECK-NEXT: [ 7] .rela.cst4 RELA 0000000000000000 000098 000030 18 I 9 6 8 |
| 19 | + |
| 20 | +# OBJDUMP: Contents of section .rodata.1: |
| 21 | +# OBJDUMP-NEXT: 0000 42000000 B... |
| 22 | +# OBJDUMP-NEXT: Contents of section .rodata.2: |
| 23 | +# OBJDUMP-NEXT: 0000 42000000 42000000 B...B... |
| 24 | +# OBJDUMP-NEXT: Contents of section .rodata.cst8: |
| 25 | +# OBJDUMP-NEXT: 0000 00000000 00000000 00000000 00000000 ................ |
| 26 | +# OBJDUMP: Contents of section .cst4: |
| 27 | +# OBJDUMP-NEXT: 0000 00000000 00000000 ........ |
| 28 | + |
| 29 | +# CHECK-PDE: [ 2] .cst4 PROGBITS 0000000000200140 000140 000008 00 AM 0 0 1 |
67 | 30 |
|
68 |
| - .section .rodata.1,"aM",@progbits,4 |
69 |
| - .align 4 |
70 |
| - .global foo |
71 | 31 | foo:
|
72 |
| - .long 0x42 |
73 |
| - .long 0x42 |
74 |
| - .long 0x42 |
75 | 32 |
|
76 |
| - .section .rodata.2,"aM",@progbits,8 |
77 |
| - .align 8 |
78 |
| - .global bar |
79 |
| -bar: |
80 |
| - .long 0x42 |
81 |
| - .long 0x42 |
82 |
| - .long 0x42 |
83 |
| - .long 0x42 |
| 33 | +.section .rodata.1,"aM",@progbits,4 |
| 34 | +.align 4 |
| 35 | +.long 0x42 |
| 36 | +.long 0x42 |
| 37 | +.long 0x42 |
| 38 | + |
| 39 | +.section .rodata.2,"aM",@progbits,8 |
| 40 | +.align 8 |
| 41 | +.long 0x42 |
| 42 | +.long 0x42 |
| 43 | +.long 0x42 |
| 44 | +.long 0x42 |
| 45 | + |
| 46 | +## Test that we keep a SHT_REL[A] section which relocates a SHF_MERGE section |
| 47 | +## in -r mode. The relocated SHF_MERGE section is handled as non-mergeable. |
| 48 | +.section .rodata.cst8,"aM",@progbits,8,unique,0 |
| 49 | +.quad foo |
| 50 | + |
| 51 | +.section .rodata.cst8,"aM",@progbits,8,unique,1 |
| 52 | +.quad foo |
84 | 53 |
|
85 |
| - .data |
86 |
| - .global gar |
87 |
| -zed: |
88 |
| - .long 0x42 |
89 |
| - .long 0x42 |
90 |
| - .long 0x42 |
91 |
| - .long 0x42 |
| 54 | +.section .cst4,"aM",@progbits,4,unique,0 |
| 55 | +.long foo |
| 56 | +.section .cst4,"aM",@progbits,4,unique,1 |
| 57 | +.long foo |
0 commit comments