|
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