Georgii Rymar 066e209c9d [llvm-readelf/readobj] - Fix the behavior when a sections is included in two groups at the same time.
The current behavior was introduced by me in D37567 and it is a bit strange. It prints the
"Error: ...." message to the errs() manually and stops dumping the group section which has this error.
This behavior is consistent with GNU though, but it is very inconsistent with what the regular llvm-readelf
code usually does/prints, so I suggest to change the implementation:

1) Instead of printing "Error: ...." to errs() - just report a warning.
2) Try to continue dumping the section.
3) Merge broken-group.test to group.text.

This is what this patch does.

Differential revision: https://reviews.llvm.org/D84170
2020-07-22 13:29:54 +03:00

127 lines
3.8 KiB
Plaintext

## 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