[lld] ee284d2 - [ELF] Avoid make<GdbIndexSection>. NFC
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 9 21:32:41 PDT 2024
Author: Fangrui Song
Date: 2024-04-09T21:32:37-07:00
New Revision: ee284d2da0720dc21191d6f545504cbfcf5dcbcf
URL: https://github.com/llvm/llvm-project/commit/ee284d2da0720dc21191d6f545504cbfcf5dcbcf
DIFF: https://github.com/llvm/llvm-project/commit/ee284d2da0720dc21191d6f545504cbfcf5dcbcf.diff
LOG: [ELF] Avoid make<GdbIndexSection>. NFC
Added:
Modified:
lld/ELF/SyntheticSections.cpp
lld/ELF/SyntheticSections.h
lld/ELF/Writer.cpp
Removed:
################################################################################
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp
index 4427a120086809..550659464a440a 100644
--- a/lld/ELF/SyntheticSections.cpp
+++ b/lld/ELF/SyntheticSections.cpp
@@ -2872,7 +2872,8 @@ createSymbols(
}
// Returns a newly-created .gdb_index section.
-template <class ELFT> GdbIndexSection *GdbIndexSection::create() {
+template <class ELFT>
+std::unique_ptr<GdbIndexSection> GdbIndexSection::create() {
llvm::TimeTraceScope timeScope("Create gdb index");
// Collect InputFiles with .debug_info. See the comment in
@@ -2918,7 +2919,7 @@ template <class ELFT> GdbIndexSection *GdbIndexSection::create() {
nameAttrs[i] = readPubNamesAndTypes<ELFT>(dobj, chunks[i].compilationUnits);
});
- auto *ret = make<GdbIndexSection>();
+ auto ret = std::make_unique<GdbIndexSection>();
ret->chunks = std::move(chunks);
std::tie(ret->symbols, ret->size) = createSymbols(nameAttrs, ret->chunks);
@@ -3860,6 +3861,7 @@ void InStruct::reset() {
ppc32Got2.reset();
ibtPlt.reset();
relaPlt.reset();
+ gdbIndex.reset();
shStrTab.reset();
strTab.reset();
symTab.reset();
@@ -3986,10 +3988,10 @@ InStruct elf::in;
std::vector<Partition> elf::partitions;
Partition *elf::mainPart;
-template GdbIndexSection *GdbIndexSection::create<ELF32LE>();
-template GdbIndexSection *GdbIndexSection::create<ELF32BE>();
-template GdbIndexSection *GdbIndexSection::create<ELF64LE>();
-template GdbIndexSection *GdbIndexSection::create<ELF64BE>();
+template std::unique_ptr<GdbIndexSection> GdbIndexSection::create<ELF32LE>();
+template std::unique_ptr<GdbIndexSection> GdbIndexSection::create<ELF32BE>();
+template std::unique_ptr<GdbIndexSection> GdbIndexSection::create<ELF64LE>();
+template std::unique_ptr<GdbIndexSection> GdbIndexSection::create<ELF64BE>();
template void elf::splitSections<ELF32LE>();
template void elf::splitSections<ELF32BE>();
diff --git a/lld/ELF/SyntheticSections.h b/lld/ELF/SyntheticSections.h
index 7490fb61fb6f13..68b4cdb1dde045 100644
--- a/lld/ELF/SyntheticSections.h
+++ b/lld/ELF/SyntheticSections.h
@@ -822,7 +822,7 @@ class GdbIndexSection final : public SyntheticSection {
};
GdbIndexSection();
- template <typename ELFT> static GdbIndexSection *create();
+ template <typename ELFT> static std::unique_ptr<GdbIndexSection> create();
void writeTo(uint8_t *buf) override;
size_t getSize() const override { return size; }
bool isNeeded() const override;
@@ -1359,6 +1359,8 @@ struct InStruct {
std::unique_ptr<PPC32Got2Section> ppc32Got2;
std::unique_ptr<IBTPltSection> ibtPlt;
std::unique_ptr<RelocationBaseSection> relaPlt;
+ // Non-SHF_ALLOC sections
+ std::unique_ptr<GdbIndexSection> gdbIndex;
std::unique_ptr<StringTableSection> shStrTab;
std::unique_ptr<StringTableSection> strTab;
std::unique_ptr<SymbolTableBaseSection> symTab;
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index fc9084f40044df..021b9bb0d5e226 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -541,9 +541,6 @@ template <class ELFT> void elf::createSyntheticSections() {
in.got->hasGotOffRel = true;
}
- if (config->gdbIndex)
- add(*GdbIndexSection::create<ELFT>());
-
// We always need to add rel[a].plt to output if it has entries.
// Even for static linking it can contain R_[*]_IRELATIVE relocations.
in.relaPlt = std::make_unique<RelocationSection<ELFT>>(
@@ -568,6 +565,11 @@ template <class ELFT> void elf::createSyntheticSections() {
if (config->andFeatures || !ctx.aarch64PauthAbiCoreInfo.empty())
add(*make<GnuPropertySection>());
+ if (config->gdbIndex) {
+ in.gdbIndex = GdbIndexSection::create<ELFT>();
+ add(*in.gdbIndex);
+ }
+
// .note.GNU-stack is always added when we are creating a re-linkable
// object file. Other linkers are using the presence of this marker
// section to control the executable-ness of the stack area, but that
More information about the llvm-commits
mailing list