Skip to content

Commit

Permalink
[DebugInfo] Fix crash caused by unhandled error.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
higuoxing committed Apr 28, 2020
1 parent 55bcb96 commit 8994b14
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
6 changes: 5 additions & 1 deletion llvm/lib/DebugInfo/GSYM/ObjectFileTransformer.cpp
Expand Up @@ -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
Expand Down
@@ -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

0 comments on commit 8994b14

Please sign in to comment.