diff options
author | Sam Clegg <sbc@chromium.org> | 2017-12-07 03:05:45 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2017-12-07 03:05:45 +0000 |
commit | 8460b26403736e50afbb92b0657b8e556eb87a3c (patch) | |
tree | 40c6de565ad865c64bb36170f7ed8315c78788eb | |
parent | e1694f9bf88dad94fa7b52de2bbad609d6cb37c7 (diff) | |
download | bcm5719-llvm-8460b26403736e50afbb92b0657b8e556eb87a3c.tar.gz bcm5719-llvm-8460b26403736e50afbb92b0657b8e556eb87a3c.zip |
Revert "[WebAssembly] Import the linear memory and function table."
We need to a little time to prepare and lld-side change that
supports this.
Original change: https://reviews.llvm.org/D40875
llvm-svn: 320003
-rw-r--r-- | llvm/lib/MC/WasmObjectWriter.cpp | 82 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/external-func-address.ll | 6 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/func-address.ll | 2 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/init-fini-array.ll | 20 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/reloc-code.ll | 2 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/reloc-data.ll | 2 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/sections.ll | 11 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/weak-alias.ll | 22 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/weak.ll | 6 |
9 files changed, 72 insertions, 81 deletions
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp index 7c50f437cfa..351927d628a 100644 --- a/llvm/lib/MC/WasmObjectWriter.cpp +++ b/llvm/lib/MC/WasmObjectWriter.cpp @@ -270,9 +270,10 @@ private: } void writeTypeSection(ArrayRef<WasmFunctionType> FunctionTypes); - void writeImportSection(ArrayRef<WasmImport> Imports, uint32_t DataSize, - uint32_t NumElements); + void writeImportSection(ArrayRef<WasmImport> Imports); void writeFunctionSection(ArrayRef<WasmFunction> Functions); + void writeTableSection(uint32_t NumElements); + void writeMemorySection(uint32_t DataSize); void writeGlobalSection(); void writeExportSection(ArrayRef<WasmExport> Exports); void writeElemSection(ArrayRef<uint32_t> TableElems); @@ -660,14 +661,10 @@ void WasmObjectWriter::writeTypeSection( endSection(Section); } -void WasmObjectWriter::writeImportSection(ArrayRef<WasmImport> Imports, - uint32_t DataSize, - uint32_t NumElements) { +void WasmObjectWriter::writeImportSection(ArrayRef<WasmImport> Imports) { if (Imports.empty()) return; - uint32_t NumPages = (DataSize + wasm::WasmPageSize - 1) / wasm::WasmPageSize; - SectionBookkeeping Section; startSection(Section, wasm::WASM_SEC_IMPORT); @@ -686,15 +683,6 @@ void WasmObjectWriter::writeImportSection(ArrayRef<WasmImport> Imports, encodeSLEB128(int32_t(Import.Type), getStream()); encodeULEB128(int32_t(Import.IsMutable), getStream()); break; - case wasm::WASM_EXTERNAL_MEMORY: - encodeULEB128(0, getStream()); // flags - encodeULEB128(NumPages, getStream()); // initial - break; - case wasm::WASM_EXTERNAL_TABLE: - encodeSLEB128(int32_t(Import.Type), getStream()); - encodeULEB128(0, getStream()); // flags - encodeULEB128(NumElements, getStream()); // initial - break; default: llvm_unreachable("unsupported import kind"); } @@ -717,6 +705,39 @@ void WasmObjectWriter::writeFunctionSection(ArrayRef<WasmFunction> Functions) { endSection(Section); } +void WasmObjectWriter::writeTableSection(uint32_t NumElements) { + // For now, always emit the table section, since indirect calls are not + // valid without it. In the future, we could perhaps be more clever and omit + // it if there are no indirect calls. + + SectionBookkeeping Section; + startSection(Section, wasm::WASM_SEC_TABLE); + + encodeULEB128(1, getStream()); // The number of tables. + // Fixed to 1 for now. + encodeSLEB128(wasm::WASM_TYPE_ANYFUNC, getStream()); // Type of table + encodeULEB128(0, getStream()); // flags + encodeULEB128(NumElements, getStream()); // initial + + endSection(Section); +} + +void WasmObjectWriter::writeMemorySection(uint32_t DataSize) { + // For now, always emit the memory section, since loads and stores are not + // valid without it. In the future, we could perhaps be more clever and omit + // it if there are no loads or stores. + SectionBookkeeping Section; + uint32_t NumPages = (DataSize + wasm::WasmPageSize - 1) / wasm::WasmPageSize; + + startSection(Section, wasm::WASM_SEC_MEMORY); + encodeULEB128(1, getStream()); // number of memory spaces + + encodeULEB128(0, getStream()); // flags + encodeULEB128(NumPages, getStream()); // initial + + endSection(Section); +} + void WasmObjectWriter::writeGlobalSection() { if (Globals.empty()) return; @@ -1064,29 +1085,6 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, } } - // For now, always emit the memory import, since loads and stores are not - // valid without it. In the future, we could perhaps be more clever and omit - // it if there are no loads or stores. - MCSymbolWasm *MemorySym = - cast<MCSymbolWasm>(Ctx.getOrCreateSymbol("__linear_memory")); - WasmImport MemImport; - MemImport.ModuleName = MemorySym->getModuleName(); - MemImport.FieldName = MemorySym->getName(); - MemImport.Kind = wasm::WASM_EXTERNAL_MEMORY; - Imports.push_back(MemImport); - - // For now, always emit the table section, since indirect calls are not - // valid without it. In the future, we could perhaps be more clever and omit - // it if there are no indirect calls. - MCSymbolWasm *TableSym = - cast<MCSymbolWasm>(Ctx.getOrCreateSymbol("__indirect_function_table")); - WasmImport TableImport; - TableImport.ModuleName = TableSym->getModuleName(); - TableImport.FieldName = TableSym->getName(); - TableImport.Kind = wasm::WASM_EXTERNAL_TABLE; - TableImport.Type = wasm::WASM_TYPE_ANYFUNC; - Imports.push_back(TableImport); - // Populate FunctionTypeIndices and Imports. for (const MCSymbol &S : Asm.symbols()) { const auto &WS = static_cast<const MCSymbolWasm &>(S); @@ -1297,10 +1295,10 @@ void WasmObjectWriter::writeObject(MCAssembler &Asm, writeHeader(Asm); writeTypeSection(FunctionTypes); - writeImportSection(Imports, DataSize, TableElems.size()); + writeImportSection(Imports); writeFunctionSection(Functions); - // Skip the "table" section; we import the table instead. - // Skip the "memory" section; we import the memory instead. + writeTableSection(TableElems.size()); + writeMemorySection(DataSize); writeGlobalSection(); writeExportSection(Exports); // TODO: Start Section diff --git a/llvm/test/MC/WebAssembly/external-func-address.ll b/llvm/test/MC/WebAssembly/external-func-address.ll index 9386d945ccd..53da9805f98 100644 --- a/llvm/test/MC/WebAssembly/external-func-address.ll +++ b/llvm/test/MC/WebAssembly/external-func-address.ll @@ -17,11 +17,7 @@ declare void @f1(i32) #1 ; CHECK-NEXT: - I32 ; CHECK: - Type: IMPORT ; CHECK-NEXT: Imports: -; CHECK: - Module: env -; CHECK-NEXT: Field: __linear_memory -; CHECK: - Module: env -; CHECK-NEXT: Field: __indirect_function_table -; CHECK: - Module: env +; CHECK-NEXT: - Module: env ; CHECK-NEXT: Field: f1 ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: SigIndex: 0 diff --git a/llvm/test/MC/WebAssembly/func-address.ll b/llvm/test/MC/WebAssembly/func-address.ll index 16d38e1ebf2..15c09e0ebd8 100644 --- a/llvm/test/MC/WebAssembly/func-address.ll +++ b/llvm/test/MC/WebAssembly/func-address.ll @@ -28,7 +28,7 @@ entry: ; CHECK: } ; CHECK: Relocations [ -; CHECK: Section (6) CODE { +; CHECK: Section (8) CODE { ; CHECK: Relocation { ; CHECK: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0) ; CHECK: Offset: 0x4 diff --git a/llvm/test/MC/WebAssembly/init-fini-array.ll b/llvm/test/MC/WebAssembly/init-fini-array.ll index b7a1826bdc4..5cd32ff9bf5 100644 --- a/llvm/test/MC/WebAssembly/init-fini-array.ll +++ b/llvm/test/MC/WebAssembly/init-fini-array.ll @@ -14,18 +14,6 @@ declare void @func2() ; CHECK: - Type: IMPORT ; CHECK-NEXT: Imports: ; CHECK-NEXT: - Module: env -; CHECK-NEXT: Field: __linear_memory -; CHECK-NEXT: Kind: MEMORY -; CHECK-NEXT: Memory: -; CHECK-NEXT: Initial: 0x00000001 -; CHECK-NEXT: - Module: env -; CHECK-NEXT: Field: __indirect_function_table -; CHECK-NEXT: Kind: TABLE -; CHECK-NEXT: Table: -; CHECK-NEXT: ElemType: ANYFUNC -; CHECK-NEXT: Limits: -; CHECK-NEXT: Initial: 0x00000002 -; CHECK-NEXT: - Module: env ; CHECK-NEXT: Field: func1 ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: SigIndex: 0 @@ -33,6 +21,14 @@ declare void @func2() ; CHECK-NEXT: Field: func2 ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: SigIndex: 0 +; CHECK-NEXT: - Type: TABLE +; CHECK-NEXT: Tables: +; CHECK-NEXT: - ElemType: ANYFUNC +; CHECK-NEXT: Limits: +; CHECK-NEXT: Initial: 0x00000002 +; CHECK-NEXT: - Type: MEMORY +; CHECK-NEXT: Memories: +; CHECK-NEXT: - Initial: 0x00000001 ; CHECK-NEXT: - Type: GLOBAL ; CHECK-NEXT: Globals: ; CHECK-NEXT: - Type: I32 diff --git a/llvm/test/MC/WebAssembly/reloc-code.ll b/llvm/test/MC/WebAssembly/reloc-code.ll index e9aff890cff..f007b63ca83 100644 --- a/llvm/test/MC/WebAssembly/reloc-code.ll +++ b/llvm/test/MC/WebAssembly/reloc-code.ll @@ -22,7 +22,7 @@ entry: ; CHECK: Format: WASM ; CHECK: Relocations [ -; CHECK-NEXT: Section (6) CODE { +; CHECK-NEXT: Section (8) CODE { ; CHECK-NEXT: Relocation { ; CHECK-NEXT: Type: R_WEBASSEMBLY_MEMORY_ADDR_LEB (3) ; CHECK-NEXT: Offset: 0x9 diff --git a/llvm/test/MC/WebAssembly/reloc-data.ll b/llvm/test/MC/WebAssembly/reloc-data.ll index ca78d8b158f..519df036751 100644 --- a/llvm/test/MC/WebAssembly/reloc-data.ll +++ b/llvm/test/MC/WebAssembly/reloc-data.ll @@ -10,7 +10,7 @@ ; CHECK: Format: WASM ; CHECK: Relocations [ -; CHECK-NEXT: Section (4) DATA { +; CHECK-NEXT: Section (6) DATA { ; CHECK-NEXT: Relocation { ; CHECK-NEXT: Type: R_WEBASSEMBLY_MEMORY_ADDR_I32 (5) ; CHECK-NEXT: Offset: 0x13 diff --git a/llvm/test/MC/WebAssembly/sections.ll b/llvm/test/MC/WebAssembly/sections.ll index 14c9cc6ab07..85bf0818509 100644 --- a/llvm/test/MC/WebAssembly/sections.ll +++ b/llvm/test/MC/WebAssembly/sections.ll @@ -28,6 +28,17 @@ entry: ; CHECK: Type: FUNCTION (0x3) ; CHECK: } ; CHECK: Section { +; CHECK: Type: TABLE (0x4) +; CHECK: } +; CHECK: Section { +; CHECK: Type: MEMORY (0x5) +; CHECK: Memories [ +; CHECK: Memory { +; CHECK: InitialPages: 1 +; CHECK: } +; CHECK: ] +; CHECK: } +; CHECK: Section { ; CHECK: Type: GLOBAL (0x6) ; CHECK: } ; CHECK: Section { diff --git a/llvm/test/MC/WebAssembly/weak-alias.ll b/llvm/test/MC/WebAssembly/weak-alias.ll index 5c85fc09b03..4129870ce23 100644 --- a/llvm/test/MC/WebAssembly/weak-alias.ll +++ b/llvm/test/MC/WebAssembly/weak-alias.ll @@ -29,22 +29,16 @@ entry: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: ReturnType: I32 ; CHECK-NEXT: ParamTypes: -; CHECK-NEXT: - Type: IMPORT -; CHECK-NEXT: Imports: -; CHECK-NEXT: - Module: env -; CHECK-NEXT: Field: __linear_memory -; CHECK-NEXT: Kind: MEMORY -; CHECK-NEXT: Memory: -; CHECK-NEXT: Initial: 0x00000001 -; CHECK-NEXT: - Module: env -; CHECK-NEXT: Field: __indirect_function_table -; CHECK-NEXT: Kind: TABLE -; CHECK-NEXT: Table: -; CHECK-NEXT: ElemType: ANYFUNC -; CHECK-NEXT: Limits: -; CHECK-NEXT: Initial: 0x00000000 ; CHECK-NEXT: - Type: FUNCTION ; CHECK-NEXT: FunctionTypes: [ 0, 0 ] +; CHECK-NEXT: - Type: TABLE +; CHECK-NEXT: Tables: +; CHECK-NEXT: - ElemType: ANYFUNC +; CHECK-NEXT: Limits: +; CHECK-NEXT: Initial: 0x00000000 +; CHECK-NEXT: - Type: MEMORY +; CHECK-NEXT: Memories: +; CHECK-NEXT: - Initial: 0x00000001 ; CHECK-NEXT: - Type: GLOBAL ; CHECK-NEXT: Globals: ; CHECK-NEXT: - Type: I32 diff --git a/llvm/test/MC/WebAssembly/weak.ll b/llvm/test/MC/WebAssembly/weak.ll index af177b53595..f7353569024 100644 --- a/llvm/test/MC/WebAssembly/weak.ll +++ b/llvm/test/MC/WebAssembly/weak.ll @@ -12,11 +12,7 @@ entry: ; CHECK: - Type: IMPORT ; CHECK-NEXT: Imports: -; CHECK: - Module: env -; CHECK-NEXT: Field: __linear_memory -; CHECK: - Module: env -; CHECK-NEXT: Field: __indirect_function_table -; CHECK: - Module: env +; CHECK-NEXT: - Module: env ; CHECK-NEXT: Field: weak_external_data ; CHECK-NEXT: Kind: GLOBAL ; CHECK-NEXT: GlobalType: I32 |