[lld] [LLD][COFF] Move getChunk to LinkerDriver (NFC) (PR #123103)
Jacek Caban via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 15 10:45:02 PST 2025
https://github.com/cjacek created https://github.com/llvm/llvm-project/pull/123103
The `getChunk` function returns all chunks, not just those specific to a symbol table. Move it out of the `SymbolTable` class to clarify its scope.
>From 6885ce4b6a6b9cbc3ce1c894737c395a938a9e6e Mon Sep 17 00:00:00 2001
From: Jacek Caban <jacek at codeweavers.com>
Date: Wed, 25 Dec 2024 14:33:36 +0100
Subject: [PATCH] [LLD][COFF] Move getChunk to LinkerDriver (NFC)
The getChunk function returns all chunks, not just those specific to a symbol table.
Move it out of the SymbolTable class to clarify its scope.
---
lld/COFF/Driver.cpp | 11 ++++++++++-
lld/COFF/Driver.h | 3 +++
lld/COFF/ICF.cpp | 2 +-
lld/COFF/MarkLive.cpp | 2 +-
lld/COFF/SymbolTable.cpp | 9 ---------
lld/COFF/SymbolTable.h | 3 ---
lld/COFF/Writer.cpp | 4 ++--
7 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index beb135f08fa3b1..8e7831353cb4ec 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -175,6 +175,15 @@ llvm::Triple::ArchType LinkerDriver::getArch() {
return getMachineArchType(ctx.config.machine);
}
+std::vector<Chunk *> LinkerDriver::getChunks() const {
+ std::vector<Chunk *> res;
+ for (ObjFile *file : ctx.objFileInstances) {
+ ArrayRef<Chunk *> v = file->getChunks();
+ res.insert(res.end(), v.begin(), v.end());
+ }
+ return res;
+}
+
static bool compatibleMachineType(COFFLinkerContext &ctx, MachineTypes mt) {
if (mt == IMAGE_FILE_MACHINE_UNKNOWN)
return true;
@@ -1092,7 +1101,7 @@ void LinkerDriver::parseOrderFile(StringRef arg) {
// Get a list of all comdat sections for error checking.
DenseSet<StringRef> set;
- for (Chunk *c : ctx.symtab.getChunks())
+ for (Chunk *c : ctx.driver.getChunks())
if (auto *sec = dyn_cast<SectionChunk>(c))
if (sec->sym)
set.insert(sec->sym->getName());
diff --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h
index 4558f68c041fa4..8ce2e13129ba67 100644
--- a/lld/COFF/Driver.h
+++ b/lld/COFF/Driver.h
@@ -94,6 +94,9 @@ class LinkerDriver {
void enqueuePath(StringRef path, bool wholeArchive, bool lazy);
+ // Returns a list of chunks of selected symbols.
+ std::vector<Chunk *> getChunks() const;
+
std::unique_ptr<llvm::TarWriter> tar; // for /linkrepro
void pullArm64ECIcallHelper();
diff --git a/lld/COFF/ICF.cpp b/lld/COFF/ICF.cpp
index 796d3a4108ba48..e6c965160e4ef4 100644
--- a/lld/COFF/ICF.cpp
+++ b/lld/COFF/ICF.cpp
@@ -264,7 +264,7 @@ void ICF::run() {
// Collect only mergeable sections and group by hash value.
uint32_t nextId = 1;
- for (Chunk *c : ctx.symtab.getChunks()) {
+ for (Chunk *c : ctx.driver.getChunks()) {
if (auto *sc = dyn_cast<SectionChunk>(c)) {
if (isEligible(sc))
chunks.push_back(sc);
diff --git a/lld/COFF/MarkLive.cpp b/lld/COFF/MarkLive.cpp
index 3c09baa73a9f7b..ad50536892ebb9 100644
--- a/lld/COFF/MarkLive.cpp
+++ b/lld/COFF/MarkLive.cpp
@@ -31,7 +31,7 @@ void markLive(COFFLinkerContext &ctx) {
// COMDAT section chunks are dead by default. Add non-COMDAT chunks. Do not
// traverse DWARF sections. They are live, but they should not keep other
// sections alive.
- for (Chunk *c : ctx.symtab.getChunks())
+ for (Chunk *c : ctx.driver.getChunks())
if (auto *sc = dyn_cast<SectionChunk>(c))
if (sc->live && !sc->isDWARF())
worklist.push_back(sc);
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index 7c43ada3d136e2..36dcd0dfe1389c 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -945,15 +945,6 @@ void SymbolTable::addLibcall(StringRef name) {
}
}
-std::vector<Chunk *> SymbolTable::getChunks() const {
- std::vector<Chunk *> res;
- for (ObjFile *file : ctx.objFileInstances) {
- ArrayRef<Chunk *> v = file->getChunks();
- res.insert(res.end(), v.begin(), v.end());
- }
- return res;
-}
-
Symbol *SymbolTable::find(StringRef name) const {
return symMap.lookup(CachedHashStringRef(name));
}
diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h
index 1de0b3e1deac3e..d7fcc5b7aef57e 100644
--- a/lld/COFF/SymbolTable.h
+++ b/lld/COFF/SymbolTable.h
@@ -67,9 +67,6 @@ class SymbolTable {
void loadMinGWSymbols();
bool handleMinGWAutomaticImport(Symbol *sym, StringRef name);
- // Returns a list of chunks of selected symbols.
- std::vector<Chunk *> getChunks() const;
-
// Returns a symbol for a given name. Returns a nullptr if not found.
Symbol *find(StringRef name) const;
Symbol *findUnderscore(StringRef name) const;
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp
index eb82a9cc015933..12a5771e6bb749 100644
--- a/lld/COFF/Writer.cpp
+++ b/lld/COFF/Writer.cpp
@@ -1077,7 +1077,7 @@ void Writer::createSections() {
dtorsSec = createSection(".dtors", data | r | w);
// Then bin chunks by name and output characteristics.
- for (Chunk *c : ctx.symtab.getChunks()) {
+ for (Chunk *c : ctx.driver.getChunks()) {
auto *sc = dyn_cast<SectionChunk>(c);
if (sc && !sc->live) {
if (ctx.config.verbose)
@@ -2217,7 +2217,7 @@ void Writer::createECChunks() {
void Writer::createRuntimePseudoRelocs() {
std::vector<RuntimePseudoReloc> rels;
- for (Chunk *c : ctx.symtab.getChunks()) {
+ for (Chunk *c : ctx.driver.getChunks()) {
auto *sc = dyn_cast<SectionChunk>(c);
if (!sc || !sc->live)
continue;
More information about the llvm-commits
mailing list