forked from OSchip/llvm-project
[obj2yaml] - Stop dumping an empty sh_info field for SHT_RELA/SHT_REL sections.
`.rela.dyn` is a dynamic relocation section that normally has
no value in `sh_info` field.
The existent `elf-reladyn-section-shinfo.yaml` which tests this piece has issues:
1) It does not check the case when we have more than one `SHT_REL[A]`
section with `sh_info == 0` in the object. Because of this it did not catch the issue.
Currently we print an excessive "Info" field:
```
- Name: .rela.dyn
Type: SHT_RELA
EntSize: 0x0000000000000018
- Name: .rel.dyn
Type: SHT_REL
EntSize: 0x0000000000000010
Info: ' [1]'
```
2) It seems can be more generic. I've added a `rel-rela-section.yaml` instead.
Differential revision: https://reviews.llvm.org/D76281
This commit is contained in:
parent
4a7f2032a3
commit
e26e9ba288
|
|
@ -1,44 +0,0 @@
|
|||
# RUN: yaml2obj %s -o %t
|
||||
# RUN: llvm-readobj --sections %t | FileCheck %s
|
||||
# RUN: obj2yaml %t | FileCheck %s --check-prefix=YAML
|
||||
|
||||
## .rela.dyn is a dynamic relocation section that normally has
|
||||
## no value in sh_info field. Check we are able to use
|
||||
## yaml2obj/obj2yaml without needing to explicitly set it.
|
||||
|
||||
# CHECK: Name: .rela.dyn
|
||||
# CHECK-NEXT: Type: SHT_RELA
|
||||
# CHECK-NEXT: Flags [
|
||||
# CHECK-NEXT: SHF_ALLOC
|
||||
# CHECK-NEXT: ]
|
||||
# CHECK-NEXT: Address:
|
||||
# CHECK-NEXT: Offset:
|
||||
# CHECK-NEXT: Size:
|
||||
# CHECK-NEXT: Link:
|
||||
# CHECK-NEXT: Info: 0
|
||||
# CHECK-NEXT: AddressAlignment:
|
||||
# CHECK-NEXT: EntrySize:
|
||||
|
||||
# YAML: - Name: .rela.dyn
|
||||
# YAML-NEXT: Type: SHT_RELA
|
||||
# YAML-NEXT: Flags: [ SHF_ALLOC ]
|
||||
# YAML-NEXT: Link: .dynsym
|
||||
# YAML-NEXT: EntSize: 0x0000000000000018
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_X86_64
|
||||
Entry: 0x0000000000001000
|
||||
Sections:
|
||||
- Name: .rela.dyn
|
||||
Type: SHT_RELA
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynsym
|
||||
EntSize: 0x0000000000000018
|
||||
# Add at least one symbol to trigger the .dynsym emission.
|
||||
DynamicSymbols:
|
||||
- Name: bar
|
||||
Binding: STB_GLOBAL
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
## This is a generic test for SHT_REL/SHT_RELA sections.
|
||||
|
||||
## Check that we do not print excessive default
|
||||
## fields for SHT_REL[A] sections.
|
||||
# RUN: yaml2obj %s -o %t1
|
||||
# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=YAML
|
||||
|
||||
## Note: it is important to have at least two sections with sh_info == 0.
|
||||
## Previously we printed a broken Info field in this case.
|
||||
## FIXME: We should not print EntSize. Will be fixed by https://reviews.llvm.org/D76227.
|
||||
# YAML: - Name: .rela.dyn
|
||||
# YAML-NEXT: Type: SHT_RELA
|
||||
# YAML-NEXT: EntSize: 0x0000000000000018
|
||||
# YAML-NEXT: - Name: .rel.dyn
|
||||
# YAML-NEXT: Type: SHT_REL
|
||||
# YAML-NEXT: EntSize: 0x0000000000000010
|
||||
# YAML-NEXT: - Name
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .rela.dyn
|
||||
Type: SHT_RELA
|
||||
- Name: .rel.dyn
|
||||
Type: SHT_REL
|
||||
## Trigger the .dynsym emission.
|
||||
DynamicSymbols: []
|
||||
|
|
@ -575,6 +575,11 @@ Error ELFDumper<ELFT>::dumpCommonRelocationSection(
|
|||
if (Error E = dumpCommonSection(Shdr, S))
|
||||
return E;
|
||||
|
||||
// Having a zero sh_info field is normal: .rela.dyn is a dynamic
|
||||
// relocation section that normally has no value in this field.
|
||||
if (!Shdr->sh_info)
|
||||
return Error::success();
|
||||
|
||||
auto InfoSection = Obj.getSection(Shdr->sh_info);
|
||||
if (!InfoSection)
|
||||
return InfoSection.takeError();
|
||||
|
|
|
|||
Loading…
Reference in New Issue