From 6e984cd4bf5535d707b9eeacd023637f6031f1cb Mon Sep 17 00:00:00 2001 From: WANG Rui Date: Sun, 29 Mar 2026 21:37:07 +0800 Subject: [PATCH] loongarch: use "_mcount" as the default mcount symbol Set the `mcount` field to "_mcount" for all LoongArch targets to match Clang/GCC behavior [1]. This fixes linking failures when using `-Z instrument-mcount`, where the runtime expects "_mcount" instead of "mcount". [1] https://github.com/llvm/llvm-project/blob/main/clang/lib/Basic/Targets/LoongArch.h#L60 --- .../rustc_target/src/spec/targets/loongarch32_unknown_none.rs | 1 + .../src/spec/targets/loongarch32_unknown_none_softfloat.rs | 1 + .../src/spec/targets/loongarch64_unknown_linux_gnu.rs | 1 + .../src/spec/targets/loongarch64_unknown_linux_musl.rs | 1 + .../src/spec/targets/loongarch64_unknown_linux_ohos.rs | 1 + .../rustc_target/src/spec/targets/loongarch64_unknown_none.rs | 1 + .../src/spec/targets/loongarch64_unknown_none_softfloat.rs | 1 + 7 files changed, 7 insertions(+) diff --git a/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none.rs b/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none.rs index 2a53d4256b76..7e074b73919f 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none.rs @@ -22,6 +22,7 @@ pub(crate) fn target() -> Target { linker: Some("rust-lld".into()), llvm_abiname: LlvmAbi::Ilp32d, max_atomic_width: Some(32), + mcount: "_mcount".into(), relocation_model: RelocModel::Static, panic_strategy: PanicStrategy::Abort, ..Default::default() diff --git a/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none_softfloat.rs b/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none_softfloat.rs index e9a9260db8ea..4e6807012e89 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none_softfloat.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch32_unknown_none_softfloat.rs @@ -23,6 +23,7 @@ pub(crate) fn target() -> Target { linker: Some("rust-lld".into()), llvm_abiname: LlvmAbi::Ilp32s, max_atomic_width: Some(32), + mcount: "_mcount".into(), relocation_model: RelocModel::Static, panic_strategy: PanicStrategy::Abort, ..Default::default() diff --git a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs index 180d064570ab..8dad88bfc46f 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs @@ -20,6 +20,7 @@ pub(crate) fn target() -> Target { features: "+f,+d,+lsx,+relax".into(), llvm_abiname: LlvmAbi::Lp64d, max_atomic_width: Some(64), + mcount: "_mcount".into(), supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::LEAK diff --git a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_musl.rs b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_musl.rs index 246e28a243af..91a028988548 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_musl.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_musl.rs @@ -20,6 +20,7 @@ pub(crate) fn target() -> Target { features: "+f,+d,+lsx,+relax".into(), llvm_abiname: LlvmAbi::Lp64d, max_atomic_width: Some(64), + mcount: "_mcount".into(), crt_static_default: false, supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::CFI diff --git a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_ohos.rs b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_ohos.rs index 461a7bd26268..679235673488 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_ohos.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_ohos.rs @@ -20,6 +20,7 @@ pub(crate) fn target() -> Target { features: "+f,+d,+lsx,+relax".into(), llvm_abiname: LlvmAbi::Lp64d, max_atomic_width: Some(64), + mcount: "_mcount".into(), supported_sanitizers: SanitizerSet::ADDRESS | SanitizerSet::CFI | SanitizerSet::LEAK diff --git a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs index 2a9f0dcfd2ef..2d3b217e7789 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs @@ -22,6 +22,7 @@ pub(crate) fn target() -> Target { linker: Some("rust-lld".into()), llvm_abiname: LlvmAbi::Lp64d, max_atomic_width: Some(64), + mcount: "_mcount".into(), relocation_model: RelocModel::Static, panic_strategy: PanicStrategy::Abort, code_model: Some(CodeModel::Medium), diff --git a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs index efed9778caab..f5e2fb4eb832 100644 --- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs +++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs @@ -23,6 +23,7 @@ pub(crate) fn target() -> Target { linker: Some("rust-lld".into()), llvm_abiname: LlvmAbi::Lp64s, max_atomic_width: Some(64), + mcount: "_mcount".into(), relocation_model: RelocModel::Static, panic_strategy: PanicStrategy::Abort, code_model: Some(CodeModel::Medium),