[GC] Don't crash when printing the special Discarded GC section.

InputSection<ELFT>::Discarded has no name and it's not backed by
a file. Trying to report it as discared will cause a nullptr
dereference, therefore a crash. Skip it.

Differential Revision:   https://reviews.llvm.org/D24731

llvm-svn: 281946
This commit is contained in:
Davide Italiano 2016-09-19 23:15:51 +00:00
parent bcdb994014
commit 1c3c3953c6
2 changed files with 7 additions and 1 deletions

View File

@ -102,7 +102,8 @@ StringRef elf::getOutputSectionName(InputSectionBase<ELFT> *S) {
} }
template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) { template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) {
if (!Config->PrintGcSections || !IS || IS->Live) if (!Config->PrintGcSections || !IS || IS == &InputSection<ELFT>::Discarded ||
IS->Live)
return; return;
errs() << "removing unused section from '" << IS->Name << "' in file '" errs() << "removing unused section from '" << IS->Name << "' in file '"
<< IS->getFile()->getName() << "'\n"; << IS->getFile()->getName() << "'\n";

View File

@ -5,6 +5,11 @@
; RUN: ld.lld -m elf_x86_64 %t2.o %t.so -o %t ; RUN: ld.lld -m elf_x86_64 %t2.o %t.so -o %t
; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s ; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s
; Check that we don't crash when gc'ing sections and printing the result.
; RUN: ld.lld -m elf_x86_64 %t2.o %t.so --gc-sections --print-gc-sections \
; RUN: -o %t
; RUN: llvm-readobj -dyn-symbols %t | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu" target triple = "x86_64-unknown-linux-gnu"