//===- 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 objFileInstances; std::map pdbInputFileInstances; std::vector importFileInstances; std::vector bitcodeFileInstances; MergeChunk *mergeChunkInstances[Log2MaxSectionAlignment + 1] = {}; /// All sources of type information in the program. std::vector tpiSourceList; void addTpiSource(TpiSource *tpi) { tpiSourceList.push_back(tpi); } std::map typeServerSourceMappings; std::map precompSourceMappings; /// List of all output sections. After output sections are finalized, this /// can be indexed by getOutputSection. std::vector 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