1//===- Object.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_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H 10#define LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_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 18namespace llvm { 19namespace objcopy { 20namespace wasm { 21 22struct 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 StringRef Name; 27 ArrayRef<uint8_t> Contents; 28}; 29 30struct Object { 31 llvm::wasm::WasmObjectHeader Header; 32 // For now don't discriminate between kinds of sections. 33 std::vector<Section> Sections; 34 35 void addSectionWithOwnedContents(Section NewSection, 36 std::unique_ptr<MemoryBuffer> &&Content); 37 void removeSections(function_ref<bool(const Section &)> ToRemove); 38 39private: 40 std::vector<std::unique_ptr<MemoryBuffer>> OwnedContents; 41}; 42 43} // end namespace wasm 44} // end namespace objcopy 45} // end namespace llvm 46 47#endif // LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H 48