diff options
Diffstat (limited to 'lld/MachO/OutputSection.h')
-rw-r--r-- | lld/MachO/OutputSection.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lld/MachO/OutputSection.h b/lld/MachO/OutputSection.h index c526a8343afe..eb554854cc89 100644 --- a/lld/MachO/OutputSection.h +++ b/lld/MachO/OutputSection.h @@ -9,15 +9,26 @@ #ifndef LLD_MACHO_OUTPUT_SECTION_H #define LLD_MACHO_OUTPUT_SECTION_H +#include "Symbols.h" #include "lld/Common/LLVM.h" #include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/TinyPtrVector.h" + +#include <limits> namespace lld { namespace macho { +class Defined; class InputSection; class OutputSegment; +// The default order value for OutputSections that are not constructed from +// InputSections (i.e. SyntheticSections). We make it less than INT_MAX in order +// not to conflict with the ordering of zerofill sections, which must always be +// placed at the end of their segment. +constexpr int UnspecifiedInputOrder = std::numeric_limits<int>::max() - 1024; + // Output sections represent the finalized sections present within the final // linked executable. They can represent special sections (like the symbol // table), or represent coalesced sections from the various inputs given to the @@ -25,7 +36,7 @@ class OutputSegment; class OutputSection { public: enum Kind { - MergedKind, + ConcatKind, SyntheticKind, }; @@ -47,7 +58,6 @@ public: // Unneeded sections are omitted entirely (header and body). virtual bool isNeeded() const { return true; } - // Specifically finalizes addresses and section size, not content. virtual void finalize() { // TODO investigate refactoring synthetic section finalization logic into // overrides of this function. @@ -55,8 +65,16 @@ public: virtual void writeTo(uint8_t *buf) const = 0; + void assignAddressesToStartEndSymbols(); + StringRef name; + llvm::TinyPtrVector<Defined *> sectionStartSymbols; + llvm::TinyPtrVector<Defined *> sectionEndSymbols; OutputSegment *parent = nullptr; + // For output sections that don't have explicit ordering requirements, their + // output order should be based on the order of the input sections they + // contain. + int inputOrder = UnspecifiedInputOrder; uint32_t index = 0; uint64_t addr = 0; |