mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
[Object][ELF] Handle files with no section header string table.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242839 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
68a4b41648
commit
3f6881efa5
@ -629,14 +629,18 @@ ELFFile<ELFT>::ELFFile(StringRef Object, std::error_code &EC)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get string table sections.
|
// Get string table sections.
|
||||||
ErrorOr<const Elf_Shdr *> StrTabSecOrErr = getSection(getStringTableIndex());
|
uintX_t StringTableIndex = getStringTableIndex();
|
||||||
if ((EC = StrTabSecOrErr.getError()))
|
if (StringTableIndex) {
|
||||||
return;
|
ErrorOr<const Elf_Shdr *> StrTabSecOrErr =
|
||||||
|
getSection(getStringTableIndex());
|
||||||
|
if ((EC = StrTabSecOrErr.getError()))
|
||||||
|
return;
|
||||||
|
|
||||||
ErrorOr<StringRef> SymtabOrErr = getStringTable(*StrTabSecOrErr);
|
ErrorOr<StringRef> SymtabOrErr = getStringTable(*StrTabSecOrErr);
|
||||||
if ((EC = SymtabOrErr.getError()))
|
if ((EC = SymtabOrErr.getError()))
|
||||||
return;
|
return;
|
||||||
DotShstrtab = *SymtabOrErr;
|
DotShstrtab = *SymtabOrErr;
|
||||||
|
}
|
||||||
|
|
||||||
// Build symbol name side-mapping if there is one.
|
// Build symbol name side-mapping if there is one.
|
||||||
if (SymbolTableSectionHeaderIndex) {
|
if (SymbolTableSectionHeaderIndex) {
|
||||||
@ -746,6 +750,8 @@ template <class ELFT>
|
|||||||
ErrorOr<StringRef>
|
ErrorOr<StringRef>
|
||||||
ELFFile<ELFT>::getSectionName(const Elf_Shdr *Section) const {
|
ELFFile<ELFT>::getSectionName(const Elf_Shdr *Section) const {
|
||||||
uint32_t Offset = Section->sh_name;
|
uint32_t Offset = Section->sh_name;
|
||||||
|
if (Offset == 0)
|
||||||
|
return StringRef();
|
||||||
if (Offset >= DotShstrtab.size())
|
if (Offset >= DotShstrtab.size())
|
||||||
return object_error::parse_failed;
|
return object_error::parse_failed;
|
||||||
return StringRef(DotShstrtab.data() + Offset);
|
return StringRef(DotShstrtab.data() + Offset);
|
||||||
|
BIN
test/Object/Inputs/no-section-header-string-table.elf-x86-64
Normal file
BIN
test/Object/Inputs/no-section-header-string-table.elf-x86-64
Normal file
Binary file not shown.
10
test/Object/no-section-header-string-table.test
Normal file
10
test/Object/no-section-header-string-table.test
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
RUN: llvm-readobj %p/Inputs/no-section-header-string-table.elf-x86-64 --sections \
|
||||||
|
RUN: | FileCheck %s
|
||||||
|
|
||||||
|
CHECK: Type: SHT_PROGBITS (0x1)
|
||||||
|
CHECK: Type: SHT_PROGBITS (0x1)
|
||||||
|
CHECK: Type: SHT_PROGBITS (0x1)
|
||||||
|
CHECK: Type: SHT_RELA (0x4)
|
||||||
|
CHECK: Type: SHT_SYMTAB (0x2)
|
||||||
|
CHECK: Type: SHT_STRTAB (0x3)
|
||||||
|
CHECK: Type: SHT_STRTAB (0x3)
|
Loading…
Reference in New Issue
Block a user