blob: 059d4aeddc6e56616bbd94f5b0507b0340048496 [file] [log] [blame]
//===- COFFLinkerContext.h --------------------------------------*- C++ -*-===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#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 {
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