Revert "Embed GDB pretty printers in rlibs and dylibs"

This reverts commit b4d923cea0.
This commit is contained in:
bjorn3
2025-08-06 18:00:58 +00:00
parent 8fb40f798a
commit 270c1a4d24
4 changed files with 33 additions and 23 deletions

View File

@@ -1,13 +1,13 @@
// .debug_gdb_scripts binary section.
use std::collections::BTreeSet;
use std::ffi::CString;
use rustc_codegen_ssa::base::collect_debugger_visualizers_transitive;
use rustc_codegen_ssa::traits::*;
use rustc_hir::def_id::LOCAL_CRATE;
use rustc_middle::bug;
use rustc_middle::middle::debugger_visualizer::DebuggerVisualizerType;
use rustc_session::config::DebugInfo;
use rustc_session::config::{CrateType, DebugInfo};
use crate::builder::Builder;
use crate::common::CodegenCx;
@@ -51,14 +51,10 @@ pub(crate) fn get_or_insert_gdb_debug_scripts_section_global<'ll>(
// Next, add the pretty printers that were specified via the `#[debugger_visualizer]`
// attribute.
let visualizers = cx
.tcx
.debugger_visualizers(LOCAL_CRATE)
.iter()
.filter(|visualizer| {
visualizer.visualizer_type == DebuggerVisualizerType::GdbPrettyPrinter
})
.collect::<BTreeSet<_>>();
let visualizers = collect_debugger_visualizers_transitive(
cx.tcx,
DebuggerVisualizerType::GdbPrettyPrinter,
);
let crate_name = cx.tcx.crate_name(LOCAL_CRATE);
for (index, visualizer) in visualizers.iter().enumerate() {
// The initial byte `4` instructs GDB that the following pretty printer
@@ -95,5 +91,30 @@ pub(crate) fn get_or_insert_gdb_debug_scripts_section_global<'ll>(
}
pub(crate) fn needs_gdb_debug_scripts_section(cx: &CodegenCx<'_, '_>) -> bool {
cx.sess().opts.debuginfo != DebugInfo::None && cx.sess().target.emit_debug_gdb_scripts
// We collect pretty printers transitively for all crates, so we make sure
// that the section is only emitted for leaf crates.
let embed_visualizers = cx.tcx.crate_types().iter().any(|&crate_type| match crate_type {
CrateType::Executable | CrateType::Cdylib | CrateType::Staticlib | CrateType::Sdylib => {
// These are crate types for which we will embed pretty printers since they
// are treated as leaf crates.
true
}
CrateType::ProcMacro => {
// We could embed pretty printers for proc macro crates too but it does not
// seem like a good default, since this is a rare use case and we don't
// want to slow down the common case.
false
}
CrateType::Rlib | CrateType::Dylib => {
// Don't embed pretty printers for these crate types; the compiler
// can see the `#[debug_visualizer]` attributes when using the
// library, and emitting `.debug_gdb_scripts` regardless would
// break `#![omit_gdb_pretty_printer_section]`.
false
}
});
cx.sess().opts.debuginfo != DebugInfo::None
&& cx.sess().target.emit_debug_gdb_scripts
&& embed_visualizers
}