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