Handle the lack of a symbol table correctly.
Summary: These two cases will trigger a dereference on a nullptr, since the SymbolTable can be nonexistent for a given library, in addition to just being empty. Reviewers: alexshap Reviewed By: alexshap Subscribers: meikeb, kongyi, chh, jakehehrlich, llvm-commits, pirama Differential Revision: https://reviews.llvm.org/D49534 llvm-svn: 338062
This commit is contained in:
parent
d742d645a1
commit
e6e75bf84c
|
@ -35,6 +35,13 @@
|
|||
# RUN: llvm-strip --strip-all %t8
|
||||
# RUN: cmp %t2 %t8
|
||||
|
||||
# Verify that a non-existent symbol table (after first call to llvm-strip)
|
||||
# can be handled correctly.
|
||||
# RUN: cp %t %t9
|
||||
# RUN: llvm-strip --strip-all -keep=unavailable_symbol %t9
|
||||
# RUN: llvm-strip --strip-all -keep=unavailable_symbol %t9
|
||||
# RUN: cmp %t2 %t9
|
||||
|
||||
!ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
|
|
|
@ -396,7 +396,8 @@ static void HandleArgs(const CopyConfig &Config, Object &Obj,
|
|||
// Keep special sections.
|
||||
if (Obj.SectionNames == &Sec)
|
||||
return false;
|
||||
if (Obj.SymbolTable == &Sec || Obj.SymbolTable->getStrTab() == &Sec)
|
||||
if (Obj.SymbolTable == &Sec ||
|
||||
(Obj.SymbolTable && Obj.SymbolTable->getStrTab() == &Sec))
|
||||
return false;
|
||||
|
||||
// Remove everything else.
|
||||
|
@ -421,7 +422,7 @@ static void HandleArgs(const CopyConfig &Config, Object &Obj,
|
|||
// (equivalently, the updated symbol table is not empty)
|
||||
// the symbol table and the string table should not be removed.
|
||||
if ((!Config.SymbolsToKeep.empty() || Config.KeepFileSymbols) &&
|
||||
!Obj.SymbolTable->empty()) {
|
||||
Obj.SymbolTable && !Obj.SymbolTable->empty()) {
|
||||
RemovePred = [&Obj, RemovePred](const SectionBase &Sec) {
|
||||
if (&Sec == Obj.SymbolTable || &Sec == Obj.SymbolTable->getStrTab())
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue