[lld] [LLD][COFF] Add support for `--time-trace` (PR #68236)
Reid Kleckner via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 5 10:41:23 PDT 2023
================
@@ -650,46 +664,52 @@ void Writer::writePEChecksum() {
// The main function of the writer.
void Writer::run() {
- ScopedTimer t1(ctx.codeLayoutTimer);
-
- createImportTables();
- createSections();
- appendImportThunks();
- // Import thunks must be added before the Control Flow Guard tables are added.
- createMiscChunks();
- createExportTable();
- mergeSections();
- removeUnusedSections();
- finalizeAddresses();
- removeEmptySections();
- assignOutputSectionIndices();
- setSectionPermissions();
- createSymbolAndStringTable();
-
- if (fileSize > UINT32_MAX)
- fatal("image size (" + Twine(fileSize) + ") " +
- "exceeds maximum allowable size (" + Twine(UINT32_MAX) + ")");
-
- openFile(ctx.config.outputFile);
- if (ctx.config.is64()) {
- writeHeader<pe32plus_header>();
- } else {
- writeHeader<pe32_header>();
- }
- writeSections();
- checkLoadConfig();
- sortExceptionTable();
-
- // Fix up the alignment in the TLS Directory's characteristic field,
- // if a specific alignment value is needed
- if (tlsAlignment)
- fixTlsAlignment();
+ {
+ llvm::TimeTraceScope timeScope("Write PE");
+ ScopedTimer t1(ctx.codeLayoutTimer);
+
+ createImportTables();
+ createSections();
+ appendImportThunks();
+ // Import thunks must be added before the Control Flow Guard tables are
+ // added.
+ createMiscChunks();
+ createExportTable();
+ mergeSections();
+ removeUnusedSections();
+ finalizeAddresses();
+ removeEmptySections();
+ assignOutputSectionIndices();
+ setSectionPermissions();
+ createSymbolAndStringTable();
+
+ if (fileSize > UINT32_MAX)
+ fatal("image size (" + Twine(fileSize) + ") " +
+ "exceeds maximum allowable size (" + Twine(UINT32_MAX) + ")");
+
+ openFile(ctx.config.outputFile);
+ if (ctx.config.is64()) {
+ writeHeader<pe32plus_header>();
+ } else {
+ writeHeader<pe32_header>();
+ }
+ writeSections();
+ checkLoadConfig();
+ sortExceptionTable();
- t1.stop();
+ // Fix up the alignment in the TLS Directory's characteristic field,
+ // if a specific alignment value is needed
+ if (tlsAlignment)
+ fixTlsAlignment();
+ }
if (!ctx.config.pdbPath.empty() && ctx.config.debug) {
assert(buildId);
createPDB(ctx, sectionTable, buildId->buildId);
+
+ // Manually end this profile point to measure ~PDBLinker().
+ if (getTimeTraceProfilerInstance() != nullptr)
----------------
rnk wrote:
Please move this into `createPDB` by creating an extra scope where the PDBLinker is created, so that the explicit begin / end calls can appear immediately one after another so this detail doesn't leak out of `createPDB`.
https://github.com/llvm/llvm-project/pull/68236
More information about the llvm-commits
mailing list