ELF: Set the correct symbol binding.

llvm-svn: 245049
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index e86c9a6..9902cc4 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -12,6 +12,7 @@
 #include "Error.h"
 #include "SymbolTable.h"
 #include "Writer.h"
+#include "Symbols.h"
 
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/Support/FileOutputBuffer.h"
@@ -214,8 +215,24 @@
   llvm::StringTableBuilder &Builder = Table.getStringBuilder();
   for (auto &P : Table.getSymbols()) {
     StringRef Name = P.first;
-    auto *S = reinterpret_cast<Elf_Sym *>(Buf);
-    S->st_name = Builder.getOffset(Name);
+    Symbol *Sym = P.second;
+
+    auto *ESym = reinterpret_cast<Elf_Sym *>(Buf);
+    ESym->st_name = Builder.getOffset(Name);
+    uint8_t Binding;
+    switch (Sym->Body->kind()) {
+    case SymbolBody::UndefinedKind:
+      llvm_unreachable("Should be defined by now");
+    case SymbolBody::DefinedRegularKind:
+      Binding = STB_GLOBAL;
+      break;
+    case SymbolBody::UndefinedWeakKind:
+    case SymbolBody::DefinedWeakKind:
+      Binding = STB_WEAK;
+      break;
+    }
+    ESym->setBindingAndType(Binding, 0);
+
     Buf += sizeof(Elf_Sym);
   }
 }