Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lld/COFF/COFFLinkerContext.h
34870 views
1
//===- COFFLinkerContext.h --------------------------------------*- C++ -*-===//
2
//
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
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLD_COFF_COFFLINKERCONTEXT_H
10
#define LLD_COFF_COFFLINKERCONTEXT_H
11
12
#include "Chunks.h"
13
#include "Config.h"
14
#include "DebugTypes.h"
15
#include "Driver.h"
16
#include "InputFiles.h"
17
#include "SymbolTable.h"
18
#include "Writer.h"
19
#include "lld/Common/CommonLinkerContext.h"
20
#include "lld/Common/Timer.h"
21
22
namespace lld::coff {
23
24
class COFFLinkerContext : public CommonLinkerContext {
25
public:
26
COFFLinkerContext();
27
COFFLinkerContext(const COFFLinkerContext &) = delete;
28
COFFLinkerContext &operator=(const COFFLinkerContext &) = delete;
29
~COFFLinkerContext() = default;
30
31
LinkerDriver driver;
32
SymbolTable symtab;
33
COFFOptTable optTable;
34
35
std::vector<ObjFile *> objFileInstances;
36
std::map<std::string, PDBInputFile *> pdbInputFileInstances;
37
std::vector<ImportFile *> importFileInstances;
38
std::vector<BitcodeFile *> bitcodeFileInstances;
39
40
MergeChunk *mergeChunkInstances[Log2MaxSectionAlignment + 1] = {};
41
42
/// All sources of type information in the program.
43
std::vector<TpiSource *> tpiSourceList;
44
45
void addTpiSource(TpiSource *tpi) { tpiSourceList.push_back(tpi); }
46
47
std::map<llvm::codeview::GUID, TpiSource *> typeServerSourceMappings;
48
std::map<uint32_t, TpiSource *> precompSourceMappings;
49
50
/// List of all output sections. After output sections are finalized, this
51
/// can be indexed by getOutputSection.
52
std::vector<OutputSection *> outputSections;
53
54
OutputSection *getOutputSection(const Chunk *c) const {
55
return c->osidx == 0 ? nullptr : outputSections[c->osidx - 1];
56
}
57
58
// Fake sections for parsing bitcode files.
59
FakeSection ltoTextSection;
60
FakeSection ltoDataSection;
61
FakeSectionChunk ltoTextSectionChunk;
62
FakeSectionChunk ltoDataSectionChunk;
63
64
// All timers used in the COFF linker.
65
Timer rootTimer;
66
Timer inputFileTimer;
67
Timer ltoTimer;
68
Timer gcTimer;
69
Timer icfTimer;
70
71
// Writer timers.
72
Timer codeLayoutTimer;
73
Timer outputCommitTimer;
74
Timer totalMapTimer;
75
Timer symbolGatherTimer;
76
Timer symbolStringsTimer;
77
Timer writeTimer;
78
79
// PDB timers.
80
Timer totalPdbLinkTimer;
81
Timer addObjectsTimer;
82
Timer typeMergingTimer;
83
Timer loadGHashTimer;
84
Timer mergeGHashTimer;
85
Timer symbolMergingTimer;
86
Timer publicsLayoutTimer;
87
Timer tpiStreamLayoutTimer;
88
Timer diskCommitTimer;
89
90
Configuration config;
91
};
92
93
} // namespace lld::coff
94
95
#endif
96
97