[WebAssembly] Import the stack pointer when building shared libraries

Differential Revision: https://reviews.llvm.org/D54558

llvm-svn: 346974
diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp
index 6048508..b5abb6b 100644
--- a/lld/wasm/Writer.cpp
+++ b/lld/wasm/Writer.cpp
@@ -332,8 +332,7 @@
   WasmInitExpr InitExpr;
   if (Config->Pic) {
     InitExpr.Opcode = WASM_OPCODE_GET_GLOBAL;
-    InitExpr.Value.Global =
-        cast<GlobalSymbol>(WasmSym::TableBase)->getGlobalIndex();
+    InitExpr.Value.Global = WasmSym::TableBase->getGlobalIndex();
   } else {
     InitExpr.Opcode = WASM_OPCODE_I32_CONST;
     InitExpr.Value.Int32 = TableBase;
@@ -632,7 +631,8 @@
     log("mem: stack size  = " + Twine(Config->ZStackSize));
     log("mem: stack base  = " + Twine(MemoryPtr));
     MemoryPtr += Config->ZStackSize;
-    WasmSym::StackPointer->Global->Global.InitExpr.Value.Int32 = MemoryPtr;
+    auto *SP = cast<DefinedGlobal>(WasmSym::StackPointer);
+    SP->Global->Global.InitExpr.Value.Int32 = MemoryPtr;
     log("mem: stack top   = " + Twine(MemoryPtr));
   };
 
@@ -666,6 +666,11 @@
 
   log("mem: static data = " + Twine(MemoryPtr - DataStart));
 
+  if (Config->Shared) {
+    MemSize = MemoryPtr;
+    return;
+  }
+
   if (!Config->StackFirst)
     PlaceStack();