
The main motivation for this refactor is to remove the subclass relationship between the InputSegment and MergeInputSegment and SyntenticMergedInputSegment so that we can use the merging classes for debug sections which are not data segments. In the process of refactoring I also remove all the virtual functions from the class hierarchy and try to reuse techniques used in the ELF linker (see `lld/ELF/InputSections.h`). Differential Revision: https://reviews.llvm.org/D102546
51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
//===- OutputSegment.h ------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLD_WASM_OUTPUT_SEGMENT_H
|
|
#define LLD_WASM_OUTPUT_SEGMENT_H
|
|
|
|
#include "InputChunks.h"
|
|
#include "lld/Common/ErrorHandler.h"
|
|
#include "llvm/Object/Wasm.h"
|
|
|
|
namespace lld {
|
|
namespace wasm {
|
|
|
|
class InputSegment;
|
|
|
|
class OutputSegment {
|
|
public:
|
|
OutputSegment(StringRef n) : name(n) {}
|
|
|
|
void addInputSegment(InputChunk *inSeg);
|
|
void finalizeInputSegments();
|
|
|
|
bool isTLS() const { return name == ".tdata"; }
|
|
|
|
StringRef name;
|
|
bool isBss = false;
|
|
uint32_t index = 0;
|
|
uint32_t linkingFlags = 0;
|
|
uint32_t initFlags = 0;
|
|
uint32_t sectionOffset = 0;
|
|
uint32_t alignment = 0;
|
|
uint64_t startVA = 0;
|
|
std::vector<InputChunk *> inputSegments;
|
|
|
|
// Sum of the size of the all the input segments
|
|
uint32_t size = 0;
|
|
|
|
// Segment header
|
|
std::string header;
|
|
};
|
|
|
|
} // namespace wasm
|
|
} // namespace lld
|
|
|
|
#endif // LLD_WASM_OUTPUT_SEGMENT_H
|