|
3 | 3 | ## may be rewritten because group members may change their indices. Additionally, |
4 | 4 | ## group member may be combined or discarded (e.g. /DISCARD/ or --gc-sections). |
5 | 5 |
|
6 | | -# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o |
7 | | -# RUN: ld.lld -r %t.o %t.o -o %t.ro |
8 | | -# RUN: llvm-readelf -g -S %t.ro | FileCheck %s |
| 6 | +# RUN: rm -rf %t && split-file %s %t && cd %t |
| 7 | +# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o |
| 8 | +# RUN: ld.lld -r a.o a.o -o a.ro |
| 9 | +# RUN: llvm-readelf -g -S a.ro | FileCheck %s |
9 | 10 |
|
10 | | -# CHECK: Name Type Address Off Size ES Flg Lk Inf Al |
11 | | -# CHECK: .group GROUP 0000000000000000 {{.*}} 000014 04 {{[1-9]}} [[#]] 4 |
| 11 | +# CHECK: Name Type Address Off Size ES Flg Lk Inf Al |
| 12 | +# CHECK: .group GROUP 0000000000000000 {{.*}} 00001c 04 [[#]] [[#]] 4 |
| 13 | +# CHECK-NEXT: .rodata.bar PROGBITS 0000000000000000 {{.*}} 000001 00 AG 0 0 1 |
| 14 | +# CHECK-NEXT: .rodata.foo PROGBITS 0000000000000000 {{.*}} 000001 00 AG 0 0 1 |
| 15 | +# CHECK-NEXT: .text.bar PROGBITS 0000000000000000 {{.*}} 000008 00 AXG 0 0 1 |
| 16 | +# CHECK-NEXT: .rela.text.bar RELA 0000000000000000 {{.*}} 000018 18 IG [[#]] [[#]] 8 |
| 17 | +# CHECK-NEXT: .text.foo PROGBITS 0000000000000000 {{.*}} 000008 00 AXG [[#]] [[#]] 1 |
| 18 | +# CHECK-NEXT: .rela.text.foo RELA 0000000000000000 {{.*}} 000018 18 IG [[#]] [[#]] 8 |
| 19 | +# CHECK-NEXT: .note.GNU-stack |
12 | 20 |
|
13 | | -# CHECK: COMDAT group section [{{.*}}] `.group' [abc] contains 4 sections: |
| 21 | +# CHECK: COMDAT group section [{{.*}}] `.group' [abc] contains 6 sections: |
14 | 22 | # CHECK-NEXT: Name |
15 | 23 | # CHECK-NEXT: .rodata.bar |
16 | 24 | # CHECK-NEXT: .rodata.foo |
17 | 25 | # CHECK-NEXT: .text.bar |
| 26 | +# CHECK-NEXT: .rela.text.bar |
18 | 27 | # CHECK-NEXT: .text.foo |
| 28 | +# CHECK-NEXT: .rela.text.foo |
19 | 29 |
|
20 | 30 | ## Rewrite SHT_GROUP content if some members are combined. |
21 | | -# RUN: echo 'SECTIONS { .rodata : {*(.rodata.*)} .text : {*(.text.*)} }' > %t1.lds |
22 | | -# RUN: ld.lld -r -T %t1.lds %t.o %t.o -o %t1.ro |
23 | | -# RUN: llvm-readelf -g -S %t1.ro | FileCheck %s --check-prefix=SCRIPT1 |
| 31 | +# RUN: echo 'SECTIONS { .rodata : {*(.rodata.*)} .text : {*(.text.*)} }' > combine.lds |
| 32 | +# RUN: ld.lld -r -T combine.lds a.o a.o -o combine.ro |
| 33 | +# RUN: llvm-readelf -g -S combine.ro | FileCheck %s --check-prefix=COMBINE |
24 | 34 |
|
25 | | -# SCRIPT1: Name Type Address Off Size ES Flg Lk Inf Al |
26 | | -# SCRIPT1: .group GROUP 0000000000000000 {{.*}} 00000c 04 {{[1-9]}} [[#]] 4 |
| 35 | +# COMBINE: Name Type Address Off Size ES Flg Lk Inf Al |
| 36 | +# COMBINE: .rodata PROGBITS 0000000000000000 {{.*}} 000002 00 AG 0 0 1 |
| 37 | +# COMBINE-NEXT: .text PROGBITS 0000000000000000 {{.*}} 000010 00 AXG 0 0 4 |
| 38 | +# COMBINE-NEXT: .group GROUP 0000000000000000 {{.*}} 000014 04 [[#]] [[#]] 4 |
| 39 | +# COMBINE-NEXT: .rela.text RELA 0000000000000000 {{.*}} 000018 18 IG [[#]] [[#]] 8 |
| 40 | +# COMBINE-NEXT: .rela.text RELA 0000000000000000 {{.*}} 000018 18 IG [[#]] [[#]] 8 |
| 41 | +# COMBINE-NEXT: .note.GNU-stack |
27 | 42 |
|
28 | | -# SCRIPT1: COMDAT group section [{{.*}}] `.group' [abc] contains 2 sections: |
29 | | -# SCRIPT1-NEXT: Name |
30 | | -# SCRIPT1-NEXT: .rodata |
31 | | -# SCRIPT1-NEXT: .text |
| 43 | +# COMBINE: COMDAT group section [{{.*}}] `.group' [abc] contains 4 sections: |
| 44 | +# COMBINE-NEXT: Name |
| 45 | +# COMBINE-NEXT: .rodata |
| 46 | +# COMBINE-NEXT: .text |
| 47 | +# COMBINE-NEXT: .rela.text |
| 48 | +# COMBINE-NEXT: .rela.text |
32 | 49 |
|
33 | | -# RUN: echo 'SECTIONS { /DISCARD/ : {*(.rodata.*)} }' > %t2.lds |
34 | | -# RUN: ld.lld -r -T %t2.lds %t.o %t.o -o %t2.ro |
35 | | -# RUN: llvm-readelf -g -S %t2.ro | FileCheck %s --check-prefix=SCRIPT2 |
| 50 | +# RUN: echo 'SECTIONS { /DISCARD/ : {*(.rodata.*)} }' > discard-rodata.lds |
| 51 | +# RUN: ld.lld -r -T discard-rodata.lds a.o a.o -o discard-rodata.ro |
| 52 | +# RUN: llvm-readelf -g -S discard-rodata.ro | FileCheck %s --check-prefix=NO-RODATA |
36 | 53 |
|
37 | 54 | ## Handle discarded group members. |
38 | | -# SCRIPT2: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
39 | | -# SCRIPT2: [ 2] .group GROUP 0000000000000000 {{.*}} 00000c 04 {{[1-9]}} [[#]] 4 |
| 55 | +# NO-RODATA: Name Type Address Off Size ES Flg Lk Inf Al |
| 56 | +# NO-RODATA: .group GROUP 0000000000000000 {{.*}} 000014 04 [[#]] [[#]] 4 |
| 57 | +# NO-RODATA-NEXT: .text.bar PROGBITS 0000000000000000 {{.*}} 000008 00 AXG 0 0 1 |
| 58 | +# NO-RODATA-NEXT: .rela.text.bar RELA 0000000000000000 {{.*}} 000018 18 IG [[#]] [[#]] 8 |
| 59 | +# NO-RODATA-NEXT: .text.foo PROGBITS 0000000000000000 {{.*}} 000008 00 AXG [[#]] [[#]] 1 |
| 60 | +# NO-RODATA-NEXT: .rela.text.foo RELA 0000000000000000 {{.*}} 000018 18 IG [[#]] [[#]] 8 |
| 61 | +# NO-RODATA-NEXT: .note.GNU-stack |
40 | 62 |
|
41 | | -# SCRIPT2: COMDAT group section [{{.*}}] `.group' [abc] contains 2 sections: |
42 | | -# SCRIPT2-NEXT: Name |
43 | | -# SCRIPT2-NEXT: .text.bar |
44 | | -# SCRIPT2-NEXT: .text.foo |
| 63 | +# NO-RODATA: COMDAT group section [{{.*}}] `.group' [abc] contains 4 sections: |
| 64 | +# NO-RODATA-NEXT: Name |
| 65 | +# NO-RODATA-NEXT: .text.bar |
| 66 | +# NO-RODATA-NEXT: .rela.text.bar |
| 67 | +# NO-RODATA-NEXT: .text.foo |
| 68 | +# NO-RODATA-NEXT: .rela.text.foo |
45 | 69 |
|
| 70 | +#--- a.s |
46 | 71 | .weak abc |
47 | 72 | abc: |
48 | 73 |
|
|
52 | 77 | .byte 42 |
53 | 78 |
|
54 | 79 | .section .text.bar,"axG",@progbits,abc,comdat |
55 | | -.quad 42 |
| 80 | +.quad abc |
56 | 81 | .section .text.foo,"axG",@progbits,abc,comdat |
57 | | -.long 42 |
| 82 | +.quad abc |
0 commit comments