add support for hexagon-unknown-linux-musl
This commit is contained in:
parent
527dce7137
commit
4b339688b5
|
@ -120,6 +120,7 @@
|
|||
#![feature(cmpxchg16b_target_feature)]
|
||||
#![feature(rtm_target_feature)]
|
||||
#![feature(f16c_target_feature)]
|
||||
#![feature(hexagon_target_feature)]
|
||||
#![feature(const_slice_len)]
|
||||
#![feature(const_str_as_bytes)]
|
||||
#![feature(const_str_len)]
|
||||
|
|
|
@ -126,6 +126,9 @@ const UNWIND_DATA_REG: (i32, i32) = (6, 7); // R6, R7
|
|||
#[cfg(target_arch = "sparc64")]
|
||||
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:
|
||||
// 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
|
||||
|
|
|
@ -174,7 +174,7 @@ const X86_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
|||
|
||||
const HEXAGON_WHITELIST: &[(&str, Option<Symbol>)] = &[
|
||||
("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>)] = &[
|
||||
|
|
|
@ -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),
|
||||
("mips-unknown-linux-musl", mips_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),
|
||||
("mipsel-unknown-linux-uclibc", mipsel_unknown_linux_uclibc),
|
||||
|
|
|
@ -975,6 +975,11 @@ mod arch {
|
|||
pub const ARCH: &str = "wasm32";
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "hexagon")]
|
||||
mod arch {
|
||||
pub const ARCH: &'static str = "hexagon";
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
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",
|
||||
target_arch = "s390x",
|
||||
target_arch = "sparc64"))]
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#[doc(include = "os/raw/char.md")]
|
||||
#[cfg(any(all(target_os = "linux", any(target_arch = "aarch64",
|
||||
target_arch = "arm",
|
||||
target_arch = "hexagon",
|
||||
target_arch = "powerpc",
|
||||
target_arch = "powerpc64",
|
||||
target_arch = "s390x")),
|
||||
|
@ -34,6 +35,7 @@
|
|||
#[doc(include = "os/raw/char.md")]
|
||||
#[cfg(not(any(all(target_os = "linux", any(target_arch = "aarch64",
|
||||
target_arch = "arm",
|
||||
target_arch = "hexagon",
|
||||
target_arch = "powerpc",
|
||||
target_arch = "powerpc64",
|
||||
target_arch = "s390x")),
|
||||
|
|
|
@ -12,7 +12,8 @@ use crate::ptr;
|
|||
target_arch = "powerpc",
|
||||
target_arch = "powerpc64",
|
||||
target_arch = "asmjs",
|
||||
target_arch = "wasm32")))]
|
||||
target_arch = "wasm32",
|
||||
target_arch = "hexagon")))]
|
||||
pub const MIN_ALIGN: usize = 8;
|
||||
#[cfg(all(any(target_arch = "x86_64",
|
||||
target_arch = "aarch64",
|
||||
|
|
|
@ -56,6 +56,9 @@ pub const unwinder_private_data_size: usize = 2;
|
|||
#[cfg(target_os = "emscripten")]
|
||||
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)]
|
||||
pub struct _Unwind_Exception {
|
||||
pub exception_class: _Unwind_Exception_Class,
|
||||
|
|
Loading…
Reference in New Issue