scanEhFrameSection(EH, EObj.rels(EH.RelocSection), Enqueue);
}
-// Sections listed below are special because they are used by the loader
-// just by being in an ELF file. They should not be garbage-collected.
+// We do not garbage-collect two types of sections:
+// 1) Sections used by the loader (.init, .fini, .ctors, .dtors, .jcr)
+// 2) Not allocatable sections which typically contain debugging information
template <class ELFT> static bool isReserved(InputSectionBase<ELFT> *Sec) {
switch (Sec->getSectionHdr()->sh_type) {
case SHT_FINI_ARRAY:
if (isValidCIdentifier(S))
return true;
- return S.startswith(".ctors") || S.startswith(".dtors") ||
+ bool IsAllocSec = Sec->getSectionHdr()->sh_flags & SHF_ALLOC;
+ return !IsAllocSec || S.startswith(".ctors") || S.startswith(".dtors") ||
S.startswith(".init") || S.startswith(".fini") ||
S.startswith(".jcr");
}
# NOGC: Name: .dtors
# NOGC: Name: .init
# NOGC: Name: .fini
+# NOGC: Name: .debug_pubtypes
+# NOGC: Name: .comment
# NOGC: Name: a
# NOGC: Name: b
# NOGC: Name: c
# GC1: Name: .dtors
# GC1: Name: .init
# GC1: Name: .fini
+# GC1: Name: .debug_pubtypes
+# GC1: Name: .comment
# GC1: Name: a
# GC1: Name: b
# GC1: Name: c
# GC2: Name: .dtors
# GC2: Name: .init
# GC2: Name: .fini
+# GC2: Name: .debug_pubtypes
+# GC2: Name: .comment
# GC2: Name: a
# GC2: Name: b
# GC2: Name: c
.section .eh_frame,"a",@unwind
.quad 0
+
+.section .debug_pubtypes,"",@progbits
+ .quad 0
+
+.section .comment,"MS",@progbits,8
+ .quad 0