//===- 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_MACHO_OUTPUT_SEGMENT_H
#define LLD_MACHO_OUTPUT_SEGMENT_H

#include "OutputSection.h"
#include "Symbols.h"
#include "lld/Common/LLVM.h"
#include "llvm/ADT/TinyPtrVector.h"

#include <limits>
#include <vector>

namespace lld {
namespace macho {

namespace segment_names {

constexpr const char dataConst[] = "__DATA_CONST";
constexpr const char dataDirty[] = "__DATA_DIRTY";
constexpr const char data[] = "__DATA";
constexpr const char dwarf[] = "__DWARF";
constexpr const char import[] = "__IMPORT";
constexpr const char ld[] = "__LD"; // output only with -r
constexpr const char linkEdit[] = "__LINKEDIT";
constexpr const char llvm[] = "__LLVM";
constexpr const char pageZero[] = "__PAGEZERO";
constexpr const char textExec[] = "__TEXT_EXEC";
constexpr const char text[] = "__TEXT";

} // namespace segment_names

class OutputSection;
class InputSection;

class OutputSegment {
public:
  void addOutputSection(OutputSection *os);
  void sortOutputSections();
  void assignAddressesToStartEndSymbols();

  const std::vector<OutputSection *> &getSections() const { return sections; }
  size_t numNonHiddenSections() const;

  uint64_t fileOff = 0;
  uint64_t fileSize = 0;
  uint64_t addr = 0;
  uint64_t vmSize = 0;
  int inputOrder = UnspecifiedInputOrder;
  StringRef name;
  uint32_t maxProt = 0;
  uint32_t initProt = 0;
  uint8_t index;

  llvm::TinyPtrVector<Defined *> segmentStartSymbols;
  llvm::TinyPtrVector<Defined *> segmentEndSymbols;

private:
  std::vector<OutputSection *> sections;
};

extern std::vector<OutputSegment *> outputSegments;

void sortOutputSegments();
void resetOutputSegments();

OutputSegment *getOrCreateOutputSegment(StringRef name);

} // namespace macho
} // namespace lld

#endif
