Skip to content
This repository was archived by the owner on Jan 1, 2023. It is now read-only.

Commit c37fd16

Browse files
committed
[WebAssembly] Add version to object file metadata
Summary: See WebAssembly/tool-conventions#54 Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D46069 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330969 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 0866a2f commit c37fd16

31 files changed

Lines changed: 57 additions & 22 deletions

include/llvm/BinaryFormat/Wasm.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ namespace wasm {
2424
const char WasmMagic[] = {'\0', 'a', 's', 'm'};
2525
// Wasm binary format version
2626
const uint32_t WasmVersion = 0x1;
27+
// Wasm linking metadata version
28+
const uint32_t WasmMetadataVersion = 0x1;
2729
// Wasm uses a 64k page size
2830
const uint32_t WasmPageSize = 65536;
2931

@@ -161,6 +163,7 @@ struct WasmFunctionName {
161163
};
162164

163165
struct WasmLinkingData {
166+
uint32_t Version;
164167
std::vector<WasmInitFunc> InitFunctions;
165168
std::vector<StringRef> Comdats;
166169
std::vector<WasmSymbolInfo> SymbolTable;

include/llvm/ObjectYAML/WasmYAML.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ struct LinkingSection : CustomSection {
195195
return C && C->Name == "linking";
196196
}
197197

198+
uint32_t Version;
198199
std::vector<SymbolInfo> SymbolTable;
199200
std::vector<SegmentInfo> SegmentInfos;
200201
std::vector<InitFunction> InitFunctions;

lib/MC/WasmObjectWriter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -857,8 +857,9 @@ void WasmObjectWriter::writeLinkingMetaDataSection(
857857
const std::map<StringRef, std::vector<WasmComdatEntry>> &Comdats) {
858858
SectionBookkeeping Section;
859859
startCustomSection(Section, "linking");
860-
SectionBookkeeping SubSection;
860+
encodeULEB128(wasm::WasmMetadataVersion, getStream());
861861

862+
SectionBookkeeping SubSection;
862863
if (SymbolInfos.size() != 0) {
863864
startSection(SubSection, wasm::WASM_SYMBOL_TABLE);
864865
encodeULEB128(SymbolInfos.size(), getStream());

lib/Object/WasmObjectFile.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,14 @@ Error WasmObjectFile::parseLinkingSection(const uint8_t *Ptr,
313313
"Linking data must come after code section", object_error::parse_failed);
314314
}
315315

316+
LinkingData.Version = readVaruint32(Ptr);
317+
if (LinkingData.Version != wasm::WasmMetadataVersion) {
318+
return make_error<GenericBinaryError>(
319+
"Unexpected metadata version: " + Twine(LinkingData.Version) +
320+
" (Expected: " + Twine(wasm::WasmMetadataVersion) + ")",
321+
object_error::parse_failed);
322+
}
323+
316324
while (Ptr < End) {
317325
uint8_t Type = readUint8(Ptr);
318326
uint32_t Size = readVaruint32(Ptr);

lib/ObjectYAML/WasmYAML.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ static void sectionMapping(IO &IO, WasmYAML::NameSection &Section) {
5757
static void sectionMapping(IO &IO, WasmYAML::LinkingSection &Section) {
5858
commonSectionMapping(IO, Section);
5959
IO.mapRequired("Name", Section.Name);
60+
IO.mapRequired("Version", Section.Version);
6061
IO.mapOptional("SymbolTable", Section.SymbolTable);
6162
IO.mapOptional("SegmentInfo", Section.SegmentInfos);
6263
IO.mapOptional("InitFunctions", Section.InitFunctions);

test/MC/WebAssembly/array-fill.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ target triple = "wasm32-unknown-unknown-wasm"
1212
; CHECK: - Type: DATA
1313
; CHECK: Content: '0102'
1414

15-
; CHECK: - Type: CUSTOM
16-
; CHECK-NEXT: Name: linking
17-
; CHECK-NEXT: SymbolTable:
15+
; CHECK: SymbolTable:
1816
; CHECK-NEXT: - Index: 0
1917
; CHECK-NEXT: Kind: DATA
2018
; CHECK-NEXT: Name: gBd

test/MC/WebAssembly/bss.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ target triple = "wasm32-unknown-unknown-wasm"
3535
; CHECK-NEXT: Opcode: I32_CONST
3636
; CHECK-NEXT: Value: 8
3737
; CHECK-NEXT: Content: ''
38-
; CHECK-NEXT: - Type: CUSTOM
39-
; CHECK-NEXT: Name: linking
40-
; CHECK-NEXT: SymbolTable:
38+
39+
; CHECK: SymbolTable:
4140
; CHECK-NEXT: - Index: 0
4241
; CHECK-NEXT: Kind: DATA
4342
; CHECK-NEXT: Name: g0

test/MC/WebAssembly/comdat.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ define linkonce_odr i32 @sharedFn() #1 comdat($sharedComdat) {
7575
; CHECK-NEXT: Content: '616263'
7676
; CHECK-NEXT: - Type: CUSTOM
7777
; CHECK-NEXT: Name: linking
78+
; CHECK-NEXT: Version: 1
7879
; CHECK-NEXT: SymbolTable:
7980
; CHECK-NEXT: - Index: 0
8081
; CHECK-NEXT: Kind: FUNCTION

test/MC/WebAssembly/explicit-sections.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@ target triple = "wasm32-unknown-unknown-wasm"
3030
; CHECK-NEXT: Opcode: I32_CONST
3131
; CHECK-NEXT: Value: 24
3232
; CHECK-NEXT: Content: '08000000'
33-
; CHECK-NEXT: - Type: CUSTOM
34-
; CHECK-NEXT: Name: linking
35-
; CHECK-NEXT: SymbolTable:
33+
34+
; CHECK: SymbolTable:
3635
; CHECK-NEXT: - Index: 0
3736
; CHECK-NEXT: Kind: DATA
3837
; CHECK-NEXT: Name: global0

test/MC/WebAssembly/global-ctor-dtor.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ declare void @func3()
110110
; CHECK-NEXT: Content: '01040000'
111111
; CHECK-NEXT: - Type: CUSTOM
112112
; CHECK-NEXT: Name: linking
113+
; CHECK-NEXT: Version: 1
113114
; CHECK-NEXT: SymbolTable:
114115
; CHECK-NEXT: - Index: 0
115116
; CHECK-NEXT: Kind: FUNCTION

0 commit comments

Comments
 (0)