Rollup merge of #62814 - androm3da:hexagon_19jul_2019, r=alexcrichton
add support for hexagon-unknown-linux-musl
This commit is contained in:
commit
b1a866012d
10 changed files with 110 additions and 2 deletions
|
@ -120,6 +120,7 @@
|
||||||
#![feature(cmpxchg16b_target_feature)]
|
#![feature(cmpxchg16b_target_feature)]
|
||||||
#![feature(rtm_target_feature)]
|
#![feature(rtm_target_feature)]
|
||||||
#![feature(f16c_target_feature)]
|
#![feature(f16c_target_feature)]
|
||||||
|
#![feature(hexagon_target_feature)]
|
||||||
#![feature(const_slice_len)]
|
#![feature(const_slice_len)]
|
||||||
#![feature(const_str_as_bytes)]
|
#![feature(const_str_as_bytes)]
|
||||||
#![feature(const_str_len)]
|
#![feature(const_str_len)]
|
||||||
|
|
|
@ -126,6 +126,9 @@ const UNWIND_DATA_REG: (i32, i32) = (6, 7); // R6, R7
|
||||||
#[cfg(target_arch = "sparc64")]
|
#[cfg(target_arch = "sparc64")]
|
||||||
const UNWIND_DATA_REG: (i32, i32) = (24, 25); // I0, I1
|
const UNWIND_DATA_REG: (i32, i32) = (24, 25); // I0, I1
|
||||||
|
|
||||||
|
#[cfg(target_arch = "hexagon")]
|
||||||
|
const UNWIND_DATA_REG: (i32, i32) = (0, 1); // R0, R1
|
||||||
|
|
||||||
// The following code is based on GCC's C and C++ personality routines. For reference, see:
|
// The following code is based on GCC's C and C++ personality routines. For reference, see:
|
||||||
// https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/libsupc++/eh_personality.cc
|
// https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/libsupc++/eh_personality.cc
|
||||||
// https://github.com/gcc-mirror/gcc/blob/trunk/libgcc/unwind-c.c
|
// https://github.com/gcc-mirror/gcc/blob/trunk/libgcc/unwind-c.c
|
||||||
|
|
|
@ -174,7 +174,7 @@ const X86_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||||
|
|
||||||
const HEXAGON_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
const HEXAGON_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||||
("hvx", Some(sym::hexagon_target_feature)),
|
("hvx", Some(sym::hexagon_target_feature)),
|
||||||
("hvx-double", Some(sym::hexagon_target_feature)),
|
("hvx-length128b", Some(sym::hexagon_target_feature)),
|
||||||
];
|
];
|
||||||
|
|
||||||
const POWERPC_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
const POWERPC_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||||
|
|
36
src/librustc_target/spec/hexagon_unknown_linux_musl.rs
Normal file
36
src/librustc_target/spec/hexagon_unknown_linux_musl.rs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
use crate::spec::{LinkerFlavor, Target, TargetResult, LinkArgs};
|
||||||
|
|
||||||
|
pub fn target() -> TargetResult {
|
||||||
|
let mut base = super::linux_musl_base::opts();
|
||||||
|
base.cpu = "hexagonv60".to_string();
|
||||||
|
base.max_atomic_width = Some(32);
|
||||||
|
// FIXME: HVX length defaults are per-CPU
|
||||||
|
base.features = "-small-data,+hvx-length128b".to_string();
|
||||||
|
|
||||||
|
base.crt_static_default = false;
|
||||||
|
base.atomic_cas = true;
|
||||||
|
base.has_rpath = true;
|
||||||
|
base.linker_is_gnu = false;
|
||||||
|
base.dynamic_linking = true;
|
||||||
|
base.executables = true;
|
||||||
|
|
||||||
|
base.pre_link_args = LinkArgs::new();
|
||||||
|
base.post_link_args = LinkArgs::new();
|
||||||
|
|
||||||
|
Ok(Target {
|
||||||
|
llvm_target: "hexagon-unknown-linux-musl".to_string(),
|
||||||
|
target_endian: "little".to_string(),
|
||||||
|
target_pointer_width: "32".to_string(),
|
||||||
|
target_c_int_width: "32".to_string(),
|
||||||
|
data_layout: concat!("e-m:e-p:32:32:32-a:0-n16:32-i64:64:64-i32:32",
|
||||||
|
":32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-v32",
|
||||||
|
":32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048",
|
||||||
|
":2048:2048").to_string(),
|
||||||
|
arch: "hexagon".to_string(),
|
||||||
|
target_os: "linux".to_string(),
|
||||||
|
target_env: "musl".to_string(),
|
||||||
|
target_vendor: "unknown".to_string(),
|
||||||
|
linker_flavor: LinkerFlavor::Gcc,
|
||||||
|
options: base,
|
||||||
|
})
|
||||||
|
}
|
|
@ -368,6 +368,7 @@ supported_targets! {
|
||||||
("i586-unknown-linux-musl", i586_unknown_linux_musl),
|
("i586-unknown-linux-musl", i586_unknown_linux_musl),
|
||||||
("mips-unknown-linux-musl", mips_unknown_linux_musl),
|
("mips-unknown-linux-musl", mips_unknown_linux_musl),
|
||||||
("mipsel-unknown-linux-musl", mipsel_unknown_linux_musl),
|
("mipsel-unknown-linux-musl", mipsel_unknown_linux_musl),
|
||||||
|
("hexagon-unknown-linux-musl", hexagon_unknown_linux_musl),
|
||||||
|
|
||||||
("mips-unknown-linux-uclibc", mips_unknown_linux_uclibc),
|
("mips-unknown-linux-uclibc", mips_unknown_linux_uclibc),
|
||||||
("mipsel-unknown-linux-uclibc", mipsel_unknown_linux_uclibc),
|
("mipsel-unknown-linux-uclibc", mipsel_unknown_linux_uclibc),
|
||||||
|
|
|
@ -975,6 +975,11 @@ mod arch {
|
||||||
pub const ARCH: &str = "wasm32";
|
pub const ARCH: &str = "wasm32";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_arch = "hexagon")]
|
||||||
|
mod arch {
|
||||||
|
pub const ARCH: &'static str = "hexagon";
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
|
@ -147,6 +147,62 @@ mod arch {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_arch = "hexagon")]
|
||||||
|
mod arch {
|
||||||
|
use crate::os::raw::{c_long, c_int, c_longlong, culonglong};
|
||||||
|
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")] pub type blkcnt_t = c_longlong;
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")] pub type blksize_t = c_long;
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")] pub type ino_t = c_ulonglong;
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")] pub type nlink_t = c_uint;
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")] pub type off_t = c_longlong;
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")] pub type time_t = c_long;
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
|
#[derive(Clone)]
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub struct stat {
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_dev: ::dev_t,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_ino: ::c_ulonglong,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_mode: ::c_uint,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_nlink: ::c_uint,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_uid: ::c_uint,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_gid: ::c_uint,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_rdev: ::c_ulonglong,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub __pad1: ::c_ulong,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_size: ::c_longlong,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_blksize: ::blksize_t,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub __pad2: ::c_int,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_blocks: ::blkcnt_t,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_atime: ::time_t,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_atime_nsec: ::c_long,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_mtime: ::time_t,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_mtime_nsec: ::c_long,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_ctime: ::time_t,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub st_ctime_nsec: ::c_long,
|
||||||
|
#[stable(feature = "raw_ext", since = "1.1.0")]
|
||||||
|
pub __pad3: [::c_int;2],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(any(target_arch = "mips64",
|
#[cfg(any(target_arch = "mips64",
|
||||||
target_arch = "s390x",
|
target_arch = "s390x",
|
||||||
target_arch = "sparc64"))]
|
target_arch = "sparc64"))]
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#[doc(include = "os/raw/char.md")]
|
#[doc(include = "os/raw/char.md")]
|
||||||
#[cfg(any(all(target_os = "linux", any(target_arch = "aarch64",
|
#[cfg(any(all(target_os = "linux", any(target_arch = "aarch64",
|
||||||
target_arch = "arm",
|
target_arch = "arm",
|
||||||
|
target_arch = "hexagon",
|
||||||
target_arch = "powerpc",
|
target_arch = "powerpc",
|
||||||
target_arch = "powerpc64",
|
target_arch = "powerpc64",
|
||||||
target_arch = "s390x")),
|
target_arch = "s390x")),
|
||||||
|
@ -34,6 +35,7 @@
|
||||||
#[doc(include = "os/raw/char.md")]
|
#[doc(include = "os/raw/char.md")]
|
||||||
#[cfg(not(any(all(target_os = "linux", any(target_arch = "aarch64",
|
#[cfg(not(any(all(target_os = "linux", any(target_arch = "aarch64",
|
||||||
target_arch = "arm",
|
target_arch = "arm",
|
||||||
|
target_arch = "hexagon",
|
||||||
target_arch = "powerpc",
|
target_arch = "powerpc",
|
||||||
target_arch = "powerpc64",
|
target_arch = "powerpc64",
|
||||||
target_arch = "s390x")),
|
target_arch = "s390x")),
|
||||||
|
|
|
@ -12,7 +12,8 @@ use crate::ptr;
|
||||||
target_arch = "powerpc",
|
target_arch = "powerpc",
|
||||||
target_arch = "powerpc64",
|
target_arch = "powerpc64",
|
||||||
target_arch = "asmjs",
|
target_arch = "asmjs",
|
||||||
target_arch = "wasm32")))]
|
target_arch = "wasm32",
|
||||||
|
target_arch = "hexagon")))]
|
||||||
pub const MIN_ALIGN: usize = 8;
|
pub const MIN_ALIGN: usize = 8;
|
||||||
#[cfg(all(any(target_arch = "x86_64",
|
#[cfg(all(any(target_arch = "x86_64",
|
||||||
target_arch = "aarch64",
|
target_arch = "aarch64",
|
||||||
|
|
|
@ -56,6 +56,9 @@ pub const unwinder_private_data_size: usize = 2;
|
||||||
#[cfg(target_os = "emscripten")]
|
#[cfg(target_os = "emscripten")]
|
||||||
pub const unwinder_private_data_size: usize = 20;
|
pub const unwinder_private_data_size: usize = 20;
|
||||||
|
|
||||||
|
#[cfg(all(target_arch = "hexagon", target_os = "linux"))]
|
||||||
|
pub const unwinder_private_data_size: usize = 35;
|
||||||
|
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct _Unwind_Exception {
|
pub struct _Unwind_Exception {
|
||||||
pub exception_class: _Unwind_Exception_Class,
|
pub exception_class: _Unwind_Exception_Class,
|
||||||
|
|
Loading…
Reference in a new issue