about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki OKUSHI <huyuumi.dev@gmail.com>2019-03-30 18:50:19 +0900
committerYuki OKUSHI <huyuumi.dev@gmail.com>2019-03-30 18:50:19 +0900
commit8381cbab1a80b2c71df79fb8c33f480cfbca52bb (patch)
tree35973d86945f08e87707f7e03fae879cc883ce32
parent261a91519d57590283b250ea9dc1d924b01d4dd6 (diff)
downloadrust-8381cbab1a80b2c71df79fb8c33f480cfbca52bb.tar.gz
rust-8381cbab1a80b2c71df79fb8c33f480cfbca52bb.zip
Add target_mcount option
-rw-r--r--src/librustc_target/spec/aarch64_unknown_linux_gnu.rs1
-rw-r--r--src/librustc_target/spec/aarch64_unknown_linux_musl.rs1
-rw-r--r--src/librustc_target/spec/aarch64_unknown_netbsd.rs7
-rw-r--r--src/librustc_target/spec/arm_unknown_linux_gnueabi.rs1
-rw-r--r--src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs1
-rw-r--r--src/librustc_target/spec/arm_unknown_linux_musleabi.rs1
-rw-r--r--src/librustc_target/spec/arm_unknown_linux_musleabihf.rs1
-rw-r--r--src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs1
-rw-r--r--src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs1
-rw-r--r--src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs1
-rw-r--r--src/librustc_target/spec/armv6_unknown_freebsd.rs1
-rw-r--r--src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs1
-rw-r--r--src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs7
-rw-r--r--src/librustc_target/spec/armv7_unknown_freebsd.rs1
-rw-r--r--src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs1
-rw-r--r--src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs1
-rw-r--r--src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs1
-rw-r--r--src/librustc_target/spec/i686_apple_darwin.rs7
-rw-r--r--src/librustc_target/spec/i686_unknown_netbsd.rs7
-rw-r--r--src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs1
-rw-r--r--src/librustc_target/spec/mips64el_unknown_linux_gnuabi64.rs1
-rw-r--r--src/librustc_target/spec/mips_unknown_linux_gnu.rs1
-rw-r--r--src/librustc_target/spec/mips_unknown_linux_musl.rs7
-rw-r--r--src/librustc_target/spec/mips_unknown_linux_uclibc.rs1
-rw-r--r--src/librustc_target/spec/mipsel_unknown_linux_gnu.rs1
-rw-r--r--src/librustc_target/spec/mipsel_unknown_linux_musl.rs7
-rw-r--r--src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs1
-rw-r--r--src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs1
-rw-r--r--src/librustc_target/spec/mipsisa32r6el_unknown_linux_gnu.rs1
-rw-r--r--src/librustc_target/spec/mipsisa64r6_unknown_linux_gnuabi64.rs1
-rw-r--r--src/librustc_target/spec/mipsisa64r6el_unknown_linux_gnuabi64.rs1
-rw-r--r--src/librustc_target/spec/mod.rs8
-rw-r--r--src/librustc_target/spec/powerpc64_unknown_freebsd.rs7
-rw-r--r--src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs7
-rw-r--r--src/librustc_target/spec/powerpc64_unknown_linux_musl.rs7
-rw-r--r--src/librustc_target/spec/powerpc64le_unknown_linux_gnu.rs7
-rw-r--r--src/librustc_target/spec/powerpc64le_unknown_linux_musl.rs7
-rw-r--r--src/librustc_target/spec/powerpc_unknown_linux_gnu.rs7
-rw-r--r--src/librustc_target/spec/powerpc_unknown_linux_gnuspe.rs7
-rw-r--r--src/librustc_target/spec/powerpc_unknown_linux_musl.rs7
-rw-r--r--src/librustc_target/spec/powerpc_unknown_netbsd.rs7
-rw-r--r--src/librustc_target/spec/sparc64_unknown_netbsd.rs7
-rw-r--r--src/librustc_target/spec/x86_64_apple_darwin.rs7
-rw-r--r--src/librustc_target/spec/x86_64_rumprun_netbsd.rs7
-rw-r--r--src/librustc_target/spec/x86_64_unknown_netbsd.rs7
45 files changed, 127 insertions, 39 deletions
diff --git a/src/librustc_target/spec/aarch64_unknown_linux_gnu.rs b/src/librustc_target/spec/aarch64_unknown_linux_gnu.rs
index e772d8b532c..59a28573641 100644
--- a/src/librustc_target/spec/aarch64_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/aarch64_unknown_linux_gnu.rs
@@ -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
         },
     })
diff --git a/src/librustc_target/spec/aarch64_unknown_linux_musl.rs b/src/librustc_target/spec/aarch64_unknown_linux_musl.rs
index 8123ee82ed5..781b1322f5a 100644
--- a/src/librustc_target/spec/aarch64_unknown_linux_musl.rs
+++ b/src/librustc_target/spec/aarch64_unknown_linux_musl.rs
@@ -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
         },
     })
diff --git a/src/librustc_target/spec/aarch64_unknown_netbsd.rs b/src/librustc_target/spec/aarch64_unknown_netbsd.rs
index 47ae08ade9a..455cbebb91e 100644
--- a/src/librustc_target/spec/aarch64_unknown_netbsd.rs
+++ b/src/librustc_target/spec/aarch64_unknown_netbsd.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs b/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs
index f291818ba80..1173d18634e 100644
--- a/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs
+++ b/src/librustc_target/spec/arm_unknown_linux_gnueabi.rs
@@ -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
         },
     })
diff --git a/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs b/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs
index 32b509d9721..6fc7c46be3b 100644
--- a/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs
+++ b/src/librustc_target/spec/arm_unknown_linux_gnueabihf.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/arm_unknown_linux_musleabi.rs b/src/librustc_target/spec/arm_unknown_linux_musleabi.rs
index 7637577e7e8..7a2a4e85e4a 100644
--- a/src/librustc_target/spec/arm_unknown_linux_musleabi.rs
+++ b/src/librustc_target/spec/arm_unknown_linux_musleabi.rs
@@ -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
         },
     })
diff --git a/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs b/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs
index 9def151b3ef..b7aa1952cb0 100644
--- a/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs
+++ b/src/librustc_target/spec/arm_unknown_linux_musleabihf.rs
@@ -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
         },
     })
diff --git a/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs b/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs
index 7cd4b14cdeb..59c15f1610d 100644
--- a/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs
+++ b/src/librustc_target/spec/armv4t_unknown_linux_gnueabi.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs b/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs
index 15f61482771..a1a61a69d05 100644
--- a/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs
+++ b/src/librustc_target/spec/armv5te_unknown_linux_gnueabi.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs b/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs
index 74915b942ea..9b44a54715e 100644
--- a/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs
+++ b/src/librustc_target/spec/armv5te_unknown_linux_musleabi.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv6_unknown_freebsd.rs b/src/librustc_target/spec/armv6_unknown_freebsd.rs
index 39886a16a74..e706c8281d2 100644
--- a/src/librustc_target/spec/armv6_unknown_freebsd.rs
+++ b/src/librustc_target/spec/armv6_unknown_freebsd.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs b/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs
index e460b6c574a..b056776bdfb 100644
--- a/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs
+++ b/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs b/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs
index a6c7fb537c7..70d4985ab86 100644
--- a/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs
+++ b/src/librustc_target/spec/armv7_unknown_cloudabi_eabihf.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/armv7_unknown_freebsd.rs b/src/librustc_target/spec/armv7_unknown_freebsd.rs
index ba63fd2bf05..0f9ee5d44a9 100644
--- a/src/librustc_target/spec/armv7_unknown_freebsd.rs
+++ b/src/librustc_target/spec/armv7_unknown_freebsd.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs b/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs
index f16215433c7..afba6f608ee 100644
--- a/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs
+++ b/src/librustc_target/spec/armv7_unknown_linux_gnueabihf.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs b/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs
index 45a26966b71..516d0401adf 100644
--- a/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs
+++ b/src/librustc_target/spec/armv7_unknown_linux_musleabihf.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs b/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs
index 44e2636e918..e2d55e9317b 100644
--- a/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs
+++ b/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs
@@ -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
         }
     })
diff --git a/src/librustc_target/spec/i686_apple_darwin.rs b/src/librustc_target/spec/i686_apple_darwin.rs
index c8a61296d33..a82ff33ce1d 100644
--- a/src/librustc_target/spec/i686_apple_darwin.rs
+++ b/src/librustc_target/spec/i686_apple_darwin.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/i686_unknown_netbsd.rs b/src/librustc_target/spec/i686_unknown_netbsd.rs
index e8a9f29ea5f..99130e93dad 100644
--- a/src/librustc_target/spec/i686_unknown_netbsd.rs
+++ b/src/librustc_target/spec/i686_unknown_netbsd.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs b/src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs
index 3b38e64050f..b2ea8a6f388 100644
--- a/src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs
+++ b/src/librustc_target/spec/mips64_unknown_linux_gnuabi64.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mips64el_unknown_linux_gnuabi64.rs b/src/librustc_target/spec/mips64el_unknown_linux_gnuabi64.rs
index 0f6cd86d616..48aea4a39b0 100644
--- a/src/librustc_target/spec/mips64el_unknown_linux_gnuabi64.rs
+++ b/src/librustc_target/spec/mips64el_unknown_linux_gnuabi64.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mips_unknown_linux_gnu.rs b/src/librustc_target/spec/mips_unknown_linux_gnu.rs
index b4d29c5fbea..e360abdb38d 100644
--- a/src/librustc_target/spec/mips_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/mips_unknown_linux_gnu.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mips_unknown_linux_musl.rs b/src/librustc_target/spec/mips_unknown_linux_musl.rs
index c56c6e38229..3f5428de950 100644
--- a/src/librustc_target/spec/mips_unknown_linux_musl.rs
+++ b/src/librustc_target/spec/mips_unknown_linux_musl.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/mips_unknown_linux_uclibc.rs b/src/librustc_target/spec/mips_unknown_linux_uclibc.rs
index cb02769c7df..8116b8c9cc8 100644
--- a/src/librustc_target/spec/mips_unknown_linux_uclibc.rs
+++ b/src/librustc_target/spec/mips_unknown_linux_uclibc.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mipsel_unknown_linux_gnu.rs b/src/librustc_target/spec/mipsel_unknown_linux_gnu.rs
index ed49ddd4993..7e9d8cd942a 100644
--- a/src/librustc_target/spec/mipsel_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/mipsel_unknown_linux_gnu.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mipsel_unknown_linux_musl.rs b/src/librustc_target/spec/mipsel_unknown_linux_musl.rs
index bcc49cf5ffe..56ad2940feb 100644
--- a/src/librustc_target/spec/mipsel_unknown_linux_musl.rs
+++ b/src/librustc_target/spec/mipsel_unknown_linux_musl.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs b/src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs
index 205f328a24c..a8152011efa 100644
--- a/src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs
+++ b/src/librustc_target/spec/mipsel_unknown_linux_uclibc.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs b/src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs
index f4729145849..36b83c63fca 100644
--- a/src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/mipsisa32r6_unknown_linux_gnu.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mipsisa32r6el_unknown_linux_gnu.rs b/src/librustc_target/spec/mipsisa32r6el_unknown_linux_gnu.rs
index f4f98d33571..717ae3f1d20 100644
--- a/src/librustc_target/spec/mipsisa32r6el_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/mipsisa32r6el_unknown_linux_gnu.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mipsisa64r6_unknown_linux_gnuabi64.rs b/src/librustc_target/spec/mipsisa64r6_unknown_linux_gnuabi64.rs
index 7faed3adc79..3f7d233e55f 100644
--- a/src/librustc_target/spec/mipsisa64r6_unknown_linux_gnuabi64.rs
+++ b/src/librustc_target/spec/mipsisa64r6_unknown_linux_gnuabi64.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mipsisa64r6el_unknown_linux_gnuabi64.rs b/src/librustc_target/spec/mipsisa64r6el_unknown_linux_gnuabi64.rs
index 58a814a759e..4f41b8323a9 100644
--- a/src/librustc_target/spec/mipsisa64r6el_unknown_linux_gnuabi64.rs
+++ b/src/librustc_target/spec/mipsisa64r6el_unknown_linux_gnuabi64.rs
@@ -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()
         },
diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
index fdb1db645c3..7654d3932e3 100644
--- a/src/librustc_target/spec/mod.rs
+++ b/src/librustc_target/spec/mod.rs
@@ -759,7 +759,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 {
@@ -843,6 +846,7 @@ impl Default for TargetOptions {
             simd_types_indirect: true,
             override_export_symbols: None,
             merge_functions: MergeFunctions::Aliases,
+            target_mcount: "mcount".to_string(),
         }
     }
 }
@@ -1148,6 +1152,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()) {
@@ -1362,6 +1367,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()
diff --git a/src/librustc_target/spec/powerpc64_unknown_freebsd.rs b/src/librustc_target/spec/powerpc64_unknown_freebsd.rs
index 360876b9ff5..fc881db6b09 100644
--- a/src/librustc_target/spec/powerpc64_unknown_freebsd.rs
+++ b/src/librustc_target/spec/powerpc64_unknown_freebsd.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs b/src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs
index c16db7583f3..89e68ab3062 100644
--- a/src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/powerpc64_unknown_linux_gnu.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs b/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs
index ac0b7431f91..be91dc44b93 100644
--- a/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs
+++ b/src/librustc_target/spec/powerpc64_unknown_linux_musl.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc64le_unknown_linux_gnu.rs b/src/librustc_target/spec/powerpc64le_unknown_linux_gnu.rs
index 038b925a286..784e3b09094 100644
--- a/src/librustc_target/spec/powerpc64le_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/powerpc64le_unknown_linux_gnu.rs
@@ -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_base::opts();
@@ -17,6 +17,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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc64le_unknown_linux_musl.rs b/src/librustc_target/spec/powerpc64le_unknown_linux_musl.rs
index 57103345f0a..a3cf47fc5e0 100644
--- a/src/librustc_target/spec/powerpc64le_unknown_linux_musl.rs
+++ b/src/librustc_target/spec/powerpc64le_unknown_linux_musl.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc_unknown_linux_gnu.rs b/src/librustc_target/spec/powerpc_unknown_linux_gnu.rs
index 38a801d5ab5..ff52fbc179b 100644
--- a/src/librustc_target/spec/powerpc_unknown_linux_gnu.rs
+++ b/src/librustc_target/spec/powerpc_unknown_linux_gnu.rs
@@ -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_base::opts();
@@ -16,6 +16,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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc_unknown_linux_gnuspe.rs b/src/librustc_target/spec/powerpc_unknown_linux_gnuspe.rs
index 675b2c749d6..1868c42be39 100644
--- a/src/librustc_target/spec/powerpc_unknown_linux_gnuspe.rs
+++ b/src/librustc_target/spec/powerpc_unknown_linux_gnuspe.rs
@@ -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_base::opts();
@@ -16,6 +16,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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc_unknown_linux_musl.rs b/src/librustc_target/spec/powerpc_unknown_linux_musl.rs
index 240443aa98d..1ad2201092c 100644
--- a/src/librustc_target/spec/powerpc_unknown_linux_musl.rs
+++ b/src/librustc_target/spec/powerpc_unknown_linux_musl.rs
@@ -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();
@@ -16,6 +16,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
+        },
     })
 }
diff --git a/src/librustc_target/spec/powerpc_unknown_netbsd.rs b/src/librustc_target/spec/powerpc_unknown_netbsd.rs
index 10e7089cf1c..6cc3a6c2ef3 100644
--- a/src/librustc_target/spec/powerpc_unknown_netbsd.rs
+++ b/src/librustc_target/spec/powerpc_unknown_netbsd.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/sparc64_unknown_netbsd.rs b/src/librustc_target/spec/sparc64_unknown_netbsd.rs
index 78d53e69e8b..09d1debef41 100644
--- a/src/librustc_target/spec/sparc64_unknown_netbsd.rs
+++ b/src/librustc_target/spec/sparc64_unknown_netbsd.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/x86_64_apple_darwin.rs b/src/librustc_target/spec/x86_64_apple_darwin.rs
index 0911ce06c13..fecc20c01c5 100644
--- a/src/librustc_target/spec/x86_64_apple_darwin.rs
+++ b/src/librustc_target/spec/x86_64_apple_darwin.rs
@@ -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();
@@ -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
+        },
     })
 }
diff --git a/src/librustc_target/spec/x86_64_rumprun_netbsd.rs b/src/librustc_target/spec/x86_64_rumprun_netbsd.rs
index a2c706c4c72..f6861f2a687 100644
--- a/src/librustc_target/spec/x86_64_rumprun_netbsd.rs
+++ b/src/librustc_target/spec/x86_64_rumprun_netbsd.rs
@@ -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();
@@ -24,6 +24,9 @@ pub fn target() -> TargetResult {
         target_env: String::new(),
         target_vendor: "rumprun".to_string(),
         linker_flavor: LinkerFlavor::Gcc,
-        options: base,
+        options: TargetOptions {
+            target_mcount: "__mcount".to_string(),
+            .. base
+        },
     })
 }
diff --git a/src/librustc_target/spec/x86_64_unknown_netbsd.rs b/src/librustc_target/spec/x86_64_unknown_netbsd.rs
index ffc4f1d5c49..6f4ab4995b5 100644
--- a/src/librustc_target/spec/x86_64_unknown_netbsd.rs
+++ b/src/librustc_target/spec/x86_64_unknown_netbsd.rs
@@ -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();
@@ -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
+        },
     })
 }