[DebugInfo] Fix crash caused by unhandled error.

Summary: This patch helps fix LLVM crash caused by unhandled error.

Reviewers: clayborg, aprantl

Reviewed By: clayborg

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D78924
This commit is contained in:
Xing GUO 2020-04-28 21:38:50 +08:00
parent 7f19ba4dfc
commit c6f3e6c406
2 changed files with 41 additions and 1 deletions

View File

@ -82,8 +82,12 @@ llvm::Error ObjectFileTransformer::convert(const object::ObjectFile &Obj,
size_t NumBefore = Gsym.getNumFunctionInfos();
for (const object::SymbolRef &Sym : Obj.symbols()) {
Expected<SymbolRef::Type> SymType = Sym.getType();
if (!SymType) {
consumeError(SymType.takeError());
continue;
}
const uint64_t Addr = Sym.getValue();
if (!SymType || SymType.get() != SymbolRef::Type::ST_Function ||
if (SymType.get() != SymbolRef::Type::ST_Function ||
!Gsym.IsValidTextAddress(Addr) || Gsym.hasFunctionInfoForAddress(Addr))
continue;
// Function size for MachO files will be 0

View File

@ -0,0 +1,36 @@
## This test ensures that LLVM will not crash when converting a Mach-O object
## file with a malformed symbol whose n_sect points to an invalid offset.
# RUN: yaml2obj %s -o %t
# RUN: not llvm-gsymutil --convert %t -o %t.o 2>&1 | FileCheck %s
# CHECK: Loaded 0 functions from symbol table.
--- !mach-o
FileHeader:
magic: 0xFEEDFACF
cputype: 0x01000007
cpusubtype: 0x00000003
filetype: 0x0000000A
ncmds: 1
sizeofcmds: 100
flags: 0x00000000
reserved: 0x00000000
LoadCommands:
- cmd: LC_SYMTAB
cmdsize: 24
symoff: 4096
nsyms: 1
stroff: 4144
strsize: 6
LinkEditData:
NameList:
- n_strx: 2 # _foo
n_type: 0x0e
n_sect: 3 # Points to an invalid offset.
n_desc: 0
n_value: 1234
StringTable:
- ''
- ''
- _foo