1 //===- WasmObject.h ---------------------------------------------*- C++ -*-===// 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_LIB_OBJCOPY_WASM_WASMOBJECT_H 10 #define LLVM_LIB_OBJCOPY_WASM_WASMOBJECT_H 11 12 #include "llvm/ADT/ArrayRef.h" 13 #include "llvm/ADT/StringRef.h" 14 #include "llvm/Object/Wasm.h" 15 #include "llvm/Support/MemoryBuffer.h" 16 #include <vector> 17 18 namespace llvm { 19 namespace objcopy { 20 namespace wasm { 21 22 struct Section { 23 // For now, each section is only an opaque binary blob with no distinction 24 // between custom and known sections. 25 uint8_t SectionType; 26 std::optional<uint8_t> HeaderSecSizeEncodingLen; 27 StringRef Name; 28 ArrayRef<uint8_t> Contents; 29 }; 30 31 struct Object { 32 llvm::wasm::WasmObjectHeader Header; 33 // For now don't discriminate between kinds of sections. 34 std::vector<Section> Sections; 35 36 void addSectionWithOwnedContents(Section NewSection, 37 std::unique_ptr<MemoryBuffer> &&Content); 38 void removeSections(function_ref<bool(const Section &)> ToRemove); 39 40 private: 41 std::vector<std::unique_ptr<MemoryBuffer>> OwnedContents; 42 }; 43 44 } // end namespace wasm 45 } // end namespace objcopy 46 } // end namespace llvm 47 48 #endif // LLVM_LIB_OBJCOPY_WASM_WASMOBJECT_H 49