Skip to content

Commit 270c1a4

Browse files
committed
Revert "Embed GDB pretty printers in rlibs and dylibs"
This reverts commit b4d923c.
1 parent 8fb40f7 commit 270c1a4

File tree

4 files changed

+33
-23
lines changed

4 files changed

+33
-23
lines changed

compiler/rustc_codegen_llvm/src/debuginfo/gdb.rs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
// .debug_gdb_scripts binary section.
22

3-
use std::collections::BTreeSet;
43
use std::ffi::CString;
54

5+
use rustc_codegen_ssa::base::collect_debugger_visualizers_transitive;
66
use rustc_codegen_ssa::traits::*;
77
use rustc_hir::def_id::LOCAL_CRATE;
88
use rustc_middle::bug;
99
use rustc_middle::middle::debugger_visualizer::DebuggerVisualizerType;
10-
use rustc_session::config::DebugInfo;
10+
use rustc_session::config::{CrateType, DebugInfo};
1111

1212
use crate::builder::Builder;
1313
use crate::common::CodegenCx;
@@ -51,14 +51,10 @@ pub(crate) fn get_or_insert_gdb_debug_scripts_section_global<'ll>(
5151

5252
// Next, add the pretty printers that were specified via the `#[debugger_visualizer]`
5353
// attribute.
54-
let visualizers = cx
55-
.tcx
56-
.debugger_visualizers(LOCAL_CRATE)
57-
.iter()
58-
.filter(|visualizer| {
59-
visualizer.visualizer_type == DebuggerVisualizerType::GdbPrettyPrinter
60-
})
61-
.collect::<BTreeSet<_>>();
54+
let visualizers = collect_debugger_visualizers_transitive(
55+
cx.tcx,
56+
DebuggerVisualizerType::GdbPrettyPrinter,
57+
);
6258
let crate_name = cx.tcx.crate_name(LOCAL_CRATE);
6359
for (index, visualizer) in visualizers.iter().enumerate() {
6460
// 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>(
9591
}
9692

9793
pub(crate) fn needs_gdb_debug_scripts_section(cx: &CodegenCx<'_, '_>) -> bool {
98-
cx.sess().opts.debuginfo != DebugInfo::None && cx.sess().target.emit_debug_gdb_scripts
94+
// We collect pretty printers transitively for all crates, so we make sure
95+
// that the section is only emitted for leaf crates.
96+
let embed_visualizers = cx.tcx.crate_types().iter().any(|&crate_type| match crate_type {
97+
CrateType::Executable | CrateType::Cdylib | CrateType::Staticlib | CrateType::Sdylib => {
98+
// These are crate types for which we will embed pretty printers since they
99+
// are treated as leaf crates.
100+
true
101+
}
102+
CrateType::ProcMacro => {
103+
// We could embed pretty printers for proc macro crates too but it does not
104+
// seem like a good default, since this is a rare use case and we don't
105+
// want to slow down the common case.
106+
false
107+
}
108+
CrateType::Rlib | CrateType::Dylib => {
109+
// Don't embed pretty printers for these crate types; the compiler
110+
// can see the `#[debug_visualizer]` attributes when using the
111+
// library, and emitting `.debug_gdb_scripts` regardless would
112+
// break `#![omit_gdb_pretty_printer_section]`.
113+
false
114+
}
115+
});
116+
117+
cx.sess().opts.debuginfo != DebugInfo::None
118+
&& cx.sess().target.emit_debug_gdb_scripts
119+
&& embed_visualizers
99120
}

compiler/rustc_codegen_ssa/src/base.rs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -609,15 +609,7 @@ pub fn collect_debugger_visualizers_transitive(
609609
) -> BTreeSet<DebuggerVisualizerFile> {
610610
tcx.debugger_visualizers(LOCAL_CRATE)
611611
.iter()
612-
.chain(
613-
tcx.crates(())
614-
.iter()
615-
.filter(|&cnum| {
616-
let used_crate_source = tcx.used_crate_source(*cnum);
617-
used_crate_source.rlib.is_some() || used_crate_source.rmeta.is_some()
618-
})
619-
.flat_map(|&cnum| tcx.debugger_visualizers(cnum)),
620-
)
612+
.chain(tcx.crates(()).iter().flat_map(|&cnum| tcx.debugger_visualizers(cnum)))
621613
.filter(|visualizer| visualizer.visualizer_type == visualizer_type)
622614
.cloned()
623615
.collect::<BTreeSet<_>>()

src/tools/compiletest/src/directives/directive_names.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ pub(crate) const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
6868
"ignore-gnu",
6969
"ignore-haiku",
7070
"ignore-horizon",
71-
"ignore-i586-unknown-linux-gnu",
7271
"ignore-i686-pc-windows-gnu",
7372
"ignore-i686-pc-windows-msvc",
7473
"ignore-illumos",

tests/debuginfo/embedded-visualizer.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//@ compile-flags:-g
22
//@ ignore-lldb
33
//@ ignore-windows-gnu: #128981
4-
//@ ignore-musl: linker too old in CI
5-
//@ ignore-i586-unknown-linux-gnu: linker too old in CI
64

75
// === CDB TESTS ==================================================================================
86

0 commit comments

Comments
 (0)