40 lines · cpp
1//===- WasmReader.cpp -----------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "WasmReader.h"10 11namespace llvm {12namespace objcopy {13namespace wasm {14 15using namespace object;16using namespace llvm::wasm;17 18Expected<std::unique_ptr<Object>> Reader::create() const {19 auto Obj = std::make_unique<Object>();20 Obj->Header = WasmObj.getHeader();21 Obj->isRelocatableObject = WasmObj.isRelocatableObject();22 Obj->Sections.reserve(WasmObj.getNumSections());23 for (const SectionRef &Sec : WasmObj.sections()) {24 const WasmSection &WS = WasmObj.getWasmSection(Sec);25 Obj->Sections.push_back({static_cast<uint8_t>(WS.Type),26 WS.HeaderSecSizeEncodingLen, WS.Name, WS.Content});27 // Give known sections standard names to allow them to be selected. (Custom28 // sections already have their names filled in by the parser).29 Section &ReaderSec = Obj->Sections.back();30 if (ReaderSec.SectionType > WASM_SEC_CUSTOM &&31 ReaderSec.SectionType <= WASM_SEC_LAST_KNOWN)32 ReaderSec.Name = sectionTypeToString(ReaderSec.SectionType);33 }34 return std::move(Obj);35}36 37} // end namespace wasm38} // end namespace objcopy39} // end namespace llvm40