1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 02:33:06 +01:00

[yaml2obj] Fix bug when referencing items in SectionHeaderTable

There was an off-by-one error caused by an index (which included an
index for the null section header) being used to check against the size
of a list of sections (which didn't include the null section header).

This is a partial fix for https://bugs.llvm.org/show_bug.cgi?id=50506.

Reviewed by: MaskRay

Differential Revision: https://reviews.llvm.org/D104098
This commit is contained in:
James Henderson 2021-06-11 09:43:24 +01:00
parent 88474bed70
commit 5506e18140
2 changed files with 37 additions and 1 deletions

View File

@ -563,7 +563,7 @@ unsigned ELFState<ELFT>::toSectionIndex(StringRef S, StringRef LocSec,
!SectionHeaders.Sections);
size_t FirstExcluded =
SectionHeaders.Sections ? SectionHeaders.Sections->size() : 0;
if (Index >= FirstExcluded) {
if (Index > FirstExcluded) {
if (LocSym.empty())
reportError("unable to link '" + LocSec + "' to excluded section '" + S +
"'");

View File

@ -418,3 +418,39 @@ Sections:
Sections:
- Name: .strtab
- Name: .shstrtab
## Show that we can reference both the first and last section in the section
## header table, via sh_link.
# RUN: yaml2obj %s --docnum=14 -o %t14
# RUN: llvm-readelf --sections %t14 | FileCheck %s --check-prefix=LINK
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Sections:
- Name: .strtab
Type: SHT_STRTAB
- Type: SectionHeaderTable
Sections:
- Name: .strtab
- Name: .ref.first
- Name: .ref.last
- Name: .shstrtab
- Name: .ref.first
Type: SHT_PROGBITS
Link: .strtab
- Name: .ref.last
Type: SHT_PROGBITS
Link: .shstrtab
- Name: .shstrtab
Type: SHT_STRTAB
# LINK: There are 5 section headers
# LINK: [Nr] Name Type Address Off Size ES Flg Lk
# LINK: [ 1] .strtab
# LINK-NEXT: [ 2] .ref.first PROGBITS [[#%x,]] [[#%x,]] [[#%x,]] [[#%x,]] 1
# LINK-NEXT: [ 3] .ref.last PROGBITS [[#%x,]] [[#%x,]] [[#%x,]] [[#%x,]] 4
# LINK-NEXT: [ 4] .shstrtab