From baff8ec2e1d845d90580a0d85ad6ab43d929bcfe Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Mon, 28 Oct 2019 15:24:52 -0700 Subject: [PATCH] [WebAssembly][lld] Fix for static linking of PIC code 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 | 2 +- lld/wasm/Writer.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/lld/test/wasm/pic-static.ll b/lld/test/wasm/pic-static.ll index 83752f3..65b4717 100644 --- a/lld/test/wasm/pic-static.ll +++ b/lld/test/wasm/pic-static.ll @@ -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 diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index fe59625..5df3ae6 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -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; -- 2.7.4