Add support for weak absolute symbols.
On ELF being weak is independent of what we call the kind of the symbol. So
this also makes the code simpler.
llvm-svn: 246326
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 244d4fd..dc4fcde 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -246,7 +246,7 @@
if (!Body)
continue;
// Skip undefined weak for now.
- if (isa<UndefinedWeak<ELFT>>(Body))
+ if (isa<Undefined<ELFT>>(Body) && Body->isWeak())
continue;
if (!isa<DefinedRegular<ELFT>>(Body))
error(Twine("Can't relocate symbol ") + Body->getName());
@@ -300,18 +300,17 @@
const Elf_Sym *InputSym = nullptr;
switch (Body->kind()) {
- case SymbolBody::UndefinedKind:
case SymbolBody::UndefinedSyntheticKind:
llvm_unreachable("Should be defined by now");
- case SymbolBody::DefinedWeakKind:
case SymbolBody::DefinedRegularKind: {
- auto *Def = cast<DefinedInSection<ELFT>>(Body);
+ auto *Def = cast<DefinedRegular<ELFT>>(Body);
InputSym = &Def->Sym;
Section = &Def->Section;
break;
}
+ case SymbolBody::UndefinedKind:
+ assert(Body->isWeak() && "Should be defined by now");
case SymbolBody::DefinedAbsoluteKind:
- case SymbolBody::UndefinedWeakKind:
InputSym = &cast<ELFSymbolBody<ELFT>>(Body)->Sym;
break;
}