|
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