CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
127 lines
3.6 KiB
C++
127 lines
3.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 "PDB.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;
|
|
|
|
// A native ARM64 symbol table on ARM64X target.
|
|
std::optional<SymbolTable> hybridSymtab;
|
|
|
|
// Returns the appropriate symbol table for the specified machine type.
|
|
SymbolTable &getSymtab(llvm::COFF::MachineTypes machine) {
|
|
if (hybridSymtab && machine == ARM64)
|
|
return *hybridSymtab;
|
|
return symtab;
|
|
}
|
|
|
|
// Invoke the specified callback for each symbol table.
|
|
void forEachSymtab(std::function<void(SymbolTable &symtab)> f) {
|
|
// If present, process the native symbol table first.
|
|
if (hybridSymtab)
|
|
f(*hybridSymtab);
|
|
f(symtab);
|
|
}
|
|
|
|
// Invoke the specified callback for each active symbol table,
|
|
// skipping the native symbol table on pure ARM64EC targets.
|
|
void forEachActiveSymtab(std::function<void(SymbolTable &symtab)> f) {
|
|
if (symtab.ctx.config.machine == ARM64X)
|
|
f(*hybridSymtab);
|
|
f(symtab);
|
|
}
|
|
|
|
std::vector<ObjFile *> objFileInstances;
|
|
std::map<std::string, PDBInputFile *> pdbInputFileInstances;
|
|
std::vector<ImportFile *> importFileInstances;
|
|
std::int64_t consumedInputsSize = 0;
|
|
|
|
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;
|
|
|
|
std::optional<PDBStats> pdbStats;
|
|
|
|
Configuration config;
|
|
|
|
DynamicRelocsChunk *dynamicRelocs = nullptr;
|
|
};
|
|
|
|
} // namespace lld::coff
|
|
|
|
#endif
|