diff options
| -rw-r--r-- | lld/ELF/Writer.cpp | 3 | ||||
| -rw-r--r-- | lld/test/ELF/lto/dynsym.ll | 5 | 
2 files changed, 7 insertions, 1 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index f8b6323f50a..c66126ddea9 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -102,7 +102,8 @@ StringRef elf::getOutputSectionName(InputSectionBase<ELFT> *S) {  }  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;    errs() << "removing unused section from '" << IS->Name << "' in file '"           << IS->getFile()->getName() << "'\n"; diff --git a/lld/test/ELF/lto/dynsym.ll b/lld/test/ELF/lto/dynsym.ll index 5885960c7bc..b2b4157820b 100644 --- a/lld/test/ELF/lto/dynsym.ll +++ b/lld/test/ELF/lto/dynsym.ll @@ -5,6 +5,11 @@  ; RUN: ld.lld -m elf_x86_64 %t2.o %t.so -o %t  ; 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 triple = "x86_64-unknown-linux-gnu"  | 

