From 32f9b53ed8fe445ea11c7138e827190791058e05 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Fri, 18 May 2018 09:26:53 -0500 Subject: [PATCH 1/3] NetBSD on EABI ARM does not use ARM EHABI --- src/libpanic_unwind/gcc.rs | 4 ++-- src/libunwind/libunwind.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libpanic_unwind/gcc.rs b/src/libpanic_unwind/gcc.rs index eb6dc5b5488..06c264725a9 100644 --- a/src/libpanic_unwind/gcc.rs +++ b/src/libpanic_unwind/gcc.rs @@ -143,7 +143,7 @@ const UNWIND_DATA_REG: (i32, i32) = (24, 25); // I0, I1 // The personality routine for most of our targets, except ARM, which has a slightly different ABI // (however, iOS goes here as it uses SjLj unwinding). Also, the 64-bit Windows implementation // lives in seh64_gnu.rs -#[cfg(all(any(target_os = "ios", not(target_arch = "arm"))))] +#[cfg(all(any(target_os = "ios", target_os = "netbsd", not(target_arch = "arm"))))] #[lang = "eh_personality"] #[no_mangle] #[allow(unused)] @@ -184,7 +184,7 @@ unsafe extern "C" fn rust_eh_personality(version: c_int, // ARM EHABI personality routine. // http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038b/IHI0038B_ehabi.pdf -#[cfg(all(target_arch = "arm", not(target_os = "ios")))] +#[cfg(all(target_arch = "arm", not(target_os = "ios"), not(target_os = "netbsd")))] #[lang = "eh_personality"] #[no_mangle] unsafe extern "C" fn rust_eh_personality(state: uw::_Unwind_State, diff --git a/src/libunwind/libunwind.rs b/src/libunwind/libunwind.rs index a640a2b7775..73a259bd443 100644 --- a/src/libunwind/libunwind.rs +++ b/src/libunwind/libunwind.rs @@ -93,7 +93,7 @@ extern "C" { } cfg_if! { -if #[cfg(all(any(target_os = "ios", not(target_arch = "arm"))))] { +if #[cfg(all(any(target_os = "ios", target_os = "netbsd", not(target_arch = "arm"))))] { // Not ARM EHABI #[repr(C)] #[derive(Copy, Clone, PartialEq)] From 908230ee6d02627bca6e97fae6a1194b143e0b43 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Fri, 18 May 2018 09:26:53 -0500 Subject: [PATCH 2/3] Add armv7-unknown-netbsd-eabihf target --- src/bootstrap/native.rs | 1 + .../spec/armv7_unknown_netbsd_eabihf.rs | 35 +++++++++++++++++++ src/librustc_target/spec/mod.rs | 1 + 3 files changed, 37 insertions(+) create mode 100644 src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index 002044050f3..c542d6dbc52 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -598,6 +598,7 @@ impl Step for Openssl { "arm-unknown-linux-gnueabihf" => "linux-armv4", "armv7-linux-androideabi" => "android-armv7", "armv7-unknown-linux-gnueabihf" => "linux-armv4", + "armv7-unknown-netbsd-eabihf" => "BSD-generic32", "i586-unknown-linux-gnu" => "linux-elf", "i586-unknown-linux-musl" => "linux-elf", "i686-apple-darwin" => "darwin-i386-cc", diff --git a/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs b/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs new file mode 100644 index 00000000000..412c3546115 --- /dev/null +++ b/src/librustc_target/spec/armv7_unknown_netbsd_eabihf.rs @@ -0,0 +1,35 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use spec::{LinkerFlavor, Target, TargetOptions, TargetResult}; + +pub fn target() -> TargetResult { + let base = super::netbsd_base::opts(); + Ok(Target { + llvm_target: "armv7-unknown-netbsdelf-eabihf".to_string(), + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), + data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "netbsd".to_string(), + target_env: "eabihf".to_string(), + target_vendor: "unknown".to_string(), + linker_flavor: LinkerFlavor::Gcc, + + options: TargetOptions { + features: "+v7,+vfp3,+d16,+thumb2,-neon".to_string(), + cpu: "generic".to_string(), + max_atomic_width: Some(64), + abi_blacklist: super::arm_base::abi_blacklist(), + .. base + } + }) +} diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index fb20fe9c891..0a6c3bb0ded 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -317,6 +317,7 @@ supported_targets! { ("i686-unknown-openbsd", i686_unknown_openbsd), ("x86_64-unknown-openbsd", x86_64_unknown_openbsd), + ("armv7-unknown-netbsd-eabihf", armv7_unknown_netbsd_eabihf), ("i686-unknown-netbsd", i686_unknown_netbsd), ("powerpc-unknown-netbsd", powerpc_unknown_netbsd), ("sparc64-unknown-netbsd", sparc64_unknown_netbsd), From ec779b9f08a55a88b866d2c9d514cb104af5c052 Mon Sep 17 00:00:00 2001 From: "Jonathan A. Kollasch" Date: Fri, 18 May 2018 09:26:53 -0500 Subject: [PATCH 3/3] Add armv6-unknown-netbsd-eabihf target --- src/bootstrap/native.rs | 1 + .../spec/armv6_unknown_netbsd_eabihf.rs | 34 +++++++++++++++++++ src/librustc_target/spec/mod.rs | 1 + 3 files changed, 36 insertions(+) create mode 100644 src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index c542d6dbc52..93292c658ba 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -596,6 +596,7 @@ impl Step for Openssl { "arm-linux-androideabi" => "android", "arm-unknown-linux-gnueabi" => "linux-armv4", "arm-unknown-linux-gnueabihf" => "linux-armv4", + "armv6-unknown-netbsd-eabihf" => "BSD-generic32", "armv7-linux-androideabi" => "android-armv7", "armv7-unknown-linux-gnueabihf" => "linux-armv4", "armv7-unknown-netbsd-eabihf" => "BSD-generic32", diff --git a/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs b/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs new file mode 100644 index 00000000000..38f0f34211d --- /dev/null +++ b/src/librustc_target/spec/armv6_unknown_netbsd_eabihf.rs @@ -0,0 +1,34 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use spec::{LinkerFlavor, Target, TargetOptions, TargetResult}; + +pub fn target() -> TargetResult { + let mut base = super::netbsd_base::opts(); + base.max_atomic_width = Some(64); + Ok(Target { + llvm_target: "armv6-unknown-netbsdelf-eabihf".to_string(), + target_endian: "little".to_string(), + target_pointer_width: "32".to_string(), + target_c_int_width: "32".to_string(), + data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(), + arch: "arm".to_string(), + target_os: "netbsd".to_string(), + target_env: "eabihf".to_string(), + target_vendor: "unknown".to_string(), + linker_flavor: LinkerFlavor::Gcc, + + options: TargetOptions { + features: "+v6,+vfp2".to_string(), + abi_blacklist: super::arm_base::abi_blacklist(), + .. base + } + }) +} diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index 0a6c3bb0ded..12f0f742743 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -317,6 +317,7 @@ supported_targets! { ("i686-unknown-openbsd", i686_unknown_openbsd), ("x86_64-unknown-openbsd", x86_64_unknown_openbsd), + ("armv6-unknown-netbsd-eabihf", armv6_unknown_netbsd_eabihf), ("armv7-unknown-netbsd-eabihf", armv7_unknown_netbsd_eabihf), ("i686-unknown-netbsd", i686_unknown_netbsd), ("powerpc-unknown-netbsd", powerpc_unknown_netbsd),