diff options
| author | xd009642 <danielmckenna93@gmail.com> | 2020-10-08 23:23:27 +0100 |
|---|---|---|
| committer | xd009642 <danielmckenna93@gmail.com> | 2020-10-08 23:32:20 +0100 |
| commit | a6e2b636e658ca7346ffb32bf11301d92b72a1de (patch) | |
| tree | 6542609d14fcfd59a5500e0fb3fa6b3a699c4760 /compiler/rustc_target/src/spec | |
| parent | 4437b4b1509c3c15b41a05489c4bddd2fe30e33f (diff) | |
| download | rust-a6e2b636e658ca7346ffb32bf11301d92b72a1de.tar.gz rust-a6e2b636e658ca7346ffb32bf11301d92b72a1de.zip | |
Implement the instruction_set attribute
Diffstat (limited to 'compiler/rustc_target/src/spec')
5 files changed, 11 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/spec/armv4t_unknown_linux_gnueabi.rs b/compiler/rustc_target/src/spec/armv4t_unknown_linux_gnueabi.rs index 2580e8b0f85..a184934a99d 100644 --- a/compiler/rustc_target/src/spec/armv4t_unknown_linux_gnueabi.rs +++ b/compiler/rustc_target/src/spec/armv4t_unknown_linux_gnueabi.rs @@ -20,6 +20,7 @@ pub fn target() -> TargetResult { max_atomic_width: Some(32), unsupported_abis: super::arm_base::unsupported_abis(), target_mcount: "\u{1}__gnu_mcount_nc".to_string(), + has_thumb_interworking: true, ..base }, }) diff --git a/compiler/rustc_target/src/spec/armv5te_unknown_linux_gnueabi.rs b/compiler/rustc_target/src/spec/armv5te_unknown_linux_gnueabi.rs index f28421dc775..015d27415ac 100644 --- a/compiler/rustc_target/src/spec/armv5te_unknown_linux_gnueabi.rs +++ b/compiler/rustc_target/src/spec/armv5te_unknown_linux_gnueabi.rs @@ -20,6 +20,7 @@ pub fn target() -> TargetResult { max_atomic_width: Some(32), unsupported_abis: super::arm_base::unsupported_abis(), target_mcount: "\u{1}__gnu_mcount_nc".to_string(), + has_thumb_interworking: true, ..base }, }) diff --git a/compiler/rustc_target/src/spec/armv5te_unknown_linux_musleabi.rs b/compiler/rustc_target/src/spec/armv5te_unknown_linux_musleabi.rs index fe1fa88883d..e35d8051261 100644 --- a/compiler/rustc_target/src/spec/armv5te_unknown_linux_musleabi.rs +++ b/compiler/rustc_target/src/spec/armv5te_unknown_linux_musleabi.rs @@ -23,6 +23,7 @@ pub fn target() -> TargetResult { max_atomic_width: Some(32), unsupported_abis: super::arm_base::unsupported_abis(), target_mcount: "\u{1}mcount".to_string(), + has_thumb_interworking: true, ..base }, }) diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index f1e8330425e..a98dbbc4ed1 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -994,6 +994,10 @@ pub struct TargetOptions { /// used to locate unwinding information is passed /// (only has effect if the linker is `ld`-like). pub eh_frame_header: bool, + + /// Is true if the target is an ARM architecture using thumb v1 which allows for + /// thumb and arm interworking. + pub has_thumb_interworking: bool, } impl Default for TargetOptions { @@ -1086,6 +1090,7 @@ impl Default for TargetOptions { llvm_args: vec![], use_ctors_section: false, eh_frame_header: true, + has_thumb_interworking: false, } } } @@ -1479,6 +1484,7 @@ impl Target { key!(llvm_args, list); key!(use_ctors_section, bool); key!(eh_frame_header, bool); + key!(has_thumb_interworking, bool); // NB: The old name is deprecated, but support for it is retained for // compatibility. @@ -1717,6 +1723,7 @@ impl ToJson for Target { target_option_val!(llvm_args); target_option_val!(use_ctors_section); target_option_val!(eh_frame_header); + target_option_val!(has_thumb_interworking); if default.unsupported_abis != self.options.unsupported_abis { d.insert( diff --git a/compiler/rustc_target/src/spec/thumbv4t_none_eabi.rs b/compiler/rustc_target/src/spec/thumbv4t_none_eabi.rs index a8c78f057fc..e8b614e8345 100644 --- a/compiler/rustc_target/src/spec/thumbv4t_none_eabi.rs +++ b/compiler/rustc_target/src/spec/thumbv4t_none_eabi.rs @@ -55,6 +55,7 @@ pub fn target() -> TargetResult { // don't have atomic compare-and-swap atomic_cas: false, + has_thumb_interworking: true, ..super::thumb_base::opts() }, |
