[elf2] Relocate against common symbols.
llvm-svn: 248054
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index b2d7611..3342da9 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -738,8 +738,11 @@
case SymbolBody::DefinedAbsoluteKind:
SymVA = cast<DefinedAbsolute<ELFT>>(Body)->Sym.st_value;
break;
- case SymbolBody::DefinedCommonKind:
- continue;
+ case SymbolBody::DefinedCommonKind: {
+ auto *DC = cast<DefinedCommon<ELFT>>(Body);
+ SymVA = DC->OutputSec->getVA() + DC->OffsetInBSS;
+ break;
+ }
case SymbolBody::SharedKind:
if (!relocNeedsGOT(Type))
continue;
@@ -1063,6 +1066,7 @@
uintX_t Align = C->MaxAlignment;
Off = RoundUpToAlignment(Off, Align);
C->OffsetInBSS = Off;
+ C->OutputSec = BSSSec;
Off += Sym.st_size;
}