diff options
author | Fangrui Song <i@maskray.me> | 2025-07-02 00:28:40 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2025-07-02 00:28:40 -0700 |
commit | d5608d6751315f2e34a0445ca7f5be44a1520463 (patch) | |
tree | fbb315d674659eca05f5b044d8ebea3a7551e054 | |
parent | 647aa6616fa5fee8770e3ea041b7df391050fa51 (diff) | |
download | llvm-d5608d6751315f2e34a0445ca7f5be44a1520463.zip llvm-d5608d6751315f2e34a0445ca7f5be44a1520463.tar.gz llvm-d5608d6751315f2e34a0445ca7f5be44a1520463.tar.bz2 |
MC,test: Improve section group test
Also add a case for #146581
```
.section sec,"ax"
.section .foo,"axG",@progbits,sec
nop
```
-rw-r--r-- | llvm/test/MC/ELF/comdat.s | 100 | ||||
-rw-r--r-- | llvm/test/MC/ELF/group.s | 59 |
2 files changed, 59 insertions, 100 deletions
diff --git a/llvm/test/MC/ELF/comdat.s b/llvm/test/MC/ELF/comdat.s deleted file mode 100644 index e5862fa..0000000 --- a/llvm/test/MC/ELF/comdat.s +++ /dev/null @@ -1,100 +0,0 @@ -// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -S --symbols --sd - | FileCheck %s - -// Test that we produce the group sections and that they are before the members - -// CHECK: Section { -// CHECK: Index: 3 -// CHECK-NEXT: Name: .group -// CHECK-NEXT: Type: SHT_GROUP -// CHECK-NEXT: Flags [ -// CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x0 -// CHECK-NEXT: Offset: -// CHECK-NEXT: Size: 12 -// CHECK-NEXT: Link: -// CHECK-NEXT: Info: 1 -// CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 4 -// CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 01000000 04000000 05000000 -// CHECK-NEXT: ) -// CHECK-NEXT: } -// CHECK: Section { -// CHECK: Index: 6 -// CHECK-NEXT: Name: .group -// CHECK-NEXT: Type: SHT_GROUP -// CHECK-NEXT: Flags [ -// CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x0 -// CHECK-NEXT: Offset: -// CHECK-NEXT: Size: 8 -// CHECK-NEXT: Link: -// CHECK-NEXT: Info: 2 -// CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 4 -// CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 01000000 07000000 -// CHECK-NEXT: ) -// CHECK-NEXT: } -// CHECK: Section { -// CHECK: Index: 8 -// CHECK-NEXT: Name: .group -// CHECK-NEXT: Type: SHT_GROUP -// CHECK-NEXT: Flags [ -// CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x0 -// CHECK-NEXT: Offset: -// CHECK-NEXT: Size: 12 -// CHECK-NEXT: Link: -// CHECK-NEXT: Info: 3 -// CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 4 -// CHECK-NEXT: SectionData ( -// CHECK-NEXT: 0000: 01000000 09000000 0A000000 -// CHECK-NEXT: ) -// CHECK-NEXT: } - -// Test that g1 and g2 are local, but g3 is an undefined global. - -// CHECK: Symbol { -// CHECK: Name: g1 -// CHECK-NEXT: Value: 0x0 -// CHECK-NEXT: Size: 0 -// CHECK-NEXT: Binding: Local -// CHECK-NEXT: Type: None -// CHECK-NEXT: Other: 0 -// CHECK-NEXT: Section: .foo -// CHECK-NEXT: } -// CHECK-NEXT: Symbol { -// CHECK-NEXT: Name: g2 -// CHECK-NEXT: Value: 0x0 -// CHECK-NEXT: Size: 0 -// CHECK-NEXT: Binding: Local -// CHECK-NEXT: Type: None -// CHECK-NEXT: Other: 0 -// CHECK-NEXT: Section: .group -// CHECK-NEXT: } - -// CHECK: Symbol { -// CHECK: Name: g3 -// CHECK-NEXT: Value: 0x0 -// CHECK-NEXT: Size: 0 -// CHECK-NEXT: Binding: Global -// CHECK-NEXT: Type: None -// CHECK-NEXT: Other: 0 -// CHECK-NEXT: Section: Undefined (0x0) -// CHECK-NEXT: } - - - .section .foo,"axG",@progbits,g1,comdat -g1: - nop - - .section .bar,"ax?",@progbits - nop - - .section .zed,"axG",@progbits,g2,comdat - nop - - .section .baz,"axG",@progbits,g3,comdat - .long g3 diff --git a/llvm/test/MC/ELF/group.s b/llvm/test/MC/ELF/group.s new file mode 100644 index 0000000..8f6097e --- /dev/null +++ b/llvm/test/MC/ELF/group.s @@ -0,0 +1,59 @@ +# RUN: llvm-mc -filetype=obj -triple x86_64 %s -o %t +# RUN: llvm-readelf -SsX %t | FileCheck %s +# RUN: llvm-readelf -g %t | FileCheck %s --check-prefix=GROUP + +## Test that we produce the group sections and that they are before the members + +# CHECK: [ 3] .group GROUP 0000000000000000 {{.*}} 00000c 04 14 1 4 +# CHECK-NEXT: [ 4] .foo PROGBITS 0000000000000000 {{.*}} 000001 00 AXG 0 0 1 +# CHECK-NEXT: [ 5] .bar PROGBITS 0000000000000000 {{.*}} 000001 00 AXG 0 0 1 +# CHECK-NEXT: [ 6] .group GROUP 0000000000000000 {{.*}} 000008 04 14 2 4 +# CHECK-NEXT: [ 7] .zed PROGBITS 0000000000000000 {{.*}} 000001 00 AXG 0 0 1 +# CHECK-NEXT: [ 8] .group GROUP 0000000000000000 {{.*}} 00000c 04 14 4 4 +# CHECK-NEXT: [ 9] .baz PROGBITS 0000000000000000 {{.*}} 000004 00 AXG 0 0 1 +# CHECK-NEXT: [10] .rela.baz RELA 0000000000000000 {{.*}} 000018 18 G 14 9 8 +# CHECK-NEXT: [11] sec PROGBITS 0000000000000000 {{.*}} 000000 00 0 0 1 +# CHECK-NEXT: [12] .group GROUP 0000000000000000 {{.*}} 000008 04 14 3 4 +# CHECK-NEXT: [13] .qux PROGBITS 0000000000000000 {{.*}} 000000 00 AXG 0 0 1 +# CHECK-NEXT: [14] .symtab SYMTAB + +## Test that g1 and g2 are local, but g3 is an undefined global. + +# CHECK: 0000000000000000 0 NOTYPE LOCAL DEFAULT 4 (.foo) g1 +# CHECK-NEXT: 0000000000000000 0 NOTYPE LOCAL DEFAULT 6 (.group) g2 +# CHECK-NEXT: 0000000000000000 0 SECTION LOCAL DEFAULT 11 (sec) sec +# CHECK-NEXT: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND g3 + +# GROUP: COMDAT group section [ 3] `.group' [g1] contains 2 sections: +# GROUP-NEXT: [Index] Name +# GROUP-NEXT: [ 4] .foo +# GROUP-NEXT: [ 5] .bar +# GROUP-EMPTY: +# GROUP-NEXT: COMDAT group section [ 6] `.group' [g2] contains 1 sections: +# GROUP-NEXT: [Index] Name +# GROUP-NEXT: [ 7] .zed +# GROUP-EMPTY: +# GROUP-NEXT: COMDAT group section [ 8] `.group' [g3] contains 2 sections: +# GROUP-NEXT: [Index] Name +# GROUP-NEXT: [ 9] .baz +# GROUP-NEXT: [ 10] .rela.baz +# GROUP-EMPTY: +# GROUP-NEXT: group section [ 12] `.group' [] contains 1 sections: +# GROUP-NEXT: [Index] Name +# GROUP-NEXT: [ 13] .qux + + .section .foo,"axG",@progbits,g1,comdat +g1: + nop + + .section .bar,"ax?",@progbits + nop + + .section .zed,"axG",@progbits,g2,comdat + nop + + .section .baz,"axG",@progbits,g3,comdat + .long g3 + +.section sec +.section .qux,"axG",@progbits,sec |