150
|
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
|
252
|
16 namespace lld::wasm {
|
150
|
17
|
|
18 class InputSegment;
|
|
19
|
|
20 class OutputSegment {
|
|
21 public:
|
|
22 OutputSegment(StringRef n) : name(n) {}
|
|
23
|
221
|
24 void addInputSegment(InputChunk *inSeg);
|
|
25 void finalizeInputSegments();
|
236
|
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.
|
|
30 bool requiredInBinary() const { return !isBss || config->emitBssSegments; }
|
221
|
31
|
|
32 bool isTLS() const { return name == ".tdata"; }
|
150
|
33
|
|
34 StringRef name;
|
|
35 bool isBss = false;
|
|
36 uint32_t index = 0;
|
221
|
37 uint32_t linkingFlags = 0;
|
150
|
38 uint32_t initFlags = 0;
|
|
39 uint32_t sectionOffset = 0;
|
|
40 uint32_t alignment = 0;
|
221
|
41 uint64_t startVA = 0;
|
|
42 std::vector<InputChunk *> inputSegments;
|
150
|
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
|
252
|
51 } // namespace lld::wasm
|
150
|
52
|
|
53 #endif // LLD_WASM_OUTPUT_SEGMENT_H
|