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
127 lines
3.8 KiB
Plaintext
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
|