| ## Check that llvm-readelf and llvm-readobj can |
| ## dump SHT_GROUP sections properly. |
| |
| # RUN: yaml2obj %s -o %t.o |
| # RUN: llvm-readobj -g %t.o | FileCheck %s |
| # RUN: llvm-readelf -g %t.o | FileCheck --check-prefix=GNU %s |
| |
| # CHECK: Groups { |
| # CHECK-NEXT: Group { |
| # CHECK-NEXT: Name: .group |
| # CHECK-NEXT: Index: 1 |
| # CHECK-NEXT: Link: 7 |
| # CHECK-NEXT: Info: 1 |
| # CHECK-NEXT: Type: COMDAT |
| # CHECK-NEXT: Signature: foo |
| # CHECK-NEXT: Section(s) in group [ |
| # CHECK-NEXT: .text.foo |
| # CHECK-NEXT: .rela.text.foo |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| # CHECK-NEXT: Group { |
| # CHECK-NEXT: Name: .group1 |
| # CHECK-NEXT: Index: 2 |
| # CHECK-NEXT: Link: 7 |
| # CHECK-NEXT: Info: 2 |
| # CHECK-NEXT: Type: COMDAT |
| # CHECK-NEXT: Signature: bar |
| # CHECK-NEXT: Section(s) in group [ |
| # CHECK-NEXT: .text.bar |
| # CHECK-NEXT: .rela.text.bar |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| |
| # GNU: COMDAT group section [ 1] `.group' [foo] contains 2 sections: |
| # GNU-NEXT: [Index] Name |
| # GNU-NEXT: [ 3] .text.foo |
| # GNU-NEXT: [ 4] .rela.text.foo |
| # GNU: COMDAT group section [ 2] `.group1' [bar] contains 2 sections: |
| # GNU-NEXT: [Index] Name |
| # GNU-NEXT: [ 5] .text.bar |
| # GNU-NEXT: [ 6] .rela.text.bar |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .group |
| Type: SHT_GROUP |
| Link: .symtab |
| Info: foo |
| Members: |
| - SectionOrType: GRP_COMDAT |
| - SectionOrType: .text.foo |
| - SectionOrType: .rela.text.foo |
| - Name: .group1 |
| Type: SHT_GROUP |
| Link: .symtab |
| Info: bar |
| Members: |
| - SectionOrType: GRP_COMDAT |
| - SectionOrType: [[TEXTBARNAME=.text.bar]] |
| - SectionOrType: .rela.text.bar |
| - Name: .text.foo |
| Type: SHT_PROGBITS |
| - Name: .rela.text.foo |
| Type: SHT_RELA |
| Link: .symtab |
| Info: .text.foo |
| - Name: .text.bar |
| Type: SHT_PROGBITS |
| - Name: .rela.text.bar |
| Type: SHT_RELA |
| Link: .symtab |
| Info: .text.bar |
| Symbols: |
| - Name: foo |
| Section: .text.foo |
| - Name: bar |
| Section: .text.bar |
| |
| ## Check that we report a warning and continue dumping when a section is included |
| ## in two group sections at the same time. |
| |
| # RUN: yaml2obj %s -DTEXTBARNAME=.text.foo -o %t.dup.o |
| # RUN: llvm-readobj --elf-section-groups %t.dup.o 2>&1 | FileCheck %s -DFILE=%t.dup.o --check-prefix=DUP-LLVM |
| # RUN: llvm-readelf --elf-section-groups %t.dup.o 2>&1 | FileCheck %s -DFILE=%t.dup.o --check-prefix=DUP-GNU |
| |
| # DUP-LLVM: Group { |
| # DUP-LLVM-NEXT: Name: .group |
| # DUP-LLVM-NEXT: Index: 1 |
| # DUP-LLVM-NEXT: Link: 7 |
| # DUP-LLVM-NEXT: Info: 1 |
| # DUP-LLVM-NEXT: Type: COMDAT |
| # DUP-LLVM-NEXT: Signature: foo |
| # DUP-LLVM-NEXT: Section(s) in group [ |
| # DUP-LLVM-NEXT: .text.foo (3) |
| # DUP-LLVM-NEXT: .rela.text.foo (4) |
| # DUP-LLVM-NEXT: ] |
| # DUP-LLVM-NEXT: } |
| # DUP-LLVM: Group { |
| # DUP-LLVM-NEXT: Name: .group1 |
| # DUP-LLVM-NEXT: Index: 2 |
| # DUP-LLVM-NEXT: Link: 7 |
| # DUP-LLVM-NEXT: Info: 2 |
| # DUP-LLVM-NEXT: Type: COMDAT |
| # DUP-LLVM-NEXT: Signature: bar |
| # DUP-LLVM-NEXT: Section(s) in group [ |
| # DUP-LLVM-NEXT: warning: '[[FILE]]': section with index 3, included in the group section with index 1, was also found in the group section with index 2 |
| # DUP-LLVM-NEXT: .text.foo (3) |
| # DUP-LLVM-NEXT: .rela.text.bar (6) |
| # DUP-LLVM-NEXT: ] |
| # DUP-LLVM-NEXT: } |
| |
| # DUP-GNU: COMDAT group section [ 1] `.group' [foo] contains 2 sections: |
| # DUP-GNU-NEXT: [Index] Name |
| # DUP-GNU-NEXT: [ 3] .text.foo |
| # DUP-GNU-NEXT: [ 4] .rela.text.foo |
| |
| # DUP-GNU: COMDAT group section [ 2] `.group1' [bar] contains 2 sections: |
| # DUP-GNU-NEXT: [Index] Name |
| # DUP-GNU-NEXT: warning: '[[FILE]]': section with index 3, included in the group section with index 1, was also found in the group section with index 2 |
| # DUP-GNU-NEXT: [ 3] .text.foo |
| # DUP-GNU-NEXT: [ 6] .rela.text.bar |