diff options
author | Sam Clegg <sbc@chromium.org> | 2018-03-01 18:06:21 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2018-03-01 18:06:21 +0000 |
commit | 03e101f1b00d463d3a070a43a7ac8f13db291c37 (patch) | |
tree | 000e836f3e42c60f9803b35cc41f798471314bf3 /llvm/lib/Object | |
parent | c6a75a69f15e42dd4c6b1a79f6d1a4e3df9f75ea (diff) | |
download | bcm5719-llvm-03e101f1b00d463d3a070a43a7ac8f13db291c37.tar.gz bcm5719-llvm-03e101f1b00d463d3a070a43a7ac8f13db291c37.zip |
[WebAssembly] Use uint8_t for single byte values to match the spec
The original BinaryEncoding.md document used to specify that
these values were `varint7`, but the official spec lists them
explicitly as single byte values and not LEB.
A similar change for wabt is in flight:
https://github.com/WebAssembly/wabt/pull/782
Differential Revision: https://reviews.llvm.org/D43921
llvm-svn: 326454
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r-- | llvm/lib/Object/WasmObjectFile.cpp | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp index f32f57b8ba1..b47d6bb2abb 100644 --- a/llvm/lib/Object/WasmObjectFile.cpp +++ b/llvm/lib/Object/WasmObjectFile.cpp @@ -99,18 +99,6 @@ static uint8_t readVaruint1(const uint8_t *&Ptr) { return result; } -static int8_t readVarint7(const uint8_t *&Ptr) { - int64_t result = readLEB128(Ptr); - assert(result <= VARINT7_MAX && result >= VARINT7_MIN); - return result; -} - -static uint8_t readVaruint7(const uint8_t *&Ptr) { - uint64_t result = readULEB128(Ptr); - assert(result <= VARUINT7_MAX); - return result; -} - static int32_t readVarint32(const uint8_t *&Ptr) { int64_t result = readLEB128(Ptr); assert(result <= INT32_MAX && result >= INT32_MIN); @@ -174,7 +162,7 @@ static wasm::WasmLimits readLimits(const uint8_t *&Ptr) { static wasm::WasmTable readTable(const uint8_t *&Ptr) { wasm::WasmTable Table; - Table.ElemType = readVarint7(Ptr); + Table.ElemType = readUint8(Ptr); Table.Limits = readLimits(Ptr); return Table; } @@ -182,7 +170,7 @@ static wasm::WasmTable readTable(const uint8_t *&Ptr) { static Error readSection(WasmSection &Section, const uint8_t *&Ptr, const uint8_t *Start, const uint8_t *Eof) { Section.Offset = Ptr - Start; - Section.Type = readVaruint7(Ptr); + Section.Type = readUint8(Ptr); uint32_t Size = readVaruint32(Ptr); if (Size == 0) return make_error<StringError>("Zero length section", @@ -274,7 +262,7 @@ Error WasmObjectFile::parseNameSection(const uint8_t *Ptr, const uint8_t *End) { } while (Ptr < End) { - uint8_t Type = readVarint7(Ptr); + uint8_t Type = readUint8(Ptr); uint32_t Size = readVaruint32(Ptr); const uint8_t *SubSectionEnd = Ptr + Size; switch (Type) { @@ -324,7 +312,7 @@ Error WasmObjectFile::parseLinkingSection(const uint8_t *Ptr, } while (Ptr < End) { - uint8_t Type = readVarint7(Ptr); + uint8_t Type = readUint8(Ptr); uint32_t Size = readVaruint32(Ptr); const uint8_t *SubSectionEnd = Ptr + Size; switch (Type) { @@ -548,7 +536,7 @@ WasmSection* WasmObjectFile::findSectionByType(uint32_t Type) { Error WasmObjectFile::parseRelocSection(StringRef Name, const uint8_t *Ptr, const uint8_t *End) { - uint8_t SectionCode = readVarint7(Ptr); + uint8_t SectionCode = readUint8(Ptr); WasmSection* Section = nullptr; if (SectionCode == wasm::WASM_SEC_CUSTOM) { StringRef Name = readString(Ptr); @@ -613,7 +601,7 @@ Error WasmObjectFile::parseTypeSection(const uint8_t *Ptr, const uint8_t *End) { while (Count--) { wasm::WasmSignature Sig; Sig.ReturnType = wasm::WASM_TYPE_NORESULT; - int8_t Form = readVarint7(Ptr); + uint8_t Form = readUint8(Ptr); if (Form != wasm::WASM_TYPE_FUNC) { return make_error<GenericBinaryError>("Invalid signature type", object_error::parse_failed); @@ -621,7 +609,7 @@ Error WasmObjectFile::parseTypeSection(const uint8_t *Ptr, const uint8_t *End) { uint32_t ParamCount = readVaruint32(Ptr); Sig.ParamTypes.reserve(ParamCount); while (ParamCount--) { - uint32_t ParamType = readVarint7(Ptr); + uint32_t ParamType = readUint8(Ptr); Sig.ParamTypes.push_back(ParamType); } uint32_t ReturnCount = readVaruint32(Ptr); @@ -630,7 +618,7 @@ Error WasmObjectFile::parseTypeSection(const uint8_t *Ptr, const uint8_t *End) { return make_error<GenericBinaryError>( "Multiple return types not supported", object_error::parse_failed); } - Sig.ReturnType = readVarint7(Ptr); + Sig.ReturnType = readUint8(Ptr); } Signatures.push_back(Sig); } @@ -655,7 +643,7 @@ Error WasmObjectFile::parseImportSection(const uint8_t *Ptr, const uint8_t *End) break; case wasm::WASM_EXTERNAL_GLOBAL: NumImportedGlobals++; - Im.Global.Type = readVarint7(Ptr); + Im.Global.Type = readUint8(Ptr); Im.Global.Mutable = readVaruint1(Ptr); break; case wasm::WASM_EXTERNAL_MEMORY: @@ -726,7 +714,7 @@ Error WasmObjectFile::parseGlobalSection(const uint8_t *Ptr, const uint8_t *End) while (Count--) { wasm::WasmGlobal Global; Global.Index = NumImportedGlobals + Globals.size(); - Global.Type.Type = readVarint7(Ptr); + Global.Type.Type = readUint8(Ptr); Global.Type.Mutable = readVaruint1(Ptr); if (Error Err = readInitExpr(Global.InitExpr, Ptr)) return Err; @@ -834,7 +822,7 @@ Error WasmObjectFile::parseCodeSection(const uint8_t *Ptr, const uint8_t *End) { while (NumLocalDecls--) { wasm::WasmLocalDecl Decl; Decl.Count = readVaruint32(Ptr); - Decl.Type = readVarint7(Ptr); + Decl.Type = readUint8(Ptr); Function.Locals.push_back(Decl); } |