diff options
| author | Sam Clegg <sbc@chromium.org> | 2018-04-26 18:15:32 +0000 |
|---|---|---|
| committer | Sam Clegg <sbc@chromium.org> | 2018-04-26 18:15:32 +0000 |
| commit | 6bb5a41f99445a9c067a699028d0d62a89953d12 (patch) | |
| tree | 59de67347939a02dae85848660ca40e08469b216 /llvm/lib | |
| parent | b31f91897966d6f14c50ac22de8f8a15bcfc0812 (diff) | |
| download | bcm5719-llvm-6bb5a41f99445a9c067a699028d0d62a89953d12.tar.gz bcm5719-llvm-6bb5a41f99445a9c067a699028d0d62a89953d12.zip | |
[WebAssembly] Add version to object file metadata
Summary: See https://github.com/WebAssembly/tool-conventions/issues/54
Subscribers: jfb, dschuff, jgravelle-google, aheejin, sunfish, llvm-commits
Differential Revision: https://reviews.llvm.org/D46069
llvm-svn: 330969
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/MC/WasmObjectWriter.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Object/WasmObjectFile.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/ObjectYAML/WasmYAML.cpp | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp index 0f8a42aacec..0e122708504 100644 --- a/llvm/lib/MC/WasmObjectWriter.cpp +++ b/llvm/lib/MC/WasmObjectWriter.cpp @@ -857,8 +857,9 @@ void WasmObjectWriter::writeLinkingMetaDataSection( const std::map<StringRef, std::vector<WasmComdatEntry>> &Comdats) { SectionBookkeeping Section; startCustomSection(Section, "linking"); - SectionBookkeeping SubSection; + encodeULEB128(wasm::WasmMetadataVersion, getStream()); + SectionBookkeeping SubSection; if (SymbolInfos.size() != 0) { startSection(SubSection, wasm::WASM_SYMBOL_TABLE); encodeULEB128(SymbolInfos.size(), getStream()); diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp index e6b7dded4e4..61db5d2468a 100644 --- a/llvm/lib/Object/WasmObjectFile.cpp +++ b/llvm/lib/Object/WasmObjectFile.cpp @@ -313,6 +313,14 @@ Error WasmObjectFile::parseLinkingSection(const uint8_t *Ptr, "Linking data must come after code section", object_error::parse_failed); } + LinkingData.Version = readVaruint32(Ptr); + if (LinkingData.Version != wasm::WasmMetadataVersion) { + return make_error<GenericBinaryError>( + "Unexpected metadata version: " + Twine(LinkingData.Version) + + " (Expected: " + Twine(wasm::WasmMetadataVersion) + ")", + object_error::parse_failed); + } + while (Ptr < End) { uint8_t Type = readUint8(Ptr); uint32_t Size = readVaruint32(Ptr); diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp index 72df93b876a..ff75bfc7676 100644 --- a/llvm/lib/ObjectYAML/WasmYAML.cpp +++ b/llvm/lib/ObjectYAML/WasmYAML.cpp @@ -57,6 +57,7 @@ static void sectionMapping(IO &IO, WasmYAML::NameSection &Section) { static void sectionMapping(IO &IO, WasmYAML::LinkingSection &Section) { commonSectionMapping(IO, Section); IO.mapRequired("Name", Section.Name); + IO.mapRequired("Version", Section.Version); IO.mapOptional("SymbolTable", Section.SymbolTable); IO.mapOptional("SegmentInfo", Section.SegmentInfos); IO.mapOptional("InitFunctions", Section.InitFunctions); |

