diff --git a/lld/test/wasm/large-memory.test b/lld/test/wasm/large-memory.test --- a/lld/test/wasm/large-memory.test +++ b/lld/test/wasm/large-memory.test @@ -2,4 +2,16 @@ ; Verify we can parse large integers such as when we ask for 2G of total ; memory. -RUN: wasm-ld %t.o -o %t.wasm --max-memory=2147483648 +RUN: wasm-ld %t.o -o %t1.wasm --max-memory=2147483648 +RUN: obj2yaml %t1.wasm | FileCheck %s --check-prefixes=CHECK,CHECK-2G + +; And also 4G of total memory +RUN: wasm-ld %t.o -o %t2.wasm --max-memory=4294967296 +RUN: obj2yaml %t2.wasm | FileCheck %s --check-prefixes=CHECK,CHECK-4G + +CHECK: - Type: MEMORY +CHECK-NEXT: Memories: +CHECK-NEXT: - Flags: [ HAS_MAX ] +CHECK-NEXT: Initial: 0x00000002 +CHECK-2G-NEXT: Maximum: 0x00008000 +CHECK-4G-NEXT: Maximum: 0x00010000 diff --git a/lld/wasm/Config.h b/lld/wasm/Config.h --- a/lld/wasm/Config.h +++ b/lld/wasm/Config.h @@ -46,9 +46,9 @@ bool stripDebug; bool stackFirst; bool trace; - uint32_t globalBase; - uint32_t initialMemory; - uint32_t maxMemory; + uint64_t globalBase; + uint64_t initialMemory; + uint64_t maxMemory; uint32_t zStackSize; unsigned ltoPartitions; unsigned ltoo; diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -201,7 +201,7 @@ // rather than overwriting global data, but also increases code size since all // static data loads and stores requires larger offsets. void Writer::layoutMemory() { - uint32_t memoryPtr = 0; + uint64_t memoryPtr = 0; auto placeStack = [&]() { if (config->relocatable || config->isPic) @@ -227,7 +227,7 @@ if (WasmSym::globalBase) WasmSym::globalBase->setVirtualAddress(memoryPtr); - uint32_t dataStart = memoryPtr; + uint64_t dataStart = memoryPtr; // Arbitrarily set __dso_handle handle to point to the start of the data // segments.