181ad6265SDimitry Andric //===- WasmReader.cpp -----------------------------------------------------===// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric 981ad6265SDimitry Andric #include "WasmReader.h" 1081ad6265SDimitry Andric 1181ad6265SDimitry Andric namespace llvm { 1281ad6265SDimitry Andric namespace objcopy { 1381ad6265SDimitry Andric namespace wasm { 1481ad6265SDimitry Andric 1581ad6265SDimitry Andric using namespace object; 1681ad6265SDimitry Andric using namespace llvm::wasm; 1781ad6265SDimitry Andric create() const1881ad6265SDimitry AndricExpected<std::unique_ptr<Object>> Reader::create() const { 1981ad6265SDimitry Andric auto Obj = std::make_unique<Object>(); 2081ad6265SDimitry Andric Obj->Header = WasmObj.getHeader(); 2181ad6265SDimitry Andric std::vector<Section> Sections; 2281ad6265SDimitry Andric Obj->Sections.reserve(WasmObj.getNumSections()); 2381ad6265SDimitry Andric for (const SectionRef &Sec : WasmObj.sections()) { 2481ad6265SDimitry Andric const WasmSection &WS = WasmObj.getWasmSection(Sec); 25*8a4dda33SDimitry Andric Obj->Sections.push_back({static_cast<uint8_t>(WS.Type), 26*8a4dda33SDimitry Andric WS.HeaderSecSizeEncodingLen, WS.Name, WS.Content}); 2781ad6265SDimitry Andric // Give known sections standard names to allow them to be selected. (Custom 2881ad6265SDimitry Andric // sections already have their names filled in by the parser). 2981ad6265SDimitry Andric Section &ReaderSec = Obj->Sections.back(); 3081ad6265SDimitry Andric if (ReaderSec.SectionType > WASM_SEC_CUSTOM && 3181ad6265SDimitry Andric ReaderSec.SectionType <= WASM_SEC_LAST_KNOWN) 3281ad6265SDimitry Andric ReaderSec.Name = sectionTypeToString(ReaderSec.SectionType); 3381ad6265SDimitry Andric } 3481ad6265SDimitry Andric return std::move(Obj); 3581ad6265SDimitry Andric } 3681ad6265SDimitry Andric 3781ad6265SDimitry Andric } // end namespace wasm 3881ad6265SDimitry Andric } // end namespace objcopy 3981ad6265SDimitry Andric } // end namespace llvm 40