From 7c98b3cfe30d3c4e3ba6ad27bc711819e34382d6 Mon Sep 17 00:00:00 2001 From: Jamie Cunliffe Date: Thu, 8 Jul 2021 16:50:29 +0100 Subject: [PATCH] Keep metadata when using gc-sections with profile-generate. When building with profile-generate request that metadata is kept during the gc_sections call, as this can sometimes strip out profile data. This missing information in the prof files can then result in missing functions when using the profile information. --- compiler/rustc_codegen_ssa/src/back/link.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 59447e9de13..c9a0ef841bb 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -1931,7 +1931,12 @@ fn add_order_independent_options( // Try to strip as much out of the generated object by removing unused // sections if possible. See more comments in linker.rs if !sess.link_dead_code() { - let keep_metadata = crate_type == CrateType::Dylib; + // If PGO is enabled sometimes gc_sections will remove the profile data section + // as it appears to be unused. This can then cause the PGO profile file to lose + // some functions. If we are generating a profile we shouldn't strip those metadata + // sections to ensure we have all the data for PGO. + let keep_metadata = + crate_type == CrateType::Dylib || sess.opts.cg.profile_generate.enabled(); cmd.gc_sections(keep_metadata); } -- 2.44.0