Index: test/wasm/locals-duplicate.test =================================================================== --- test/wasm/locals-duplicate.test +++ test/wasm/locals-duplicate.test @@ -232,8 +232,8 @@ ; RELOC-NEXT: - ElemType: ANYFUNC ; RELOC-NEXT: Limits: ; RELOC-NEXT: Flags: [ HAS_MAX ] -; RELOC-NEXT: Initial: 0x00000006 -; RELOC-NEXT: Maximum: 0x00000006 +; RELOC-NEXT: Initial: 0x00000007 +; RELOC-NEXT: Maximum: 0x00000007 ; RELOC-NEXT: - Type: MEMORY ; RELOC-NEXT: Memories: ; RELOC-NEXT: - Initial: 0x00000001 @@ -353,7 +353,7 @@ ; RELOC-NEXT: Segments: ; RELOC-NEXT: - Offset: ; RELOC-NEXT: Opcode: I32_CONST -; RELOC-NEXT: Value: 0 +; RELOC-NEXT: Value: 1 ; RELOC-NEXT: Functions: [ 0, 1, 2, 9, 10, 11 ] ; RELOC-NEXT: - Type: CODE ; RELOC-NEXT: Relocations: @@ -414,13 +414,13 @@ ; RELOC-NEXT: Body: 4190808080000B ; RELOC-NEXT: - Index: 6 ; RELOC-NEXT: Locals: -; RELOC-NEXT: Body: 4180808080000B +; RELOC-NEXT: Body: 4181808080000B ; RELOC-NEXT: - Index: 7 ; RELOC-NEXT: Locals: -; RELOC-NEXT: Body: 4181808080000B +; RELOC-NEXT: Body: 4182808080000B ; RELOC-NEXT: - Index: 8 ; RELOC-NEXT: Locals: -; RELOC-NEXT: Body: 4182808080000B +; RELOC-NEXT: Body: 4183808080000B ; RELOC-NEXT: - Index: 9 ; RELOC-NEXT: Locals: ; RELOC-NEXT: Body: 41020B @@ -441,13 +441,13 @@ ; RELOC-NEXT: Body: 4194808080000B ; RELOC-NEXT: - Index: 15 ; RELOC-NEXT: Locals: -; RELOC-NEXT: Body: 4183808080000B +; RELOC-NEXT: Body: 4184808080000B ; RELOC-NEXT: - Index: 16 ; RELOC-NEXT: Locals: -; RELOC-NEXT: Body: 4184808080000B +; RELOC-NEXT: Body: 4185808080000B ; RELOC-NEXT: - Index: 17 ; RELOC-NEXT: Locals: -; RELOC-NEXT: Body: 4185808080000B +; RELOC-NEXT: Body: 4186808080000B ; RELOC-NEXT: - Type: DATA ; RELOC-NEXT: Segments: ; RELOC-NEXT: - SectionOffset: 6 Index: test/wasm/relocatable.ll =================================================================== --- test/wasm/relocatable.ll +++ test/wasm/relocatable.ll @@ -69,8 +69,8 @@ ; CHECK-NEXT: - ElemType: ANYFUNC ; CHECK-NEXT: Limits: ; CHECK-NEXT: Flags: [ HAS_MAX ] -; CHECK-NEXT: Initial: 0x00000003 -; CHECK-NEXT: Maximum: 0x00000003 +; CHECK-NEXT: Initial: 0x00000004 +; CHECK-NEXT: Maximum: 0x00000004 ; CHECK-NEXT: - Type: MEMORY ; CHECK-NEXT: Memories: ; CHECK-NEXT: - Initial: 0x00000001 @@ -145,7 +145,7 @@ ; CHECK-NEXT: Segments: ; CHECK-NEXT: - Offset: ; CHECK-NEXT: Opcode: I32_CONST -; CHECK-NEXT: Value: 0 +; CHECK-NEXT: Value: 1 ; CHECK-NEXT: Functions: [ 4, 1, 2 ] ; CHECK-NEXT: - Type: CODE ; CHECK-NEXT: Relocations: @@ -200,19 +200,19 @@ ; CHECK-NEXT: Offset: ; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Value: 8 -; CHECK-NEXT: Content: '00000000' +; CHECK-NEXT: Content: '01000000' ; CHECK-NEXT: - SectionOffset: 27 ; CHECK-NEXT: MemoryIndex: 0 ; CHECK-NEXT: Offset: ; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Value: 12 -; CHECK-NEXT: Content: '01000000' +; CHECK-NEXT: Content: '02000000' ; CHECK-NEXT: - SectionOffset: 36 ; CHECK-NEXT: MemoryIndex: 0 ; CHECK-NEXT: Offset: ; CHECK-NEXT: Opcode: I32_CONST ; CHECK-NEXT: Value: 16 -; CHECK-NEXT: Content: '02000000' +; CHECK-NEXT: Content: '03000000' ; CHECK-NEXT: - SectionOffset: 45 ; CHECK-NEXT: MemoryIndex: 0 ; CHECK-NEXT: Offset: Index: test/wasm/stack-pointer.ll =================================================================== --- test/wasm/stack-pointer.ll +++ test/wasm/stack-pointer.ll @@ -32,8 +32,8 @@ ; CHECK-NEXT: - ElemType: ANYFUNC ; CHECK-NEXT: Limits: ; CHECK-NEXT: Flags: [ HAS_MAX ] -; CHECK-NEXT: Initial: 0x00000000 -; CHECK-NEXT: Maximum: 0x00000000 +; CHECK-NEXT: Initial: 0x00000001 +; CHECK-NEXT: Maximum: 0x00000001 ; CHECK-NEXT: - Type: MEMORY ; CHECK-NEXT: Memories: ; CHECK-NEXT: - Initial: 0x00000000 Index: wasm/Writer.cpp =================================================================== --- wasm/Writer.cpp +++ wasm/Writer.cpp @@ -35,6 +35,7 @@ using namespace lld::wasm; static constexpr int kStackAlignment = 16; +static constexpr int kInitialTableOffset = 1; namespace { @@ -115,7 +116,6 @@ uint64_t FileSize = 0; uint32_t DataSize = 0; uint32_t NumMemoryPages = 0; - uint32_t InitialTableOffset = 0; std::vector Types; DenseMap TypeIndices; @@ -253,7 +253,7 @@ // no address-taken function will fail at validation time since it is // a validation error to include a call_indirect instruction if there // is not table. - uint32_t TableSize = InitialTableOffset + IndirectFunctions.size(); + uint32_t TableSize = kInitialTableOffset + IndirectFunctions.size(); SyntheticSection *Section = createSyntheticSection(WASM_SEC_TABLE); raw_ostream &OS = Section->getStream(); @@ -311,11 +311,11 @@ writeUleb128(OS, 0, "table index"); WasmInitExpr InitExpr; InitExpr.Opcode = WASM_OPCODE_I32_CONST; - InitExpr.Value.Int32 = InitialTableOffset; + InitExpr.Value.Int32 = kInitialTableOffset; writeInitExpr(OS, InitExpr); writeUleb128(OS, IndirectFunctions.size(), "elem count"); - uint32_t TableIndex = InitialTableOffset; + uint32_t TableIndex = kInitialTableOffset; for (const Symbol *Sym : IndirectFunctions) { assert(Sym->getTableIndex() == TableIndex); writeUleb128(OS, Sym->getOutputIndex(), "function index"); @@ -714,7 +714,7 @@ if (Config->Relocatable) DefinedGlobals.reserve(Symtab->getSymbols().size()); - uint32_t TableIndex = InitialTableOffset; + uint32_t TableIndex = kInitialTableOffset; for (ObjFile *File : Symtab->ObjectFiles) { if (Config->Relocatable) { @@ -857,9 +857,6 @@ } void Writer::run() { - if (!Config->Relocatable) - InitialTableOffset = 1; - log("-- calculateTypes"); calculateTypes(); log("-- calculateImports");