From e26cc1e9ee7374d9dbc1d6d8a7f1974ee3233376 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 29 Jul 2025 23:37:25 +0200 Subject: [PATCH] [LLD][COFF] Introduce Symbol::getDefined helper. (NFC) --- lld/COFF/Driver.cpp | 12 ++---------- lld/COFF/Symbols.cpp | 8 ++++++++ lld/COFF/Symbols.h | 4 ++++ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 570b8f9d05906..192a998229e92 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1318,13 +1318,9 @@ void LinkerDriver::convertResources() { } void LinkerDriver::maybeCreateECExportThunk(StringRef name, Symbol *&sym) { - Defined *def; if (!sym) return; - if (auto undef = dyn_cast(sym)) - def = undef->getDefinedWeakAlias(); - else - def = dyn_cast(sym); + Defined *def = sym->getDefined(); if (!def) return; @@ -1356,11 +1352,7 @@ void LinkerDriver::createECExportThunks() { Symbol *sym = ctx.symtab.find(targetName); if (!sym) continue; - Defined *targetSym; - if (auto undef = dyn_cast(sym)) - targetSym = undef->getDefinedWeakAlias(); - else - targetSym = dyn_cast(sym); + Defined *targetSym = sym->getDefined(); if (!targetSym) continue; diff --git a/lld/COFF/Symbols.cpp b/lld/COFF/Symbols.cpp index b571ce9ce432c..ba4f95d14bc64 100644 --- a/lld/COFF/Symbols.cpp +++ b/lld/COFF/Symbols.cpp @@ -91,6 +91,14 @@ bool Symbol::isLive() const { return true; } +Defined *Symbol::getDefined() { + if (auto d = dyn_cast(this)) + return d; + if (auto u = dyn_cast(this)) + return u->getDefinedWeakAlias(); + return nullptr; +} + void Symbol::replaceKeepingName(Symbol *other, size_t size) { StringRef origName = getName(); memcpy(this, other, size); diff --git a/lld/COFF/Symbols.h b/lld/COFF/Symbols.h index fd3d8cec8c113..c86ded860876b 100644 --- a/lld/COFF/Symbols.h +++ b/lld/COFF/Symbols.h @@ -95,6 +95,10 @@ class Symbol { symbolKind == LazyDLLSymbolKind; } + // Get the Defined symbol associated with this symbol, either itself or its + // weak alias. + Defined *getDefined(); + private: void computeName();