1 //===- COFFLinkerContext.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_COFF_COFFLinkerContext_H
10 #define LLD_COFF_COFFLinkerContext_H
14 #include "DebugTypes.h"
15 #include "InputFiles.h"
16 #include "SymbolTable.h"
18 #include "lld/Common/CommonLinkerContext.h"
19 #include "lld/Common/Timer.h"
24 class COFFLinkerContext
: public CommonLinkerContext
{
27 COFFLinkerContext(const COFFLinkerContext
&) = delete;
28 COFFLinkerContext
&operator=(const COFFLinkerContext
&) = delete;
29 ~COFFLinkerContext() = default;
31 void addTpiSource(TpiSource
*tpi
) { tpiSourceList
.push_back(tpi
); }
35 std::vector
<ObjFile
*> objFileInstances
;
36 std::map
<std::string
, PDBInputFile
*> pdbInputFileInstances
;
37 std::vector
<ImportFile
*> importFileInstances
;
38 std::vector
<BitcodeFile
*> bitcodeFileInstances
;
40 MergeChunk
*mergeChunkInstances
[Log2MaxSectionAlignment
+ 1] = {};
42 /// All sources of type information in the program.
43 std::vector
<TpiSource
*> tpiSourceList
;
45 std::map
<llvm::codeview::GUID
, TpiSource
*> typeServerSourceMappings
;
46 std::map
<uint32_t, TpiSource
*> precompSourceMappings
;
48 /// List of all output sections. After output sections are finalized, this
49 /// can be indexed by getOutputSection.
50 std::vector
<OutputSection
*> outputSections
;
52 OutputSection
*getOutputSection(const Chunk
*c
) const {
53 return c
->osidx
== 0 ? nullptr : outputSections
[c
->osidx
- 1];
56 // All timers used in the COFF linker.
64 Timer codeLayoutTimer
;
65 Timer outputCommitTimer
;
67 Timer symbolGatherTimer
;
68 Timer symbolStringsTimer
;
72 Timer totalPdbLinkTimer
;
73 Timer addObjectsTimer
;
74 Timer typeMergingTimer
;
76 Timer mergeGHashTimer
;
77 Timer symbolMergingTimer
;
78 Timer publicsLayoutTimer
;
79 Timer tpiStreamLayoutTimer
;
80 Timer diskCommitTimer
;