Skip to content

Commit 4c7e1a8

Browse files
committed
Auto merge of #59506 - JohnTitor:improve-mcount, r=nagisa
Use platform dependent mcount function close #59097 This pull-request is based on #57244 and [here](https://github.com/llvm-mirror/clang/search?q=MCountName&unscoped_MCountName). r? @nagisa
2 parents cee58fd + aec518a commit 4c7e1a8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+141
-40
lines changed

src/librustc_codegen_llvm/attributes.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,15 @@ pub fn set_instrument_function(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
7777
if cx.sess().instrument_mcount() {
7878
// Similar to `clang -pg` behavior. Handled by the
7979
// `post-inline-ee-instrument` LLVM pass.
80+
81+
// The function name varies on platforms.
82+
// See test/CodeGen/mcount.c in clang.
83+
let mcount_name = CString::new(
84+
cx.sess().target.target.options.target_mcount.as_str().as_bytes()).unwrap();
85+
8086
llvm::AddFunctionAttrStringValue(
8187
llfn, llvm::AttributePlace::Function,
82-
const_cstr!("instrument-function-entry-inlined"), const_cstr!("mcount"));
88+
const_cstr!("instrument-function-entry-inlined"), &mcount_name);
8389
}
8490
}
8591

src/librustc_target/spec/aarch64_unknown_linux_gnu.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
linker_flavor: LinkerFlavor::Gcc,
1818
options: TargetOptions {
1919
abi_blacklist: super::arm_base::abi_blacklist(),
20+
target_mcount: "\01_mcount".to_string(),
2021
.. base
2122
},
2223
})

src/librustc_target/spec/aarch64_unknown_linux_musl.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
linker_flavor: LinkerFlavor::Gcc,
1818
options: TargetOptions {
1919
abi_blacklist: super::arm_base::abi_blacklist(),
20+
target_mcount: "\01_mcount".to_string(),
2021
.. base
2122
},
2223
})

src/librustc_target/spec/aarch64_unknown_netbsd.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::netbsd_base::opts();
@@ -16,6 +16,9 @@ pub fn target() -> TargetResult {
1616
target_env: String::new(),
1717
target_vendor: "unknown".to_string(),
1818
linker_flavor: LinkerFlavor::Gcc,
19-
options: base,
19+
options: TargetOptions {
20+
target_mcount: "__mcount".to_string(),
21+
.. base
22+
},
2023
})
2124
}

src/librustc_target/spec/arm_unknown_linux_gnueabi.rs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
1818
options: TargetOptions {
1919
features: "+strict-align,+v6".to_string(),
2020
abi_blacklist: super::arm_base::abi_blacklist(),
21+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2122
.. base
2223
},
2324
})

src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
1818
options: TargetOptions {
1919
features: "+strict-align,+v6,+vfp2".to_string(),
2020
abi_blacklist: super::arm_base::abi_blacklist(),
21+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2122
.. base
2223
}
2324
})

src/librustc_target/spec/arm_unknown_linux_musleabi.rs

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub fn target() -> TargetResult {
2323
linker_flavor: LinkerFlavor::Gcc,
2424
options: TargetOptions {
2525
abi_blacklist: super::arm_base::abi_blacklist(),
26+
target_mcount: "\01mcount".to_string(),
2627
.. base
2728
},
2829
})

src/librustc_target/spec/arm_unknown_linux_musleabihf.rs

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub fn target() -> TargetResult {
2323
linker_flavor: LinkerFlavor::Gcc,
2424
options: TargetOptions {
2525
abi_blacklist: super::arm_base::abi_blacklist(),
26+
target_mcount: "\01mcount".to_string(),
2627
.. base
2728
},
2829
})

src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub fn target() -> TargetResult {
1919
// Atomic operations provided by compiler-builtins
2020
max_atomic_width: Some(32),
2121
abi_blacklist: super::arm_base::abi_blacklist(),
22+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2223
.. base
2324
}
2425
})

src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub fn target() -> TargetResult {
1919
// Atomic operations provided by compiler-builtins
2020
max_atomic_width: Some(32),
2121
abi_blacklist: super::arm_base::abi_blacklist(),
22+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2223
.. base
2324
}
2425
})

src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub fn target() -> TargetResult {
2222
// Atomic operations provided by compiler-builtins
2323
max_atomic_width: Some(32),
2424
abi_blacklist: super::arm_base::abi_blacklist(),
25+
target_mcount: "\01mcount".to_string(),
2526
.. base
2627
}
2728
})

src/librustc_target/spec/armv6_unknown_freebsd.rs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
1818
features: "+v6,+vfp2".to_string(),
1919
max_atomic_width: Some(64),
2020
abi_blacklist: super::arm_base::abi_blacklist(),
21+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2122
.. base
2223
}
2324
})

src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
1818
options: TargetOptions {
1919
features: "+v6,+vfp2".to_string(),
2020
abi_blacklist: super::arm_base::abi_blacklist(),
21+
target_mcount: "__mcount".to_string(),
2122
.. base
2223
}
2324
})

src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::cloudabi_base::opts();
@@ -19,6 +19,9 @@ pub fn target() -> TargetResult {
1919
target_env: String::new(),
2020
target_vendor: "unknown".to_string(),
2121
linker_flavor: LinkerFlavor::Gcc,
22-
options: base,
22+
options: TargetOptions {
23+
target_mcount: "\01mcount".to_string(),
24+
.. base
25+
},
2326
})
2427
}

src/librustc_target/spec/armv7_unknown_freebsd.rs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
1818
features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(),
1919
max_atomic_width: Some(64),
2020
abi_blacklist: super::arm_base::abi_blacklist(),
21+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2122
.. base
2223
}
2324
})

src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub fn target() -> TargetResult {
2323
cpu: "generic".to_string(),
2424
max_atomic_width: Some(64),
2525
abi_blacklist: super::arm_base::abi_blacklist(),
26+
target_mcount: "\01__gnu_mcount_nc".to_string(),
2627
.. base
2728
}
2829
})

src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub fn target() -> TargetResult {
2626
cpu: "generic".to_string(),
2727
max_atomic_width: Some(64),
2828
abi_blacklist: super::arm_base::abi_blacklist(),
29+
target_mcount: "\01mcount".to_string(),
2930
.. base
3031
}
3132
})

src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub fn target() -> TargetResult {
1919
cpu: "generic".to_string(),
2020
max_atomic_width: Some(64),
2121
abi_blacklist: super::arm_base::abi_blacklist(),
22+
target_mcount: "__mcount".to_string(),
2223
.. base
2324
}
2425
})

src/librustc_target/spec/i686_apple_darwin.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::apple_base::opts();
@@ -19,6 +19,9 @@ pub fn target() -> TargetResult {
1919
target_env: String::new(),
2020
target_vendor: "apple".to_string(),
2121
linker_flavor: LinkerFlavor::Gcc,
22-
options: base,
22+
options: TargetOptions {
23+
target_mcount: "\01mcount".to_string(),
24+
.. base
25+
},
2326
})
2427
}

src/librustc_target/spec/i686_unknown_netbsd.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::netbsd_base::opts();
@@ -18,6 +18,9 @@ pub fn target() -> TargetResult {
1818
target_env: String::new(),
1919
target_vendor: "unknown".to_string(),
2020
linker_flavor: LinkerFlavor::Gcc,
21-
options: base,
21+
options: TargetOptions {
22+
target_mcount: "__mcount".to_string(),
23+
.. base
24+
},
2225
})
2326
}

src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips64r2".to_string(),
1818
features: "+mips64r2".to_string(),
1919
max_atomic_width: Some(64),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mips64el_unknown_linux_gnuabi64.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips64r2".to_string(),
1818
features: "+mips64r2".to_string(),
1919
max_atomic_width: Some(64),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mips_unknown_linux_gnu.rs

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub fn target() -> TargetResult {
1616
cpu: "mips32r2".to_string(),
1717
features: "+mips32r2,+fpxx,+nooddspreg".to_string(),
1818
max_atomic_width: Some(32),
19+
target_mcount: "_mcount".to_string(),
1920

2021
..super::linux_base::opts()
2122
},

src/librustc_target/spec/mips_unknown_linux_musl.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::linux_musl_base::opts();
@@ -17,6 +17,9 @@ pub fn target() -> TargetResult {
1717
target_env: "musl".to_string(),
1818
target_vendor: "unknown".to_string(),
1919
linker_flavor: LinkerFlavor::Gcc,
20-
options: base,
20+
options: TargetOptions {
21+
target_mcount: "_mcount".to_string(),
22+
.. base
23+
},
2124
})
2225
}

src/librustc_target/spec/mips_unknown_linux_uclibc.rs

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub fn target() -> TargetResult {
1616
cpu: "mips32r2".to_string(),
1717
features: "+mips32r2,+soft-float".to_string(),
1818
max_atomic_width: Some(32),
19+
target_mcount: "_mcount".to_string(),
1920

2021
..super::linux_base::opts()
2122
},

src/librustc_target/spec/mipsel_unknown_linux_gnu.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips32r2".to_string(),
1818
features: "+mips32r2,+fpxx,+nooddspreg".to_string(),
1919
max_atomic_width: Some(32),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mipsel_unknown_linux_musl.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::linux_musl_base::opts();
@@ -17,6 +17,9 @@ pub fn target() -> TargetResult {
1717
target_env: "musl".to_string(),
1818
target_vendor: "unknown".to_string(),
1919
linker_flavor: LinkerFlavor::Gcc,
20-
options: base,
20+
options: TargetOptions {
21+
target_mcount: "_mcount".to_string(),
22+
.. base
23+
},
2124
})
2225
}

src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips32r2".to_string(),
1818
features: "+mips32r2,+soft-float".to_string(),
1919
max_atomic_width: Some(32),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub fn target() -> TargetResult {
1616
cpu: "mips32r6".to_string(),
1717
features: "+mips32r6".to_string(),
1818
max_atomic_width: Some(32),
19+
target_mcount: "_mcount".to_string(),
1920

2021
..super::linux_base::opts()
2122
},

src/librustc_target/spec/mipsisa32r6el_unknown_linux_gnu.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips32r6".to_string(),
1818
features: "+mips32r6".to_string(),
1919
max_atomic_width: Some(32),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mipsisa64r6_unknown_linux_gnuabi64.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips64r6".to_string(),
1818
features: "+mips64r6".to_string(),
1919
max_atomic_width: Some(64),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mipsisa64r6el_unknown_linux_gnuabi64.rs

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
1717
cpu: "mips64r6".to_string(),
1818
features: "+mips64r6".to_string(),
1919
max_atomic_width: Some(64),
20+
target_mcount: "_mcount".to_string(),
2021

2122
..super::linux_base::opts()
2223
},

src/librustc_target/spec/mod.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,10 @@ pub struct TargetOptions {
761761
/// to opt out. The default is "aliases".
762762
///
763763
/// Workaround for: https://github.com/rust-lang/rust/issues/57356
764-
pub merge_functions: MergeFunctions
764+
pub merge_functions: MergeFunctions,
765+
766+
/// Use platform dependent mcount function
767+
pub target_mcount: String
765768
}
766769

767770
impl Default for TargetOptions {
@@ -845,6 +848,7 @@ impl Default for TargetOptions {
845848
simd_types_indirect: true,
846849
override_export_symbols: None,
847850
merge_functions: MergeFunctions::Aliases,
851+
target_mcount: "mcount".to_string(),
848852
}
849853
}
850854
}
@@ -1150,6 +1154,7 @@ impl Target {
11501154
key!(simd_types_indirect, bool);
11511155
key!(override_export_symbols, opt_list);
11521156
key!(merge_functions, MergeFunctions)?;
1157+
key!(target_mcount);
11531158

11541159
if let Some(array) = obj.find("abi-blacklist").and_then(Json::as_array) {
11551160
for name in array.iter().filter_map(|abi| abi.as_string()) {
@@ -1364,6 +1369,7 @@ impl ToJson for Target {
13641369
target_option_val!(simd_types_indirect);
13651370
target_option_val!(override_export_symbols);
13661371
target_option_val!(merge_functions);
1372+
target_option_val!(target_mcount);
13671373

13681374
if default.abi_blacklist != self.options.abi_blacklist {
13691375
d.insert("abi-blacklist".to_string(), self.options.abi_blacklist.iter()

src/librustc_target/spec/powerpc64_unknown_freebsd.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::freebsd_base::opts();
@@ -17,6 +17,9 @@ pub fn target() -> TargetResult {
1717
target_env: String::new(),
1818
target_vendor: "unknown".to_string(),
1919
linker_flavor: LinkerFlavor::Gcc,
20-
options: base,
20+
options: TargetOptions {
21+
target_mcount: "_mcount".to_string(),
22+
.. base
23+
},
2124
})
2225
}

src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::spec::{LinkerFlavor, Target, TargetResult, RelroLevel};
1+
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult, RelroLevel};
22

33
pub fn target() -> TargetResult {
44
let mut base = super::linux_base::opts();
@@ -21,6 +21,9 @@ pub fn target() -> TargetResult {
2121
target_env: "gnu".to_string(),
2222
target_vendor: "unknown".to_string(),
2323
linker_flavor: LinkerFlavor::Gcc,
24-
options: base,
24+
options: TargetOptions {
25+
target_mcount: "_mcount".to_string(),
26+
.. base
27+
},
2528
})
2629
}

0 commit comments

Comments
 (0)