diff options
Diffstat (limited to 'lld/COFF')
-rw-r--r-- | lld/COFF/Symbols.h | 2 | ||||
-rw-r--r-- | lld/COFF/Writer.cpp | 8 |
2 files changed, 10 insertions, 0 deletions
diff --git a/lld/COFF/Symbols.h b/lld/COFF/Symbols.h index feebb6dde1f..8c1390c4587 100644 --- a/lld/COFF/Symbols.h +++ b/lld/COFF/Symbols.h @@ -187,6 +187,8 @@ public: } uint64_t getRVA() { return Data->getRVA(); } + uint32_t getSecrel() { return Data->OutputSectionOff; } + uint16_t getSectionIndex(); private: friend SymbolTable; diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 03e5d4d675b..d32577b361f 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -215,6 +215,8 @@ uint32_t Defined::getSecrel() { switch (kind()) { case DefinedRegularKind: return cast<DefinedRegular>(this)->getSecrel(); + case DefinedCommonKind: + return cast<DefinedCommon>(this)->getSecrel(); case DefinedSyntheticKind: return cast<DefinedSynthetic>(this)->getSecrel(); default: @@ -235,6 +237,8 @@ uint16_t Defined::getSectionIndex() { return D->getChunk()->getOutputSection()->SectionIndex; if (isa<DefinedAbsolute>(this)) return DefinedAbsolute::OutputSectionIndex; + if (auto *D = dyn_cast<DefinedCommon>(this)) + return D->getSectionIndex(); if (auto *D = dyn_cast<DefinedSynthetic>(this)) { if (!D->getChunk()) return 0; @@ -244,6 +248,10 @@ uint16_t Defined::getSectionIndex() { toString(*this)); } +uint16_t DefinedCommon::getSectionIndex() { + return Data->getOutputSection()->SectionIndex; +} + bool Defined::isExecutable() { const auto X = IMAGE_SCN_MEM_EXECUTE; if (auto *D = dyn_cast<DefinedRegular>(this)) |