[WebAssembly][lld] Fix for static linking of PIC code
authorSam Clegg <sbc@chromium.org>
Mon, 28 Oct 2019 22:24:52 +0000 (15:24 -0700)
committerSam Clegg <sbc@chromium.org>
Wed, 30 Oct 2019 01:58:56 +0000 (18:58 -0700)
When statically linking PIC code we create an internalized __memory_base
so that memory-base-relative relocation work correctly.  The value of
this global should be zero, and not the globalBase since the globalBase
offset is already taken into account by getVirtualAddress.

Fixes: https://github.com/emscripten-core/emscripten/issues/9013

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

lld/test/wasm/pic-static.ll
lld/wasm/Writer.cpp

index 83752f3..65b4717 100644 (file)
@@ -118,4 +118,4 @@ entry:
 ; CHECK-NEXT:         Mutable:         false
 ; CHECK-NEXT:         InitExpr:
 ; CHECK-NEXT:           Opcode:          I32_CONST
-; CHECK-NEXT:           Value:           1024
+; CHECK-NEXT:           Value:           0
index fe59625..5df3ae6 100644 (file)
@@ -226,8 +226,6 @@ void Writer::layoutMemory() {
 
   if (WasmSym::globalBase)
     WasmSym::globalBase->setVirtualAddress(memoryPtr);
-  if (WasmSym::definedMemoryBase)
-    WasmSym::definedMemoryBase->setVirtualAddress(memoryPtr);
 
   uint32_t dataStart = memoryPtr;