181ad6265SDimitry Andric //===- WasmObject.h ---------------------------------------------*- C++ -*-===// 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 #ifndef LLVM_LIB_OBJCOPY_WASM_WASMOBJECT_H 1081ad6265SDimitry Andric #define LLVM_LIB_OBJCOPY_WASM_WASMOBJECT_H 1181ad6265SDimitry Andric 1281ad6265SDimitry Andric #include "llvm/ADT/ArrayRef.h" 1381ad6265SDimitry Andric #include "llvm/ADT/StringRef.h" 1481ad6265SDimitry Andric #include "llvm/Object/Wasm.h" 1581ad6265SDimitry Andric #include "llvm/Support/MemoryBuffer.h" 1681ad6265SDimitry Andric #include <vector> 1781ad6265SDimitry Andric 1881ad6265SDimitry Andric namespace llvm { 1981ad6265SDimitry Andric namespace objcopy { 2081ad6265SDimitry Andric namespace wasm { 2181ad6265SDimitry Andric 2281ad6265SDimitry Andric struct Section { 2381ad6265SDimitry Andric // For now, each section is only an opaque binary blob with no distinction 2481ad6265SDimitry Andric // between custom and known sections. 2581ad6265SDimitry Andric uint8_t SectionType; 26*8a4dda33SDimitry Andric std::optional<uint8_t> HeaderSecSizeEncodingLen; 2781ad6265SDimitry Andric StringRef Name; 2881ad6265SDimitry Andric ArrayRef<uint8_t> Contents; 2981ad6265SDimitry Andric }; 3081ad6265SDimitry Andric 3181ad6265SDimitry Andric struct Object { 3281ad6265SDimitry Andric llvm::wasm::WasmObjectHeader Header; 3381ad6265SDimitry Andric // For now don't discriminate between kinds of sections. 3481ad6265SDimitry Andric std::vector<Section> Sections; 3581ad6265SDimitry Andric 3681ad6265SDimitry Andric void addSectionWithOwnedContents(Section NewSection, 3781ad6265SDimitry Andric std::unique_ptr<MemoryBuffer> &&Content); 3881ad6265SDimitry Andric void removeSections(function_ref<bool(const Section &)> ToRemove); 3981ad6265SDimitry Andric 4081ad6265SDimitry Andric private: 4181ad6265SDimitry Andric std::vector<std::unique_ptr<MemoryBuffer>> OwnedContents; 4281ad6265SDimitry Andric }; 4381ad6265SDimitry Andric 4481ad6265SDimitry Andric } // end namespace wasm 4581ad6265SDimitry Andric } // end namespace objcopy 4681ad6265SDimitry Andric } // end namespace llvm 4781ad6265SDimitry Andric 4881ad6265SDimitry Andric #endif // LLVM_LIB_OBJCOPY_WASM_WASMOBJECT_H 49