<div dir="ltr">Hello Nicholas,<br><br>This commit broke one of our builders:<br><br><a href="http://lab.llvm.org:8011/builders/lld-perf-testsuite/builds/793">http://lab.llvm.org:8011/builders/lld-perf-testsuite/builds/793</a><br><br>. . . <br>FAILED: /usr/bin/c++   -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Itools/lld/wasm -I/home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/tools/lld/wasm -I/home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/tools/lld/include -Itools/lld/include -Iinclude -I/home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/include -fvisibility-inlines-hidden -Werror -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -O3    -UNDEBUG  -fno-exceptions -fno-rtti -MMD -MT tools/lld/wasm/CMakeFiles/lldWasm.dir/Writer.cpp.o -MF tools/lld/wasm/CMakeFiles/lldWasm.dir/Writer.cpp.o.d -o tools/lld/wasm/CMakeFiles/lldWasm.dir/Writer.cpp.o -c /home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/tools/lld/wasm/Writer.cpp<br>/home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/tools/lld/wasm/Writer.cpp: In member function ‘void {anonymous}::Writer::createMemorySection()’:<br>/home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/tools/lld/wasm/Writer.cpp:197:27: error: enumeral and non-enumeral type in conditional expression [-Werror=extra]<br>   writeUleb128(OS, HasMax ? WASM_LIMITS_FLAG_HAS_MAX : 0, "memory limits flags");<br>                           ^<br>cc1plus: all warnings being treated as errors<br>ninja: build stopped: subcommand failed.<br><br>Please have a look?<br><br>Thanks<br><br>Galina<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 14, 2018 at 6:53 AM, Nicholas Wilson via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ncw<br>
Date: Wed Mar 14 06:53:58 2018<br>
New Revision: 327508<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=327508&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=327508&view=rev</a><br>
Log:<br>
[WebAssembly] Add missing implementation for --initial/max-memory args<br>
<br>
Previously, Config->InitialMemory/<wbr>MaxMemory were hooked up to some<br>
commandline args but had no effect at all.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D44393" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D44393</a><br>
<br>
Modified:<br>
    lld/trunk/test/wasm/data-<wbr>layout.ll<br>
    lld/trunk/test/wasm/import-<wbr>memory.test<br>
    lld/trunk/wasm/Writer.cpp<br>
<br>
Modified: lld/trunk/test/wasm/data-<wbr>layout.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/data-layout.ll?rev=327508&r1=327507&r2=327508&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/wasm/<wbr>data-layout.ll?rev=327508&r1=<wbr>327507&r2=327508&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/test/wasm/data-<wbr>layout.ll (original)<br>
+++ lld/trunk/test/wasm/data-<wbr>layout.ll Wed Mar 14 06:53:58 2018<br>
@@ -16,7 +16,10 @@ target triple = "wasm32-unknown-unknown-<br>
 ; RUN: wasm-ld -no-gc-sections --check-signatures --allow-undefined -o %t.wasm %t.o %t.hello.o<br>
 ; RUN: obj2yaml %t.wasm | FileCheck %s<br>
<br>
-; CHECK:        - Type:            GLOBAL<br>
+; CHECK:        - Type:            MEMORY<br>
+; CHECK-NEXT:     Memories:<br>
+; CHECK-NEXT:       - Initial:         0x00000002<br>
+; CHECK-NEXT:   - Type:            GLOBAL<br>
 ; CHECK-NEXT:     Globals:<br>
 ; CHECK-NEXT:       - Index:           0<br>
 ; CHECK-NEXT:         Type:            I32<br>
@@ -54,6 +57,18 @@ target triple = "wasm32-unknown-unknown-<br>
 ; CHECK-NEXT:    - Type:            CUSTOM<br>
<br>
<br>
+; RUN: wasm-ld -no-gc-sections --check-signatures --allow-undefined \<br>
+; RUN:     --initial-memory=131072 --max-memory=131072 -o %t_max.wasm %t.o \<br>
+; RUN:     %t.hello.o<br>
+; RUN: obj2yaml %t_max.wasm | FileCheck %s -check-prefix=CHECK-MAX<br>
+<br>
+; CHECK-MAX:        - Type:            MEMORY<br>
+; CHECK-MAX-NEXT:     Memories:<br>
+; CHECK-MAX-NEXT:       - Flags:           [ HAS_MAX ]<br>
+; CHECK-MAX-NEXT:         Initial:         0x00000002<br>
+; CHECK-MAX-NEXT:         Maximum:         0x00000002<br>
+<br>
+<br>
 ; RUN: wasm-ld --check-signatures --relocatable -o %t_reloc.wasm %t.o %t.hello.o<br>
 ; RUN: obj2yaml %t_reloc.wasm | FileCheck %s -check-prefix=RELOC<br>
<br>
<br>
Modified: lld/trunk/test/wasm/import-<wbr>memory.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/import-memory.test?rev=327508&r1=327507&r2=327508&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/wasm/<wbr>import-memory.test?rev=327508&<wbr>r1=327507&r2=327508&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/test/wasm/import-<wbr>memory.test (original)<br>
+++ lld/trunk/test/wasm/import-<wbr>memory.test Wed Mar 14 06:53:58 2018<br>
@@ -11,3 +11,23 @@<br>
 # CHECK-NEXT:        Kind:            MEMORY<br>
 # CHECK-NEXT:        Memory:<br>
 # CHECK-NEXT:          Initial:         0x00000002<br>
+# CHECK-NEXT:  - Type:<br>
+<br>
+<br>
+<br>
+# RUN: wasm-ld --check-signatures --import-memory --initial-memory=262144 \<br>
+# RUN:     --max-memory=327680 -o %t.max.wasm %t.start.o<br>
+# RUN: obj2yaml %t.max.wasm | FileCheck -check-prefix=CHECK-MAX %s<br>
+<br>
+# Verify the --initial-memory and --max-memory arguments work with imports<br>
+<br>
+# CHECK-MAX:       - Type:            IMPORT<br>
+# CHECK-MAX-NEXT:    Imports:<br>
+# CHECK-MAX-NEXT:      - Module:          env<br>
+# CHECK-MAX-NEXT:        Field:           memory<br>
+# CHECK-MAX-NEXT:        Kind:            MEMORY<br>
+# CHECK-MAX-NEXT:        Memory:<br>
+# CHECK-MAX-NEXT:          Flags:           [ HAS_MAX ]<br>
+# CHECK-MAX-NEXT:          Initial:         0x00000004<br>
+# CHECK-MAX-NEXT:          Maximum:         0x00000005<br>
+# CHECK-MAX-NEXT:  - Type:<br>
<br>
Modified: lld/trunk/wasm/Writer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/wasm/Writer.cpp?rev=327508&r1=327507&r2=327508&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/wasm/Writer.<wbr>cpp?rev=327508&r1=327507&r2=<wbr>327508&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/wasm/Writer.cpp (original)<br>
+++ lld/trunk/wasm/Writer.cpp Wed Mar 14 06:53:58 2018<br>
@@ -117,6 +117,7 @@ private:<br>
<br>
   uint64_t FileSize = 0;<br>
   uint32_t NumMemoryPages = 0;<br>
+  uint32_t MaxMemoryPages = 0;<br>
<br>
   std::vector<const WasmSignature *> Types;<br>
   DenseMap<WasmSignature, int32_t, WasmSignatureDenseMapInfo> TypeIndices;<br>
@@ -163,6 +164,10 @@ void Writer::createImportSection() {<br>
     Import.Kind = WASM_EXTERNAL_MEMORY;<br>
     Import.Memory.Flags = 0;<br>
     Import.Memory.Initial = NumMemoryPages;<br>
+    if (MaxMemoryPages != 0) {<br>
+      Import.Memory.Flags |= WASM_LIMITS_FLAG_HAS_MAX;<br>
+      Import.Memory.Maximum = MaxMemoryPages;<br>
+    }<br>
     writeImport(OS, Import);<br>
   }<br>
<br>
@@ -209,9 +214,12 @@ void Writer::createMemorySection() {<br>
   SyntheticSection *Section = createSyntheticSection(WASM_<wbr>SEC_MEMORY);<br>
   raw_ostream &OS = Section->getStream();<br>
<br>
+  bool HasMax = MaxMemoryPages != 0;<br>
   writeUleb128(OS, 1, "memory count");<br>
-  writeUleb128(OS, 0, "memory limits flags");<br>
+  writeUleb128(OS, HasMax ? WASM_LIMITS_FLAG_HAS_MAX : 0, "memory limits flags");<br>
   writeUleb128(OS, NumMemoryPages, "initial pages");<br>
+  if (HasMax)<br>
+    writeUleb128(OS, MaxMemoryPages, "max pages");<br>
 }<br>
<br>
 void Writer::createGlobalSection() {<br>
@@ -599,9 +607,26 @@ void Writer::layoutMemory() {<br>
     log("mem: heap base   = " + Twine(MemoryPtr));<br>
   }<br>
<br>
+  if (Config->InitialMemory != 0) {<br>
+    if (Config->InitialMemory != alignTo(Config->InitialMemory, WasmPageSize))<br>
+      error("initial memory must be " + Twine(WasmPageSize) + "-byte aligned");<br>
+    if (MemoryPtr > Config->InitialMemory)<br>
+      error("initial memory too small, " + Twine(MemoryPtr) + " bytes needed");<br>
+    else<br>
+      MemoryPtr = Config->InitialMemory;<br>
+  }<br>
   uint32_t MemSize = alignTo(MemoryPtr, WasmPageSize);<br>
   NumMemoryPages = MemSize / WasmPageSize;<br>
   log("mem: total pages = " + Twine(NumMemoryPages));<br>
+<br>
+  if (Config->MaxMemory != 0) {<br>
+    if (Config->MaxMemory != alignTo(Config->MaxMemory, WasmPageSize))<br>
+      error("maximum memory must be " + Twine(WasmPageSize) + "-byte aligned");<br>
+    if (MemoryPtr > Config->MaxMemory)<br>
+      error("maximum memory too small, " + Twine(MemoryPtr) + " bytes needed");<br>
+    MaxMemoryPages = Config->MaxMemory / WasmPageSize;<br>
+    log("mem: max pages   = " + Twine(MaxMemoryPages));<br>
+  }<br>
 }<br>
<br>
 SyntheticSection *Writer::<wbr>createSyntheticSection(uint32_<wbr>t Type,<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>