From 1c7b84108861ac92fb353891e7e4c747b6ea9f28 Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Fri, 18 Jun 2021 14:41:01 -0700 Subject: [PATCH] [WebAssembly] Make tag attribute's encoding uint8 This changes the encoding of the `attribute` field, which currently only contains the value `0` denoting this tag is for an exception, from `varuint32` to `uint8`. This field is effectively unused at the moment and reserved for future use, and it is not likely to need `varuint32` even in future. See https://github.com/WebAssembly/exception-handling/pull/162. This does not change any encoded binaries because `0` is encoded in the same way both in `varuint32` and `uint8`. Reviewed By: tlively Differential Revision: https://reviews.llvm.org/D104571 --- llvm/include/llvm/BinaryFormat/Wasm.h | 4 ++-- llvm/lib/MC/WasmObjectWriter.cpp | 4 ++-- llvm/lib/Object/WasmObjectFile.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/llvm/include/llvm/BinaryFormat/Wasm.h b/llvm/include/llvm/BinaryFormat/Wasm.h index 9dfe1d1..61544c3 100644 --- a/llvm/include/llvm/BinaryFormat/Wasm.h +++ b/llvm/include/llvm/BinaryFormat/Wasm.h @@ -103,7 +103,7 @@ struct WasmGlobal { struct WasmTagType { // Kind of tag. Currently only WASM_TAG_ATTRIBUTE_EXCEPTION is possible. - uint32_t Attribute; + uint8_t Attribute; uint32_t SigIndex; }; @@ -363,7 +363,7 @@ enum WasmSegmentFlag : unsigned { }; // Kinds of tag attributes. -enum WasmTagAttribute : unsigned { +enum WasmTagAttribute : uint8_t { WASM_TAG_ATTRIBUTE_EXCEPTION = 0x0, }; diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp index 41f50f6..4832cd3 100644 --- a/llvm/lib/MC/WasmObjectWriter.cpp +++ b/llvm/lib/MC/WasmObjectWriter.cpp @@ -814,7 +814,7 @@ void WasmObjectWriter::writeImportSection(ArrayRef Imports, encodeULEB128(NumElements, W->OS); // initial break; case wasm::WASM_EXTERNAL_TAG: - encodeULEB128(Import.Tag.Attribute, W->OS); + W->OS << char(Import.Tag.Attribute); encodeULEB128(Import.Tag.SigIndex, W->OS); break; default: @@ -848,7 +848,7 @@ void WasmObjectWriter::writeTagSection(ArrayRef Tags) { encodeULEB128(Tags.size(), W->OS); for (const wasm::WasmTagType &Tag : Tags) { - encodeULEB128(Tag.Attribute, W->OS); + W->OS << char(Tag.Attribute); encodeULEB128(Tag.SigIndex, W->OS); } diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp index 0f4eaa1..5188037 100644 --- a/llvm/lib/Object/WasmObjectFile.cpp +++ b/llvm/lib/Object/WasmObjectFile.cpp @@ -1066,7 +1066,7 @@ Error WasmObjectFile::parseImportSection(ReadContext &Ctx) { } case wasm::WASM_EXTERNAL_TAG: NumImportedTags++; - Im.Tag.Attribute = readVarint32(Ctx); + Im.Tag.Attribute = readUint8(Ctx); Im.Tag.SigIndex = readVarint32(Ctx); break; default: @@ -1143,7 +1143,7 @@ Error WasmObjectFile::parseTagSection(ReadContext &Ctx) { while (Count--) { wasm::WasmTag Tag; Tag.Index = NumImportedTags + Tags.size(); - Tag.Type.Attribute = readVaruint32(Ctx); + Tag.Type.Attribute = readUint8(Ctx); Tag.Type.SigIndex = readVaruint32(Ctx); Tags.push_back(Tag); } -- 2.7.4