| //===- COFFLinkerContext.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_COFF_COFFLINKERCONTEXT_H |
| #define LLD_COFF_COFFLINKERCONTEXT_H |
| |
| #include "Chunks.h" |
| #include "Config.h" |
| #include "DebugTypes.h" |
| #include "Driver.h" |
| #include "InputFiles.h" |
| #include "SymbolTable.h" |
| #include "Writer.h" |
| #include "lld/Common/CommonLinkerContext.h" |
| #include "lld/Common/Timer.h" |
| |
| namespace lld::coff { |
| |
| class COFFLinkerContext : public CommonLinkerContext { |
| public: |
| COFFLinkerContext(); |
| COFFLinkerContext(const COFFLinkerContext &) = delete; |
| COFFLinkerContext &operator=(const COFFLinkerContext &) = delete; |
| ~COFFLinkerContext() = default; |
| |
| LinkerDriver driver; |
| SymbolTable symtab; |
| COFFOptTable optTable; |
| |
| std::vector<ObjFile *> objFileInstances; |
| std::map<std::string, PDBInputFile *> pdbInputFileInstances; |
| std::vector<ImportFile *> importFileInstances; |
| std::vector<BitcodeFile *> bitcodeFileInstances; |
| |
| MergeChunk *mergeChunkInstances[Log2MaxSectionAlignment + 1] = {}; |
| |
| /// All sources of type information in the program. |
| std::vector<TpiSource *> tpiSourceList; |
| |
| void addTpiSource(TpiSource *tpi) { tpiSourceList.push_back(tpi); } |
| |
| std::map<llvm::codeview::GUID, TpiSource *> typeServerSourceMappings; |
| std::map<uint32_t, TpiSource *> precompSourceMappings; |
| |
| /// List of all output sections. After output sections are finalized, this |
| /// can be indexed by getOutputSection. |
| std::vector<OutputSection *> outputSections; |
| |
| OutputSection *getOutputSection(const Chunk *c) const { |
| return c->osidx == 0 ? nullptr : outputSections[c->osidx - 1]; |
| } |
| |
| // Fake sections for parsing bitcode files. |
| FakeSection ltoTextSection; |
| FakeSection ltoDataSection; |
| FakeSectionChunk ltoTextSectionChunk; |
| FakeSectionChunk ltoDataSectionChunk; |
| |
| // All timers used in the COFF linker. |
| Timer rootTimer; |
| Timer inputFileTimer; |
| Timer ltoTimer; |
| Timer gcTimer; |
| Timer icfTimer; |
| |
| // Writer timers. |
| Timer codeLayoutTimer; |
| Timer outputCommitTimer; |
| Timer totalMapTimer; |
| Timer symbolGatherTimer; |
| Timer symbolStringsTimer; |
| Timer writeTimer; |
| |
| // PDB timers. |
| Timer totalPdbLinkTimer; |
| Timer addObjectsTimer; |
| Timer typeMergingTimer; |
| Timer loadGHashTimer; |
| Timer mergeGHashTimer; |
| Timer symbolMergingTimer; |
| Timer publicsLayoutTimer; |
| Timer tpiStreamLayoutTimer; |
| Timer diskCommitTimer; |
| |
| Configuration config; |
| }; |
| |
| } // namespace lld::coff |
| |
| #endif |