xref: /openbsd-src/gnu/llvm/lld/wasm/OutputSegment.h (revision dfe94b169149f14cc1aee2cf6dad58a8d9a1860c)
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 {
17 namespace wasm {
18 
19 class InputSegment;
20 
21 class OutputSegment {
22 public:
OutputSegment(StringRef n)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.
requiredInBinary()31   bool requiredInBinary() const { return !isBss || config->emitBssSegments; }
32 
isTLS()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