85a2f29fd4
Reinstate use of FakeSection class to avoid constructing SectionChunk
from unintialised coff_section in FakeSectionChunk constructor.
Issue was caused by commit 5a58b19f9c
,
"[LLD] Remove global state in lld/COFF".
96 lines
2.6 KiB
C++
96 lines
2.6 KiB
C++
//===- 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
|