Add support for weak symbols.

llvm-svn: 244636
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 9dcd2fa..3a11967 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -75,9 +75,17 @@
   ErrorOr<StringRef> NameOrErr = Sym->getName(StringTable);
   error(NameOrErr.getError());
   StringRef Name = *NameOrErr;
-  if (Sym->isUndefined())
-    return new (Alloc) Undefined(Name);
-  return new (Alloc) DefinedRegular<ELFT>(Name);
+  switch (Sym->getBinding()) {
+  default:
+    error("unexpected binding");
+  case STB_GLOBAL:
+    if (Sym->isUndefined())
+      return new (Alloc) Undefined(Name);
+    return new (Alloc) DefinedRegular<ELFT>(Name);
+  case STB_WEAK:
+    // FIXME: add support for weak undefined
+    return new (Alloc) DefinedWeak<ELFT>(Name);
+  }
 }
 
 namespace lld {