Index: include/llvm/BinaryFormat/Wasm.h =================================================================== --- include/llvm/BinaryFormat/Wasm.h +++ include/llvm/BinaryFormat/Wasm.h @@ -91,6 +91,8 @@ struct WasmFunction { std::vector Locals; ArrayRef Body; + size_t CodeSectionOffset; + size_t Size; }; struct WasmDataSegment { Index: include/llvm/Object/Wasm.h =================================================================== --- include/llvm/Object/Wasm.h +++ include/llvm/Object/Wasm.h @@ -128,28 +128,18 @@ static bool classof(const Binary *v) { return v->isWasm(); } - const std::vector& types() const { return Signatures; } - const std::vector& functionTypes() const { return FunctionTypes; } - const std::vector& imports() const { return Imports; } - const std::vector& tables() const { return Tables; } - const std::vector& memories() const { return Memories; } - const std::vector& globals() const { return Globals; } - const std::vector& exports() const { return Exports; } + ArrayRef types() const { return Signatures; } + ArrayRef functionTypes() const { return FunctionTypes; } + ArrayRef imports() const { return Imports; } + ArrayRef tables() const { return Tables; } + ArrayRef memories() const { return Memories; } + ArrayRef globals() const { return Globals; } + ArrayRef exports() const { return Exports; } const wasm::WasmLinkingData& linkingData() const { return LinkingData; } - - uint32_t getNumberOfSymbols() const { - return Symbols.size(); - } - - const std::vector& elements() const { - return ElemSegments; - } - - const std::vector& dataSegments() const { - return DataSegments; - } - - const std::vector& functions() const { return Functions; } + uint32_t getNumberOfSymbols() const { return Symbols.size(); } + ArrayRef elements() const { return ElemSegments; } + ArrayRef dataSegments() const { return DataSegments; } + ArrayRef functions() const { return Functions; } const ArrayRef& code() const { return CodeSection; } uint32_t startFunction() const { return StartFunction; } Index: lib/Object/WasmObjectFile.cpp =================================================================== --- lib/Object/WasmObjectFile.cpp +++ lib/Object/WasmObjectFile.cpp @@ -690,12 +690,14 @@ object_error::parse_failed); } + const uint8_t *CodeSectionStart = Ptr; CodeSection = ArrayRef(Ptr, End - Ptr); while (FunctionCount--) { wasm::WasmFunction Function; - uint32_t FunctionSize = readVaruint32(Ptr); - const uint8_t *FunctionEnd = Ptr + FunctionSize; + Function.CodeSectionOffset = Ptr - CodeSectionStart; + Function.Size = readVaruint32(Ptr); + const uint8_t *FunctionEnd = Ptr + Function.Size; uint32_t NumLocalDecls = readVaruint32(Ptr); Function.Locals.reserve(NumLocalDecls);