diff --git a/src/hermit/aarch64.rs b/src/hermit/aarch64.rs new file mode 100644 index 0000000000000000000000000000000000000000..1a92e3b4fa3412169caf35628d91ccfae399d6e9 --- /dev/null +++ b/src/hermit/aarch64.rs @@ -0,0 +1,2 @@ +pub type c_char = u8; +pub type wchar_t = u32; diff --git a/src/hermit/mod.rs b/src/hermit/mod.rs new file mode 100644 index 0000000000000000000000000000000000000000..3e28ef50c0f8b9ae79a4795496c252c97af0d6ee --- /dev/null +++ b/src/hermit/mod.rs @@ -0,0 +1,85 @@ +// Copyright 2018 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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// libc port for HermitCore (https://hermitcore.org) +// +// Ported by Colin Fink <colin.finck@rwth-aachen.de> +// and Stefan Lankes <slankes@eonerc.rwth-aachen.de> + +pub type int8_t = i8; +pub type int16_t = i16; +pub type int32_t = i32; +pub type int64_t = i64; +pub type uint8_t = u8; +pub type uint16_t = u16; +pub type uint32_t = u32; +pub type uint64_t = u64; + +pub type c_schar = i8; +pub type c_uchar = u8; +pub type c_short = i16; +pub type c_ushort = u16; +pub type c_int = i32; +pub type c_uint = u32; +pub type c_float = f32; +pub type c_double = f64; +pub type c_longlong = i64; +pub type c_ulonglong = u64; +pub type intmax_t = i64; +pub type uintmax_t = u64; + +pub type size_t = usize; +pub type ptrdiff_t = isize; +pub type intptr_t = isize; +pub type uintptr_t = usize; +pub type ssize_t = isize; + +pub type c_char = i8; +pub type c_long = i64; +pub type c_ulong = u64; + +pub type wchar_t = i32; +pub type wint_t = u32; +pub type wctype_t = i64; + +pub type regoff_t = size_t; +pub type off_t = c_long; + +cfg_if! { + if #[cfg(target_arch = "aarch64")] { + mod aarch64; + pub use self::aarch64::*; + } else if #[cfg(target_arch = "x86_64")] { + mod x86_64; + pub use self::x86_64::*; + } else { + // Unknown target_arch + } +} + +cfg_if! { + if #[cfg(libc_core_cvoid)] { + pub use ::ffi::c_void; + } else { + // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help + // enable more optimization opportunities around it recognizing things + // like malloc/free. + #[repr(u8)] + #[allow(missing_copy_implementations)] + #[allow(missing_debug_implementations)] + pub enum c_void { + // Two dummy variants so the #[repr] attribute can be used. + #[doc(hidden)] + __variant1, + #[doc(hidden)] + __variant2, + } + } +} diff --git a/src/hermit/x86_64.rs b/src/hermit/x86_64.rs new file mode 100644 index 0000000000000000000000000000000000000000..76ec3ce823e8fedfc49c9e9118285af65b5d86fb --- /dev/null +++ b/src/hermit/x86_64.rs @@ -0,0 +1,2 @@ +pub type c_char = i8; +pub type wchar_t = i32; diff --git a/src/lib.rs b/src/lib.rs index 72e93aaf62defa226027a723af426ef87e98b27a..b2e8eb0dc9103e20d73714c077ef5d7f75862818 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -232,6 +232,9 @@ cfg_if! { } else if #[cfg(unix)] { mod unix; pub use unix::*; + } else if #[cfg(target_os = "hermit")] { + mod redox; + pub use hermit::*; } else if #[cfg(target_env = "sgx")] { mod sgx; pub use sgx::*;