1//===- OutputSegment.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 LLD_WASM_OUTPUT_SEGMENT_H 10#define LLD_WASM_OUTPUT_SEGMENT_H 11 12#include "InputChunks.h" 13#include "lld/Common/ErrorHandler.h" 14#include "llvm/Object/Wasm.h" 15 16namespace lld { 17namespace wasm { 18 19class InputSegment; 20 21class OutputSegment { 22public: 23 OutputSegment(StringRef n) : name(n) {} 24 25 void addInputSegment(InputChunk *inSeg); 26 void finalizeInputSegments(); 27 // In most circumstances BSS segments don't need to be written 28 // to the output binary. However if the memory is imported, and 29 // we can't use memory.fill during startup (due to lack of bulk 30 // memory feature) then we include BSS segments verbatim. 31 bool requiredInBinary() const { return !isBss || config->emitBssSegments; } 32 33 bool isTLS() const { return name == ".tdata"; } 34 35 StringRef name; 36 bool isBss = false; 37 uint32_t index = 0; 38 uint32_t linkingFlags = 0; 39 uint32_t initFlags = 0; 40 uint32_t sectionOffset = 0; 41 uint32_t alignment = 0; 42 uint64_t startVA = 0; 43 std::vector<InputChunk *> inputSegments; 44 45 // Sum of the size of the all the input segments 46 uint32_t size = 0; 47 48 // Segment header 49 std::string header; 50}; 51 52} // namespace wasm 53} // namespace lld 54 55#endif // LLD_WASM_OUTPUT_SEGMENT_H 56