xref: /freebsd-src/contrib/llvm-project/lld/COFF/COFFLinkerContext.cpp (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
1349cc55cSDimitry Andric //===- COFFContext.cpp ----------------------------------------------------===//
2349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
4349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5349cc55cSDimitry Andric //
6349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
7349cc55cSDimitry Andric //
8349cc55cSDimitry Andric // Description
9349cc55cSDimitry Andric //
10349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
11349cc55cSDimitry Andric 
12349cc55cSDimitry Andric #include "COFFLinkerContext.h"
13*bdd1243dSDimitry Andric #include "Symbols.h"
14349cc55cSDimitry Andric #include "lld/Common/Memory.h"
15*bdd1243dSDimitry Andric #include "llvm/BinaryFormat/COFF.h"
16349cc55cSDimitry Andric #include "llvm/DebugInfo/CodeView/TypeHashing.h"
17*bdd1243dSDimitry Andric #include "llvm/Demangle/Demangle.h"
18349cc55cSDimitry Andric 
19*bdd1243dSDimitry Andric namespace lld::coff {
COFFLinkerContext()20349cc55cSDimitry Andric COFFLinkerContext::COFFLinkerContext()
21*bdd1243dSDimitry Andric     : driver(*this), symtab(*this),
22*bdd1243dSDimitry Andric       ltoTextSection(llvm::COFF::IMAGE_SCN_MEM_EXECUTE),
23*bdd1243dSDimitry Andric       ltoDataSection(llvm::COFF::IMAGE_SCN_CNT_INITIALIZED_DATA),
24*bdd1243dSDimitry Andric       ltoTextSectionChunk(&ltoTextSection.section),
25*bdd1243dSDimitry Andric       ltoDataSectionChunk(&ltoDataSection.section),
26*bdd1243dSDimitry Andric       rootTimer("Total Linking Time"),
27349cc55cSDimitry Andric       inputFileTimer("Input File Reading", rootTimer),
28349cc55cSDimitry Andric       ltoTimer("LTO", rootTimer), gcTimer("GC", rootTimer),
29349cc55cSDimitry Andric       icfTimer("ICF", rootTimer), codeLayoutTimer("Code Layout", rootTimer),
30349cc55cSDimitry Andric       outputCommitTimer("Commit Output File", rootTimer),
31349cc55cSDimitry Andric       totalMapTimer("MAP Emission (Cumulative)", rootTimer),
32349cc55cSDimitry Andric       symbolGatherTimer("Gather Symbols", totalMapTimer),
33349cc55cSDimitry Andric       symbolStringsTimer("Build Symbol Strings", totalMapTimer),
34349cc55cSDimitry Andric       writeTimer("Write to File", totalMapTimer),
35349cc55cSDimitry Andric       totalPdbLinkTimer("PDB Emission (Cumulative)", rootTimer),
36349cc55cSDimitry Andric       addObjectsTimer("Add Objects", totalPdbLinkTimer),
37349cc55cSDimitry Andric       typeMergingTimer("Type Merging", addObjectsTimer),
38349cc55cSDimitry Andric       loadGHashTimer("Global Type Hashing", addObjectsTimer),
39349cc55cSDimitry Andric       mergeGHashTimer("GHash Type Merging", addObjectsTimer),
40349cc55cSDimitry Andric       symbolMergingTimer("Symbol Merging", addObjectsTimer),
41349cc55cSDimitry Andric       publicsLayoutTimer("Publics Stream Layout", totalPdbLinkTimer),
42349cc55cSDimitry Andric       tpiStreamLayoutTimer("TPI Stream Layout", totalPdbLinkTimer),
43349cc55cSDimitry Andric       diskCommitTimer("Commit to Disk", totalPdbLinkTimer) {}
44*bdd1243dSDimitry Andric } // namespace lld::coff
45