Skip to content

Commit

Permalink
Rollup merge of #59506 - JohnTitor:improve-mcount, r=nagisa
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Centril committed Mar 31, 2019
2 parents eafcb95 + aec518a commit e3fb1aa
Show file tree
Hide file tree
Showing 47 changed files with 141 additions and 40 deletions.
8 changes: 7 additions & 1 deletion src/librustc_codegen_llvm/attributes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,15 @@ pub fn set_instrument_function(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
if cx.sess().instrument_mcount() {
// Similar to `clang -pg` behavior. Handled by the
// `post-inline-ee-instrument` LLVM pass.

// The function name varies on platforms.
// See test/CodeGen/mcount.c in clang.
let mcount_name = CString::new(
cx.sess().target.target.options.target_mcount.as_str().as_bytes()).unwrap();

llvm::AddFunctionAttrStringValue(
llfn, llvm::AttributePlace::Function,
const_cstr!("instrument-function-entry-inlined"), const_cstr!("mcount"));
const_cstr!("instrument-function-entry-inlined"), &mcount_name);
}
}

Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/aarch64_unknown_linux_gnu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
linker_flavor: LinkerFlavor::Gcc,
options: TargetOptions {
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01_mcount".to_string(),
.. base
},
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/aarch64_unknown_linux_musl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
linker_flavor: LinkerFlavor::Gcc,
options: TargetOptions {
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01_mcount".to_string(),
.. base
},
})
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_target/spec/aarch64_unknown_netbsd.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::netbsd_base::opts();
Expand All @@ -16,6 +16,9 @@ pub fn target() -> TargetResult {
target_env: String::new(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "__mcount".to_string(),
.. base
},
})
}
1 change: 1 addition & 0 deletions src/librustc_target/spec/arm_unknown_linux_gnueabi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
options: TargetOptions {
features: "+strict-align,+v6".to_string(),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
},
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
options: TargetOptions {
features: "+strict-align,+v6,+vfp2".to_string(),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/arm_unknown_linux_musleabi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub fn target() -> TargetResult {
linker_flavor: LinkerFlavor::Gcc,
options: TargetOptions {
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01mcount".to_string(),
.. base
},
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/arm_unknown_linux_musleabihf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub fn target() -> TargetResult {
linker_flavor: LinkerFlavor::Gcc,
options: TargetOptions {
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01mcount".to_string(),
.. base
},
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ pub fn target() -> TargetResult {
// Atomic operations provided by compiler-builtins
max_atomic_width: Some(32),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ pub fn target() -> TargetResult {
// Atomic operations provided by compiler-builtins
max_atomic_width: Some(32),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pub fn target() -> TargetResult {
// Atomic operations provided by compiler-builtins
max_atomic_width: Some(32),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01mcount".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv6_unknown_freebsd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
features: "+v6,+vfp2".to_string(),
max_atomic_width: Some(64),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
options: TargetOptions {
features: "+v6,+vfp2".to_string(),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "__mcount".to_string(),
.. base
}
})
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::cloudabi_base::opts();
Expand All @@ -19,6 +19,9 @@ pub fn target() -> TargetResult {
target_env: String::new(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "\01mcount".to_string(),
.. base
},
})
}
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv7_unknown_freebsd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub fn target() -> TargetResult {
features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(),
max_atomic_width: Some(64),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub fn target() -> TargetResult {
cpu: "generic".to_string(),
max_atomic_width: Some(64),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01__gnu_mcount_nc".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub fn target() -> TargetResult {
cpu: "generic".to_string(),
max_atomic_width: Some(64),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "\01mcount".to_string(),
.. base
}
})
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ pub fn target() -> TargetResult {
cpu: "generic".to_string(),
max_atomic_width: Some(64),
abi_blacklist: super::arm_base::abi_blacklist(),
target_mcount: "__mcount".to_string(),
.. base
}
})
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_target/spec/i686_apple_darwin.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::apple_base::opts();
Expand All @@ -19,6 +19,9 @@ pub fn target() -> TargetResult {
target_env: String::new(),
target_vendor: "apple".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "\01mcount".to_string(),
.. base
},
})
}
7 changes: 5 additions & 2 deletions src/librustc_target/spec/i686_unknown_netbsd.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::netbsd_base::opts();
Expand All @@ -18,6 +18,9 @@ pub fn target() -> TargetResult {
target_env: String::new(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "__mcount".to_string(),
.. base
},
})
}
1 change: 1 addition & 0 deletions src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips64r2".to_string(),
features: "+mips64r2".to_string(),
max_atomic_width: Some(64),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips64r2".to_string(),
features: "+mips64r2".to_string(),
max_atomic_width: Some(64),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/mips_unknown_linux_gnu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub fn target() -> TargetResult {
cpu: "mips32r2".to_string(),
features: "+mips32r2,+fpxx,+nooddspreg".to_string(),
max_atomic_width: Some(32),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_target/spec/mips_unknown_linux_musl.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::linux_musl_base::opts();
Expand All @@ -17,6 +17,9 @@ pub fn target() -> TargetResult {
target_env: "musl".to_string(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "_mcount".to_string(),
.. base
},
})
}
1 change: 1 addition & 0 deletions src/librustc_target/spec/mips_unknown_linux_uclibc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub fn target() -> TargetResult {
cpu: "mips32r2".to_string(),
features: "+mips32r2,+soft-float".to_string(),
max_atomic_width: Some(32),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/mipsel_unknown_linux_gnu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips32r2".to_string(),
features: "+mips32r2,+fpxx,+nooddspreg".to_string(),
max_atomic_width: Some(32),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_target/spec/mipsel_unknown_linux_musl.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::linux_musl_base::opts();
Expand All @@ -17,6 +17,9 @@ pub fn target() -> TargetResult {
target_env: "musl".to_string(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "_mcount".to_string(),
.. base
},
})
}
1 change: 1 addition & 0 deletions src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips32r2".to_string(),
features: "+mips32r2,+soft-float".to_string(),
max_atomic_width: Some(32),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
1 change: 1 addition & 0 deletions src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pub fn target() -> TargetResult {
cpu: "mips32r6".to_string(),
features: "+mips32r6".to_string(),
max_atomic_width: Some(32),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips32r6".to_string(),
features: "+mips32r6".to_string(),
max_atomic_width: Some(32),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips64r6".to_string(),
features: "+mips64r6".to_string(),
max_atomic_width: Some(64),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub fn target() -> TargetResult {
cpu: "mips64r6".to_string(),
features: "+mips64r6".to_string(),
max_atomic_width: Some(64),
target_mcount: "_mcount".to_string(),

..super::linux_base::opts()
},
Expand Down
8 changes: 7 additions & 1 deletion src/librustc_target/spec/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,10 @@ pub struct TargetOptions {
/// to opt out. The default is "aliases".
///
/// Workaround for: https://github.com/rust-lang/rust/issues/57356
pub merge_functions: MergeFunctions
pub merge_functions: MergeFunctions,

/// Use platform dependent mcount function
pub target_mcount: String
}

impl Default for TargetOptions {
Expand Down Expand Up @@ -845,6 +848,7 @@ impl Default for TargetOptions {
simd_types_indirect: true,
override_export_symbols: None,
merge_functions: MergeFunctions::Aliases,
target_mcount: "mcount".to_string(),
}
}
}
Expand Down Expand Up @@ -1150,6 +1154,7 @@ impl Target {
key!(simd_types_indirect, bool);
key!(override_export_symbols, opt_list);
key!(merge_functions, MergeFunctions)?;
key!(target_mcount);

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

if default.abi_blacklist != self.options.abi_blacklist {
d.insert("abi-blacklist".to_string(), self.options.abi_blacklist.iter()
Expand Down
7 changes: 5 additions & 2 deletions src/librustc_target/spec/powerpc64_unknown_freebsd.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult};

pub fn target() -> TargetResult {
let mut base = super::freebsd_base::opts();
Expand All @@ -17,6 +17,9 @@ pub fn target() -> TargetResult {
target_env: String::new(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "_mcount".to_string(),
.. base
},
})
}
7 changes: 5 additions & 2 deletions src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::spec::{LinkerFlavor, Target, TargetResult, RelroLevel};
use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult, RelroLevel};

pub fn target() -> TargetResult {
let mut base = super::linux_base::opts();
Expand All @@ -21,6 +21,9 @@ pub fn target() -> TargetResult {
target_env: "gnu".to_string(),
target_vendor: "unknown".to_string(),
linker_flavor: LinkerFlavor::Gcc,
options: base,
options: TargetOptions {
target_mcount: "_mcount".to_string(),
.. base
},
})
}

0 comments on commit e3fb1aa

Please sign in to comment.