Commit b2369207 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull rust fixes from Miguel Ojeda:

 - Two changes to prepare for the future Rust 1.91.0 release (expected
   2025-10-30, currently in nightly): a target specification format
   change and a renamed, soon-to-be-stabilized 'core' function.

* tag 'rust-fixes-6.17-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux:
  rust: support Rust >= 1.91.0 target spec
  rust: use the new name Location::file_as_c_str() in Rust >= 1.91.0
parents d1d10cea 8851e27d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -146,6 +146,9 @@ config RUSTC_HAS_UNNECESSARY_TRANSMUTES
config RUSTC_HAS_FILE_WITH_NUL
	def_bool RUSTC_VERSION >= 108900

config RUSTC_HAS_FILE_AS_C_STR
	def_bool RUSTC_VERSION >= 109100

config PAHOLE_VERSION
	int
	default $(shell,$(srctree)/scripts/pahole-version.sh $(PAHOLE))
+10 −5
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ macro_rules! asm {

/// Gets the C string file name of a [`Location`].
///
/// If `file_with_nul()` is not available, returns a string that warns about it.
/// If `Location::file_as_c_str()` is not available, returns a string that warns about it.
///
/// [`Location`]: core::panic::Location
///
@@ -310,8 +310,8 @@ macro_rules! asm {
///     let caller = core::panic::Location::caller();
///
///     // Output:
///     // - A path like "rust/kernel/example.rs" if file_with_nul() is available.
///     // - "<Location::file_with_nul() not supported>" otherwise.
///     // - A path like "rust/kernel/example.rs" if `file_as_c_str()` is available.
///     // - "<Location::file_as_c_str() not supported>" otherwise.
///     let caller_file = file_from_location(caller);
///
///     // Prints out the message with caller's file name.
@@ -326,7 +326,12 @@ macro_rules! asm {
/// ```
#[inline]
pub fn file_from_location<'a>(loc: &'a core::panic::Location<'a>) -> &'a core::ffi::CStr {
    #[cfg(CONFIG_RUSTC_HAS_FILE_WITH_NUL)]
    #[cfg(CONFIG_RUSTC_HAS_FILE_AS_C_STR)]
    {
        loc.file_as_c_str()
    }

    #[cfg(all(CONFIG_RUSTC_HAS_FILE_WITH_NUL, not(CONFIG_RUSTC_HAS_FILE_AS_C_STR)))]
    {
        loc.file_with_nul()
    }
@@ -334,6 +339,6 @@ pub fn file_from_location<'a>(loc: &'a core::panic::Location<'a>) -> &'a core::f
    #[cfg(not(CONFIG_RUSTC_HAS_FILE_WITH_NUL))]
    {
        let _ = loc;
        c"<Location::file_with_nul() not supported>"
        c"<Location::file_as_c_str() not supported>"
    }
}
+10 −2
Original line number Diff line number Diff line
@@ -225,7 +225,11 @@ fn main() {
        ts.push("features", features);
        ts.push("llvm-target", "x86_64-linux-gnu");
        ts.push("supported-sanitizers", ["kcfi", "kernel-address"]);
        if cfg.rustc_version_atleast(1, 91, 0) {
            ts.push("target-pointer-width", 64);
        } else {
            ts.push("target-pointer-width", "64");
        }
    } else if cfg.has("X86_32") {
        // This only works on UML, as i386 otherwise needs regparm support in rustc
        if !cfg.has("UML") {
@@ -245,7 +249,11 @@ fn main() {
        }
        ts.push("features", features);
        ts.push("llvm-target", "i386-unknown-linux-gnu");
        if cfg.rustc_version_atleast(1, 91, 0) {
            ts.push("target-pointer-width", 32);
        } else {
            ts.push("target-pointer-width", "32");
        }
    } else if cfg.has("LOONGARCH") {
        panic!("loongarch uses the builtin rustc loongarch64-unknown-none-softfloat target");
    } else {