mirror of
https://github.com/intel/llvm.git
synced 2026-01-19 17:45:07 +08:00
Don't print DISCARD sections as gced.
This is a small difference I noticed to gold and bfd. When given --print-gc-sections, we print sections a linkerscript marks DISCARD. The other linkers don't. llvm-svn: 295467
This commit is contained in:
@@ -296,7 +296,8 @@ template <class ELFT>
|
||||
void LinkerScript<ELFT>::discard(ArrayRef<InputSectionBase<ELFT> *> V) {
|
||||
for (InputSectionBase<ELFT> *S : V) {
|
||||
S->Live = false;
|
||||
reportDiscarded(S);
|
||||
if (S == In<ELFT>::ShStrTab)
|
||||
error("discarding .shstrtab section is not allowed");
|
||||
|
||||
InputSection<ELFT> *IS = dyn_cast<InputSection<ELFT>>(S);
|
||||
if (!IS || IS->DependentSections.empty())
|
||||
|
||||
@@ -565,6 +565,13 @@ static bool canMergeToProgbits(unsigned Type) {
|
||||
Type == SHT_NOTE;
|
||||
}
|
||||
|
||||
template <class ELFT> static void reportDiscarded(InputSectionBase<ELFT> *IS) {
|
||||
if (!Config->PrintGcSections)
|
||||
return;
|
||||
errs() << "removing unused section from '" << IS->Name << "' in file '"
|
||||
<< IS->getFile()->getName() << "'\n";
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
void OutputSectionFactory<ELFT>::addInputSec(InputSectionBase<ELFT> *IS,
|
||||
StringRef OutsecName) {
|
||||
|
||||
@@ -131,15 +131,6 @@ StringRef elf::getOutputSectionName(StringRef Name) {
|
||||
return Name;
|
||||
}
|
||||
|
||||
template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT> *IS) {
|
||||
if (IS == In<ELFT>::ShStrTab)
|
||||
error("discarding .shstrtab section is not allowed");
|
||||
if (!Config->PrintGcSections)
|
||||
return;
|
||||
errs() << "removing unused section from '" << IS->Name << "' in file '"
|
||||
<< IS->getFile()->getName() << "'\n";
|
||||
}
|
||||
|
||||
template <class ELFT> static bool needsInterpSection() {
|
||||
return !Symtab<ELFT>::X->getSharedFiles().empty() &&
|
||||
!Config->DynamicLinker.empty() &&
|
||||
@@ -1867,8 +1858,3 @@ template bool elf::isRelroSection<ELF32LE>(const OutputSectionBase *);
|
||||
template bool elf::isRelroSection<ELF32BE>(const OutputSectionBase *);
|
||||
template bool elf::isRelroSection<ELF64LE>(const OutputSectionBase *);
|
||||
template bool elf::isRelroSection<ELF64BE>(const OutputSectionBase *);
|
||||
|
||||
template void elf::reportDiscarded<ELF32LE>(InputSectionBase<ELF32LE> *);
|
||||
template void elf::reportDiscarded<ELF32BE>(InputSectionBase<ELF32BE> *);
|
||||
template void elf::reportDiscarded<ELF64LE>(InputSectionBase<ELF64LE> *);
|
||||
template void elf::reportDiscarded<ELF64BE>(InputSectionBase<ELF64BE> *);
|
||||
|
||||
@@ -52,7 +52,6 @@ llvm::StringRef getOutputSectionName(llvm::StringRef Name);
|
||||
template <class ELFT>
|
||||
bool allocateHeaders(std::vector<PhdrEntry> &,
|
||||
llvm::ArrayRef<OutputSectionBase *>, uint64_t Min);
|
||||
template <class ELFT> void reportDiscarded(InputSectionBase<ELFT> *IS);
|
||||
|
||||
template <class ELFT> uint32_t getMipsEFlags();
|
||||
|
||||
|
||||
13
lld/test/ELF/linkerscript/discard-print-gc.s
Normal file
13
lld/test/ELF/linkerscript/discard-print-gc.s
Normal file
@@ -0,0 +1,13 @@
|
||||
# REQUIRES: x86
|
||||
# RUN: echo "SECTIONS { /DISCARD/ : { *(.foo) } }" > %t.script
|
||||
# RUN: llvm-mc -triple x86_64-pc-linux %s -o %t.o -filetype=obj
|
||||
# RUN: ld.lld -o %t.so --gc-sections %t.o --print-gc-sections -shared 2>&1 | \
|
||||
# RUN: FileCheck -check-prefix=CHECK %s
|
||||
# RUN: ld.lld -o %t.so -T %t.script %t.o --print-gc-sections -shared 2>&1 | \
|
||||
# RUN: FileCheck -check-prefix=QUIET --allow-empty %s
|
||||
|
||||
.section .foo,"a"
|
||||
.quad 0
|
||||
|
||||
# CHECK: removing unused section from '.foo'
|
||||
# QUIET-NOT: removing unused section from '.foo'
|
||||
Reference in New Issue
Block a user