From fe3f99fc870e1588a3129d3d262c216a5aec88ef Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Wed, 16 Jan 2019 01:43:21 +0000 Subject: [WebAssembly] Store section alignment as a power of 2 This change bumps for version number of the wasm object file metadata. See https://github.com/WebAssembly/tool-conventions/pull/92 Differential Revision: https://reviews.llvm.org/D56762 --- lld/test/wasm/Inputs/globals.yaml | 2 +- lld/test/wasm/Inputs/undefined-globals.yaml | 2 +- lld/test/wasm/locals-duplicate.test | 8 ++++---- lld/test/wasm/many-functions.ll | 6 +++--- lld/test/wasm/relocatable.ll | 14 +++++++------- lld/test/wasm/stack-pointer.ll | 2 +- lld/test/wasm/weak-alias.ll | 2 +- lld/wasm/OutputSegment.h | 2 +- lld/wasm/Writer.cpp | 4 ++-- 9 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lld/test/wasm/Inputs/globals.yaml b/lld/test/wasm/Inputs/globals.yaml index c08a3044ec9..a2c4602294e 100644 --- a/lld/test/wasm/Inputs/globals.yaml +++ b/lld/test/wasm/Inputs/globals.yaml @@ -34,7 +34,7 @@ Sections: Offset: 0x00000004 - Type: CUSTOM Name: linking - Version: 1 + Version: 2 SymbolTable: - Index: 0 Kind: GLOBAL diff --git a/lld/test/wasm/Inputs/undefined-globals.yaml b/lld/test/wasm/Inputs/undefined-globals.yaml index 440a538d658..49cf8811f81 100644 --- a/lld/test/wasm/Inputs/undefined-globals.yaml +++ b/lld/test/wasm/Inputs/undefined-globals.yaml @@ -32,7 +32,7 @@ Sections: Offset: 0x00000004 - Type: CUSTOM Name: linking - Version: 1 + Version: 2 SymbolTable: - Index: 0 Kind: GLOBAL diff --git a/lld/test/wasm/locals-duplicate.test b/lld/test/wasm/locals-duplicate.test index b673aeb6031..2d6bd0df531 100644 --- a/lld/test/wasm/locals-duplicate.test +++ b/lld/test/wasm/locals-duplicate.test @@ -382,7 +382,7 @@ ; RELOC-NEXT: Content: '0000000000000000' ; RELOC-NEXT: - Type: CUSTOM ; RELOC-NEXT: Name: linking -; RELOC-NEXT: Version: 1 +; RELOC-NEXT: Version: 2 ; RELOC-NEXT: SymbolTable: ; RELOC-NEXT: - Index: 0 ; RELOC-NEXT: Kind: FUNCTION @@ -516,15 +516,15 @@ ; RELOC-NEXT: SegmentInfo: ; RELOC-NEXT: - Index: 0 ; RELOC-NEXT: Name: .bss.colliding_global1 -; RELOC-NEXT: Alignment: 4 +; RELOC-NEXT: Alignment: 2 ; RELOC-NEXT: Flags: [ ] ; RELOC-NEXT: - Index: 1 ; RELOC-NEXT: Name: .bss.colliding_global2 -; RELOC-NEXT: Alignment: 4 +; RELOC-NEXT: Alignment: 2 ; RELOC-NEXT: Flags: [ ] ; RELOC-NEXT: - Index: 2 ; RELOC-NEXT: Name: .bss.colliding_global3 -; RELOC-NEXT: Alignment: 4 +; RELOC-NEXT: Alignment: 2 ; RELOC-NEXT: Flags: [ ] ; RELOC-NEXT: - Type: CUSTOM ; RELOC-NEXT: Name: name diff --git a/lld/test/wasm/many-functions.ll b/lld/test/wasm/many-functions.ll index 02ad9aab51a..e2191bed9ed 100644 --- a/lld/test/wasm/many-functions.ll +++ b/lld/test/wasm/many-functions.ll @@ -815,7 +815,7 @@ entry: ; CHECK-NEXT: Content: '01000000' ; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: Name: linking -; CHECK-NEXT: Version: 1 +; CHECK-NEXT: Version: 2 ; CHECK-NEXT: SymbolTable: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Kind: FUNCTION @@ -1482,9 +1482,9 @@ entry: ; CHECK-NEXT: SegmentInfo: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Name: .data.g0 -; CHECK-NEXT: Alignment: 4 +; CHECK-NEXT: Alignment: 2 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: Name: .data.foo -; CHECK-NEXT: Alignment: 4 +; CHECK-NEXT: Alignment: 2 ; CHECK-NEXT: Flags: [ ] diff --git a/lld/test/wasm/relocatable.ll b/lld/test/wasm/relocatable.ll index b7f19777b35..c503afa8123 100644 --- a/lld/test/wasm/relocatable.ll +++ b/lld/test/wasm/relocatable.ll @@ -157,7 +157,7 @@ entry: ; CHECK-NEXT: Content: '616263' ; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: Name: linking -; CHECK-NEXT: Version: 1 +; CHECK-NEXT: Version: 2 ; CHECK-NEXT: SymbolTable: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Kind: FUNCTION @@ -232,27 +232,27 @@ entry: ; CHECK-NEXT: SegmentInfo: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Name: .rodata.hello_str -; CHECK-NEXT: Alignment: 1 +; CHECK-NEXT: Alignment: 0 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: - Index: 1 ; CHECK-NEXT: Name: .data.func_addr1 -; CHECK-NEXT: Alignment: 4 +; CHECK-NEXT: Alignment: 2 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: - Index: 2 ; CHECK-NEXT: Name: .data.func_addr2 -; CHECK-NEXT: Alignment: 4 +; CHECK-NEXT: Alignment: 2 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: - Index: 3 ; CHECK-NEXT: Name: .data.func_addr3 -; CHECK-NEXT: Alignment: 4 +; CHECK-NEXT: Alignment: 2 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: - Index: 4 ; CHECK-NEXT: Name: .data.data_addr1 -; CHECK-NEXT: Alignment: 8 +; CHECK-NEXT: Alignment: 3 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: Name: .rodata.data_comdat -; CHECK-NEXT: Alignment: 1 +; CHECK-NEXT: Alignment: 0 ; CHECK-NEXT: Flags: [ ] ; CHECK-NEXT: Comdats: ; CHECK-NEXT: - Name: func_comdat diff --git a/lld/test/wasm/stack-pointer.ll b/lld/test/wasm/stack-pointer.ll index 8b5b01fe1c0..6851214fe91 100644 --- a/lld/test/wasm/stack-pointer.ll +++ b/lld/test/wasm/stack-pointer.ll @@ -50,7 +50,7 @@ entry: ; CHECK-NEXT: Body: 23808080800041106B1A41000B ; CHECK-NEXT: - Type: CUSTOM ; CHECK-NEXT: Name: linking -; CHECK-NEXT: Version: 1 +; CHECK-NEXT: Version: 2 ; CHECK-NEXT: SymbolTable: ; CHECK-NEXT: - Index: 0 ; CHECK-NEXT: Kind: FUNCTION diff --git a/lld/test/wasm/weak-alias.ll b/lld/test/wasm/weak-alias.ll index eaebef1a30d..0c856e1eafa 100644 --- a/lld/test/wasm/weak-alias.ll +++ b/lld/test/wasm/weak-alias.ll @@ -250,7 +250,7 @@ entry: ; RELOC-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081081808080002101200041106A24808080800020010B ; RELOC-NEXT: - Type: CUSTOM ; RELOC-NEXT: Name: linking -; RELOC-NEXT: Version: 1 +; RELOC-NEXT: Version: 2 ; RELOC-NEXT: SymbolTable: ; RELOC-NEXT: - Index: 0 ; RELOC-NEXT: Kind: FUNCTION diff --git a/lld/wasm/OutputSegment.h b/lld/wasm/OutputSegment.h index d5c89cd19f4..a982282dac1 100644 --- a/lld/wasm/OutputSegment.h +++ b/lld/wasm/OutputSegment.h @@ -26,7 +26,7 @@ public: void addInputSegment(InputSegment *InSeg) { Alignment = std::max(Alignment, InSeg->getAlignment()); InputSegments.push_back(InSeg); - Size = llvm::alignTo(Size, InSeg->getAlignment()); + Size = llvm::alignTo(Size, 1 << InSeg->getAlignment()); InSeg->OutputSeg = this; InSeg->OutputSegmentOffset = Size; Size += InSeg->getSize(); diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp index 42146c41e9a..819d4298fef 100644 --- a/lld/wasm/Writer.cpp +++ b/lld/wasm/Writer.cpp @@ -477,7 +477,7 @@ void Writer::createDylinkSection() { raw_ostream &OS = Section->getStream(); writeUleb128(OS, MemSize, "MemSize"); - writeUleb128(OS, int(log2(MemAlign)), "MemAlign"); + writeUleb128(OS, MemAlign, "MemAlign"); writeUleb128(OS, IndirectFunctions.size(), "TableSize"); writeUleb128(OS, 0, "TableAlign"); writeUleb128(OS, 0, "Needed"); // TODO: Support "needed" shared libraries @@ -691,7 +691,7 @@ void Writer::layoutMemory() { MemAlign = 0; for (OutputSegment *Seg : Segments) { MemAlign = std::max(MemAlign, Seg->Alignment); - MemoryPtr = alignTo(MemoryPtr, Seg->Alignment); + MemoryPtr = alignTo(MemoryPtr, 1 << Seg->Alignment); Seg->StartVA = MemoryPtr; log(formatv("mem: {0,-15} offset={1,-8} size={2,-8} align={3}", Seg->Name, MemoryPtr, Seg->Size, Seg->Alignment)); -- cgit v1.2.3