about summary refs log tree commit diff
path: root/tests/codegen-llvm/gdb_debug_script_load.rs
diff options
context:
space:
mode:
authorSebastian Poeplau <poeplau@adacore.com>2025-08-01 12:39:50 +0200
committerSebastian Poeplau <poeplau@adacore.com>2025-08-05 10:55:07 +0200
commit868bdde25b030e0b71a29a5dbc04a891036e702e (patch)
tree4fdbccbcc0f1760014fba2ae3e771f76bb065c04 /tests/codegen-llvm/gdb_debug_script_load.rs
parent0f353363965ebf05e0757f7679c800b39c51a07e (diff)
downloadrust-868bdde25b030e0b71a29a5dbc04a891036e702e.tar.gz
rust-868bdde25b030e0b71a29a5dbc04a891036e702e.zip
Preserve the .debug_gdb_scripts section
Make sure that compiler and linker don't optimize the section's contents
away by adding the global holding the data to "llvm.used". The volatile
load in the main shim is retained because "llvm.used", which translates
to SHF_GNU_RETAIN on ELF targets, requires a reasonably recent linker;
emitting the volatile load ensures compatibility with older linkers, at
least when libstd is used.

Pretty printers in dylib dependencies are now emitted by the main crate
instead of the dylib; apart from matching how rlibs are handled, this
approach has the advantage that `omit_gdb_pretty_printer_section` keeps
working with dylib dependencies.
Diffstat (limited to 'tests/codegen-llvm/gdb_debug_script_load.rs')
-rw-r--r--tests/codegen-llvm/gdb_debug_script_load.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/tests/codegen-llvm/gdb_debug_script_load.rs b/tests/codegen-llvm/gdb_debug_script_load.rs
index 3e92eba10b1..90f2be41cf2 100644
--- a/tests/codegen-llvm/gdb_debug_script_load.rs
+++ b/tests/codegen-llvm/gdb_debug_script_load.rs
@@ -9,6 +9,8 @@
 #![feature(lang_items)]
 #![no_std]
 
+// CHECK: @llvm.used = {{.+}} @__rustc_debug_gdb_scripts_section
+
 #[panic_handler]
 fn panic_handler(_: &core::panic::PanicInfo) -> ! {
     loop {}
@@ -22,7 +24,7 @@ extern "C" fn rust_eh_personality() {
 // Needs rustc to generate `main` as that's where the magic load is inserted.
 // IOW, we cannot write this test with `#![no_main]`.
 // CHECK-LABEL: @main
-// CHECK: load volatile i8, {{.+}} @__rustc_debug_gdb_scripts_section__
+// CHECK: load volatile i8, {{.+}} @__rustc_debug_gdb_scripts_section
 
 #[lang = "start"]
 fn lang_start<T: 'static>(