-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[LLD][COFF] Move getChunk to LinkerDriver (NFC) #123103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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.
@llvm/pr-subscribers-lld-coff @llvm/pr-subscribers-platform-windows Author: Jacek Caban (cjacek) ChangesThe Full diff: https://github.com/llvm/llvm-project/pull/123103.diff 7 Files Affected:
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;
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
The
getChunk
function returns all chunks, not just those specific to a symbol table. Move it out of theSymbolTable
class to clarify its scope.