From e4b2cb8cba6eace2046c191861d1c8c0cfd4cad1 Mon Sep 17 00:00:00 2001 From: msizanoen1 Date: Sat, 23 Nov 2019 14:22:05 +0700 Subject: [PATCH 1/2] Add support for RISC-V 64-bit GNU/Linux --- src/libpanic_unwind/gcc.rs | 3 +++ src/libstd/env.rs | 5 +++++ src/libstd/os/linux/raw.rs | 7 ++++++- src/libstd/os/raw/mod.rs | 6 ++++-- src/libstd/sys/unix/fs.rs | 2 ++ src/libstd/sys_common/alloc.rs | 3 ++- src/libunwind/libunwind.rs | 3 +++ 7 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/libpanic_unwind/gcc.rs b/src/libpanic_unwind/gcc.rs index 4f572fe21b30b..5eaacc0c90be8 100644 --- a/src/libpanic_unwind/gcc.rs +++ b/src/libpanic_unwind/gcc.rs @@ -129,6 +129,9 @@ const UNWIND_DATA_REG: (i32, i32) = (24, 25); // I0, I1 #[cfg(target_arch = "hexagon")] const UNWIND_DATA_REG: (i32, i32) = (0, 1); // R0, R1 +#[cfg(target_arch = "riscv64")] +const UNWIND_DATA_REG: (i32, i32) = (10, 11); // x10, x11 + // 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 diff --git a/src/libstd/env.rs b/src/libstd/env.rs index cf71b61b917a7..b5867e400026e 100644 --- a/src/libstd/env.rs +++ b/src/libstd/env.rs @@ -1033,6 +1033,11 @@ mod arch { pub const ARCH: &'static str = "hexagon"; } +#[cfg(target_arch = "riscv64")] +mod arch { + pub const ARCH: &'static str = "riscv64"; +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/libstd/os/linux/raw.rs b/src/libstd/os/linux/raw.rs index d9b2236047bdf..0caec97bb7b90 100644 --- a/src/libstd/os/linux/raw.rs +++ b/src/libstd/os/linux/raw.rs @@ -230,7 +230,12 @@ mod arch { } } -#[cfg(any(target_arch = "mips64", target_arch = "s390x", target_arch = "sparc64"))] +#[cfg(any( + target_arch = "mips64", + target_arch = "s390x", + target_arch = "sparc64", + target_arch = "riscv64" +))] mod arch { pub use libc::{blkcnt_t, blksize_t, ino_t, nlink_t, off_t, stat, time_t}; } diff --git a/src/libstd/os/raw/mod.rs b/src/libstd/os/raw/mod.rs index e09012007f2d4..47daf0cce1b37 100644 --- a/src/libstd/os/raw/mod.rs +++ b/src/libstd/os/raw/mod.rs @@ -18,7 +18,8 @@ target_arch = "hexagon", target_arch = "powerpc", target_arch = "powerpc64", - target_arch = "s390x" + target_arch = "s390x", + target_arch = "riscv64" ) ), all(target_os = "android", any(target_arch = "aarch64", target_arch = "arm")), @@ -60,7 +61,8 @@ pub type c_char = u8; target_arch = "hexagon", target_arch = "powerpc", target_arch = "powerpc64", - target_arch = "s390x" + target_arch = "s390x", + target_arch = "riscv64" ) ), all(target_os = "android", any(target_arch = "aarch64", target_arch = "arm")), diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index 8669c48e3bb50..08fb088c86103 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -57,6 +57,7 @@ macro_rules! cfg_has_statx { // target_arch = "mips64", // target_arch = "s390x", target_arch = "sparc64", + target_arch = "riscv64", )))] { $($then_tt)* } else { @@ -76,6 +77,7 @@ macro_rules! cfg_has_statx { // target_arch = "mips64", // target_arch = "s390x", target_arch = "sparc64", + target_arch = "riscv64", )))] { $($block_inner)* diff --git a/src/libstd/sys_common/alloc.rs b/src/libstd/sys_common/alloc.rs index 713b9949f6461..c669410078592 100644 --- a/src/libstd/sys_common/alloc.rs +++ b/src/libstd/sys_common/alloc.rs @@ -22,7 +22,8 @@ pub const MIN_ALIGN: usize = 8; target_arch = "aarch64", target_arch = "mips64", target_arch = "s390x", - target_arch = "sparc64" + target_arch = "sparc64", + target_arch = "riscv64" )))] pub const MIN_ALIGN: usize = 16; diff --git a/src/libunwind/libunwind.rs b/src/libunwind/libunwind.rs index 0b39503c0d034..4867a0f7f92b7 100644 --- a/src/libunwind/libunwind.rs +++ b/src/libunwind/libunwind.rs @@ -53,6 +53,9 @@ pub const unwinder_private_data_size: usize = 2; #[cfg(target_arch = "sparc64")] pub const unwinder_private_data_size: usize = 2; +#[cfg(target_arch = "riscv64")] +pub const unwinder_private_data_size: usize = 2; + #[cfg(target_os = "emscripten")] pub const unwinder_private_data_size: usize = 20; From 930a0a2d0b9966b276de49e7a865186152c2f075 Mon Sep 17 00:00:00 2001 From: msizanoen1 Date: Sat, 30 Nov 2019 19:16:06 +0700 Subject: [PATCH 2/2] Update libc --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d27eec893b0af..037c6400d32b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1821,9 +1821,9 @@ checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "libc" -version = "0.2.64" +version = "0.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dfca3d9957906e8d1e6a0b641dc9a59848e793f1da2165889fd4f62d10d79c" +checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" dependencies = [ "rustc-std-workspace-core", ]