1 //===- OutputSegment.h ------------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLD_MACHO_OUTPUT_SEGMENT_H
10 #define LLD_MACHO_OUTPUT_SEGMENT_H
12 #include "OutputSection.h"
14 #include "lld/Common/LLVM.h"
15 #include "llvm/ADT/TinyPtrVector.h"
20 namespace lld::macho
{
22 namespace segment_names
{
24 constexpr const char dataConst
[] = "__DATA_CONST";
25 constexpr const char dataDirty
[] = "__DATA_DIRTY";
26 constexpr const char data
[] = "__DATA";
27 constexpr const char dwarf
[] = "__DWARF";
28 constexpr const char import
[] = "__IMPORT";
29 constexpr const char ld
[] = "__LD"; // output only with -r
30 constexpr const char linkEdit
[] = "__LINKEDIT";
31 constexpr const char llvm
[] = "__LLVM";
32 constexpr const char pageZero
[] = "__PAGEZERO";
33 constexpr const char textExec
[] = "__TEXT_EXEC";
34 constexpr const char text
[] = "__TEXT";
36 } // namespace segment_names
43 void addOutputSection(OutputSection
*os
);
44 void sortOutputSections();
45 void assignAddressesToStartEndSymbols();
47 const std::vector
<OutputSection
*> &getSections() const { return sections
; }
48 size_t numNonHiddenSections() const;
51 uint64_t fileSize
= 0;
54 int inputOrder
= UnspecifiedInputOrder
;
57 uint32_t initProt
= 0;
60 llvm::TinyPtrVector
<Defined
*> segmentStartSymbols
;
61 llvm::TinyPtrVector
<Defined
*> segmentEndSymbols
;
64 std::vector
<OutputSection
*> sections
;
67 extern std::vector
<OutputSegment
*> outputSegments
;
69 void sortOutputSegments();
70 void resetOutputSegments();
72 OutputSegment
*getOrCreateOutputSegment(StringRef name
);
74 } // namespace lld::macho