brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · fe61d12 Raw
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