From f67d2287e7f4b81ade508a9eb750ccc364c4ffc9 Mon Sep 17 00:00:00 2001 From: Aliaksei Syrel Date: Tue, 30 Jun 2026 11:34:16 +0200 Subject: [PATCH 1/2] Export quoted symbols in a version script --- compiler/rustc_codegen_ssa/src/back/linker.rs | 4 ++-- .../export-quoted-symbols-version-script/lib.rs | 4 ++++ .../export-quoted-symbols-version-script/rmake.rs | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/run-make/export-quoted-symbols-version-script/lib.rs create mode 100644 tests/run-make/export-quoted-symbols-version-script/rmake.rs diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs index 4041bfaa24cf0..807a064ae8b4f 100644 --- a/compiler/rustc_codegen_ssa/src/back/linker.rs +++ b/compiler/rustc_codegen_ssa/src/back/linker.rs @@ -881,8 +881,8 @@ impl<'a> Linker for GccLinker<'a> { if !symbols.is_empty() { writeln!(f, " global:")?; for (sym, _) in symbols { - debug!(" {sym};"); - writeln!(f, " {sym};")?; + debug!(" \"{sym}\";"); + writeln!(f, " \"{sym}\";")?; } } writeln!(f, "\n local:\n *;\n}};")?; diff --git a/tests/run-make/export-quoted-symbols-version-script/lib.rs b/tests/run-make/export-quoted-symbols-version-script/lib.rs new file mode 100644 index 0000000000000..b20d67eb521b5 --- /dev/null +++ b/tests/run-make/export-quoted-symbols-version-script/lib.rs @@ -0,0 +1,4 @@ +#![crate_type = "cdylib"] + +#[unsafe(export_name = "some$foo::bar$thing/path.rs:42")] +pub extern "C" fn exported_symbol_with_version_script_special_characters() {} diff --git a/tests/run-make/export-quoted-symbols-version-script/rmake.rs b/tests/run-make/export-quoted-symbols-version-script/rmake.rs new file mode 100644 index 0000000000000..48d8e25703905 --- /dev/null +++ b/tests/run-make/export-quoted-symbols-version-script/rmake.rs @@ -0,0 +1,10 @@ +//@ only-linux +//@ needs-dynamic-linking + +extern crate run_make_support; + +use run_make_support::rustc; + +fn main() { + rustc().input("lib.rs").run(); +} From 87751578bb902b57d57db95f595a294b18e0d3fe Mon Sep 17 00:00:00 2001 From: Aliaksei Syrel Date: Tue, 30 Jun 2026 12:07:49 +0200 Subject: [PATCH 2/2] Extend double quoted symbols test with an assertion --- .../export-quoted-symbols-version-script/rmake.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/run-make/export-quoted-symbols-version-script/rmake.rs b/tests/run-make/export-quoted-symbols-version-script/rmake.rs index 48d8e25703905..fea833c97a41b 100644 --- a/tests/run-make/export-quoted-symbols-version-script/rmake.rs +++ b/tests/run-make/export-quoted-symbols-version-script/rmake.rs @@ -1,10 +1,19 @@ //@ only-linux -//@ needs-dynamic-linking +//@ needs-crate-type: cdylib extern crate run_make_support; -use run_make_support::rustc; +use run_make_support::object::Object; +use run_make_support::{dynamic_lib_name, object, rfs, rustc}; + +const EXPORTED_SYMBOL: &[u8] = b"some$foo::bar$thing/path.rs:42"; fn main() { rustc().input("lib.rs").run(); + + let contents = rfs::read(dynamic_lib_name("lib")); + let object = object::File::parse(contents.as_slice()).unwrap(); + let matching_exports = + object.exports().unwrap().iter().filter(|x| x.name() == EXPORTED_SYMBOL).count(); + assert_eq!(matching_exports, 1); }