[llvm-readobj] - Don't crash when dumping .stack_sizes and unable to find a relocation resolver.

The crash might happen when we have either a broken or unsupported object
and trying to resolve relocations when dumping the .stack_sizes section.

For the test case I used a 32-bits ELF header and a 64-bit relocation.
In this case a null pointer is returned by the code instead of the relocation
resolver function and then we crash.

Differential revision: https://reviews.llvm.org/D67962

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372838 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
George Rimar
2019-09-25 10:14:50 +00:00
parent 9edd4decf5
commit bf355ffd89
2 changed files with 27 additions and 1 deletions
+26
View File
@@ -597,3 +597,29 @@ Symbols:
Value: 0x10
Type: STT_FUNC
Binding: STB_GLOBAL
## Check that we report an error when we are unable to resolve a relocation for a given ELF architecture.
## Here we have a 64-bit relocation used in a 32-bit object.
# RUN: yaml2obj --docnum=12 %s > %t17
# RUN: not llvm-readelf --stack-sizes %t17 2>&1 | FileCheck %s -DFILE=%t17 --check-prefix=UNSUPPRELOC2
# RUN: not llvm-readobj --stack-sizes %t17 2>&1 | FileCheck %s -DFILE=%t17 --check-prefix=UNSUPPRELOC2
# UNSUPPRELOC2: error: '[[FILE]]': unsupported relocation type in section .rela.stack_sizes: R_X86_64_64
--- !ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2MSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .stack_sizes
Type: SHT_PROGBITS
Content: "00"
- Name: .rela.stack_sizes
Type: SHT_RELA
Info: .stack_sizes
Relocations:
- Offset: 0
Type: R_X86_64_64
+1 -1
View File
@@ -4935,7 +4935,7 @@ void DumpStyle<ELFT>::printRelocatableStackSizes(
auto Contents = unwrapOrError(this->FileName, StackSizesSec.getContents());
DataExtractor Data(Contents, Obj->isLittleEndian(), sizeof(Elf_Addr));
for (const RelocationRef &Reloc : RelocSec.relocations()) {
if (!IsSupportedFn(Reloc.getType()))
if (!IsSupportedFn || !IsSupportedFn(Reloc.getType()))
reportError(createStringError(
object_error::parse_failed,
"unsupported relocation type in section %s: %s",