From 43cff131ddb0e34f7ebe361700dbd5c3c13519cb Mon Sep 17 00:00:00 2001 From: "P.Y. Laligand" Date: Fri, 15 Sep 2017 12:38:08 -0700 Subject: [PATCH 01/15] The Magenta kernel is now called Zircon. --- src/ci/docker/dist-fuchsia/build-toolchain.sh | 18 +- src/libstd/build.rs | 4 +- src/libstd/sys/unix/process/mod.rs | 2 +- .../sys/unix/process/process_fuchsia.rs | 76 ++++---- .../unix/process/{magenta.rs => zircon.rs} | 182 +++++++++--------- src/libstd/sys/unix/rand.rs | 8 +- src/tools/tidy/src/deps.rs | 3 + 7 files changed, 148 insertions(+), 145 deletions(-) rename src/libstd/sys/unix/process/{magenta.rs => zircon.rs} (56%) diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index 10b285a5466..86430b48127 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -16,7 +16,7 @@ source shared.sh # Download sources SRCS=( - "https://fuchsia.googlesource.com/magenta magenta d17073dc8de344ead3b65e8cc6a12280dec38c84" + "https://fuchsia.googlesource.com/zircon zircon d17073dc8de344ead3b65e8cc6a12280dec38c84" "https://llvm.googlesource.com/llvm llvm 3f58a16d8eec385e2b3ebdfbb84ff9d3bf27e025" "https://llvm.googlesource.com/clang llvm/tools/clang 727ea63e6e82677f6e10e05e08bc7d6bdbae3111" "https://llvm.googlesource.com/lld llvm/tools/lld a31286c1366e5e89b8872803fded13805a1a084b" @@ -51,7 +51,7 @@ cd llvm mkdir build cd build hide_output cmake -GNinja \ - -DFUCHSIA_SYSROOT=${PWD}/../../magenta/third_party/ulib/musl \ + -DFUCHSIA_SYSROOT=${PWD}/../../zircon/third_party/ulib/musl \ -DLLVM_ENABLE_LTO=OFF \ -DCLANG_BOOTSTRAP_PASSTHROUGH=LLVM_ENABLE_LTO \ -C ../tools/clang/cmake/caches/Fuchsia.cmake \ @@ -62,21 +62,21 @@ cd ../.. # Build sysroot rm -rf llvm/runtimes/compiler-rt -./magenta/scripts/download-toolchain +./zircon/scripts/download-toolchain build_sysroot() { local arch="$1" case "${arch}" in - x86_64) tgt="magenta-pc-x86-64" ;; - aarch64) tgt="magenta-qemu-arm64" ;; + x86_64) tgt="zircon-pc-x86-64" ;; + aarch64) tgt="zircon-qemu-arm64" ;; esac - hide_output make -C magenta -j$(getconf _NPROCESSORS_ONLN) $tgt + hide_output make -C zircon -j$(getconf _NPROCESSORS_ONLN) $tgt dst=/usr/local/${arch}-unknown-fuchsia mkdir -p $dst - cp -r magenta/build-${tgt}/sysroot/include $dst/ - cp -r magenta/build-${tgt}/sysroot/lib $dst/ + cp -r zircon/build-${tgt}/sysroot/include $dst/ + cp -r zircon/build-${tgt}/sysroot/lib $dst/ cd llvm mkdir build-runtimes-${arch} @@ -112,7 +112,7 @@ build_sysroot() { build_sysroot "x86_64" build_sysroot "aarch64" -rm -rf magenta llvm +rm -rf zircon llvm for arch in x86_64 aarch64; do for tool in clang clang++; do diff --git a/src/libstd/build.rs b/src/libstd/build.rs index 19ea25fc7df..b8061665aa1 100644 --- a/src/libstd/build.rs +++ b/src/libstd/build.rs @@ -68,8 +68,8 @@ fn main() { if cfg!(feature = "backtrace") { println!("cargo:rustc-link-lib=backtrace"); } - println!("cargo:rustc-link-lib=magenta"); - println!("cargo:rustc-link-lib=mxio"); + println!("cargo:rustc-link-lib=zircon"); + println!("cargo:rustc-link-lib=fdio"); println!("cargo:rustc-link-lib=launchpad"); // for std::process } } diff --git a/src/libstd/sys/unix/process/mod.rs b/src/libstd/sys/unix/process/mod.rs index b50384d8eee..2a331069bc2 100644 --- a/src/libstd/sys/unix/process/mod.rs +++ b/src/libstd/sys/unix/process/mod.rs @@ -19,4 +19,4 @@ mod process_inner; #[path = "process_fuchsia.rs"] mod process_inner; #[cfg(target_os = "fuchsia")] -mod magenta; +mod zircon; diff --git a/src/libstd/sys/unix/process/process_fuchsia.rs b/src/libstd/sys/unix/process/process_fuchsia.rs index 7d583cb3dfc..1a7f544f8e9 100644 --- a/src/libstd/sys/unix/process/process_fuchsia.rs +++ b/src/libstd/sys/unix/process/process_fuchsia.rs @@ -13,7 +13,7 @@ use libc; use mem; use ptr; -use sys::process::magenta::{Handle, mx_handle_t}; +use sys::process::zircon::{Handle, zx_handle_t}; use sys::process::process_common::*; //////////////////////////////////////////////////////////////////////////////// @@ -51,10 +51,10 @@ impl Command { } unsafe fn do_exec(&mut self, stdio: ChildPipes) - -> io::Result { - use sys::process::magenta::*; + -> io::Result { + use sys::process::zircon::*; - let job_handle = mx_job_default(); + let job_handle = zx_job_default(); let envp = match *self.get_envp() { Some(ref envp) => envp.as_ptr(), None => ptr::null(), @@ -67,39 +67,39 @@ impl Command { } // Duplicate the job handle - let mut job_copy: mx_handle_t = MX_HANDLE_INVALID; - mx_cvt(mx_handle_duplicate(job_handle, MX_RIGHT_SAME_RIGHTS, &mut job_copy))?; + let mut job_copy: zx_handle_t = zx_HANDLE_INVALID; + zx_cvt(zx_handle_duplicate(job_handle, zx_RIGHT_SAME_RIGHTS, &mut job_copy))?; // Create a launchpad let mut launchpad: *mut launchpad_t = ptr::null_mut(); - mx_cvt(launchpad_create(job_copy, self.get_argv()[0], &mut launchpad))?; + zx_cvt(launchpad_create(job_copy, self.get_argv()[0], &mut launchpad))?; let launchpad_destructor = LaunchpadDestructor(launchpad); // Set the process argv - mx_cvt(launchpad_set_args(launchpad, self.get_argv().len() as i32 - 1, + zx_cvt(launchpad_set_args(launchpad, self.get_argv().len() as i32 - 1, self.get_argv().as_ptr()))?; // Setup the environment vars - mx_cvt(launchpad_set_environ(launchpad, envp))?; - mx_cvt(launchpad_add_vdso_vmo(launchpad))?; + zx_cvt(launchpad_set_environ(launchpad, envp))?; + zx_cvt(launchpad_add_vdso_vmo(launchpad))?; // Load the executable - mx_cvt(launchpad_elf_load(launchpad, launchpad_vmo_from_file(self.get_argv()[0])))?; - mx_cvt(launchpad_load_vdso(launchpad, MX_HANDLE_INVALID))?; - mx_cvt(launchpad_clone(launchpad, LP_CLONE_MXIO_ROOT | LP_CLONE_MXIO_CWD))?; + zx_cvt(launchpad_elf_load(launchpad, launchpad_vmo_from_file(self.get_argv()[0])))?; + zx_cvt(launchpad_load_vdso(launchpad, zx_HANDLE_INVALID))?; + zx_cvt(launchpad_clone(launchpad, LP_CLONE_FDIO_ROOT | LP_CLONE_FDIO_CWD))?; // Clone stdin, stdout, and stderr if let Some(fd) = stdio.stdin.fd() { - mx_cvt(launchpad_transfer_fd(launchpad, fd, 0))?; + zx_cvt(launchpad_transfer_fd(launchpad, fd, 0))?; } else { - mx_cvt(launchpad_clone_fd(launchpad, 0, 0))?; + zx_cvt(launchpad_clone_fd(launchpad, 0, 0))?; } if let Some(fd) = stdio.stdout.fd() { - mx_cvt(launchpad_transfer_fd(launchpad, fd, 1))?; + zx_cvt(launchpad_transfer_fd(launchpad, fd, 1))?; } else { - mx_cvt(launchpad_clone_fd(launchpad, 1, 1))?; + zx_cvt(launchpad_clone_fd(launchpad, 1, 1))?; } if let Some(fd) = stdio.stderr.fd() { - mx_cvt(launchpad_transfer_fd(launchpad, fd, 2))?; + zx_cvt(launchpad_transfer_fd(launchpad, fd, 2))?; } else { - mx_cvt(launchpad_clone_fd(launchpad, 2, 2))?; + zx_cvt(launchpad_clone_fd(launchpad, 2, 2))?; } // We don't want FileDesc::drop to be called on any stdio. It would close their fds. The @@ -113,9 +113,9 @@ impl Command { // `launchpad_go` destroys the launchpad, so we must not mem::forget(launchpad_destructor); - let mut process_handle: mx_handle_t = 0; + let mut process_handle: zx_handle_t = 0; let mut err_msg: *const libc::c_char = ptr::null(); - mx_cvt(launchpad_go(launchpad, &mut process_handle, &mut err_msg))?; + zx_cvt(launchpad_go(launchpad, &mut process_handle, &mut err_msg))?; // FIXME: See if we want to do something with that err_msg Ok(process_handle) @@ -136,27 +136,27 @@ impl Process { } pub fn kill(&mut self) -> io::Result<()> { - use sys::process::magenta::*; + use sys::process::zircon::*; - unsafe { mx_cvt(mx_task_kill(self.handle.raw()))?; } + unsafe { zx_cvt(zx_task_kill(self.handle.raw()))?; } Ok(()) } pub fn wait(&mut self) -> io::Result { use default::Default; - use sys::process::magenta::*; + use sys::process::zircon::*; - let mut proc_info: mx_info_process_t = Default::default(); - let mut actual: mx_size_t = 0; - let mut avail: mx_size_t = 0; + let mut proc_info: zx_info_process_t = Default::default(); + let mut actual: zx_size_t = 0; + let mut avail: zx_size_t = 0; unsafe { - mx_cvt(mx_object_wait_one(self.handle.raw(), MX_TASK_TERMINATED, - MX_TIME_INFINITE, ptr::null_mut()))?; - mx_cvt(mx_object_get_info(self.handle.raw(), MX_INFO_PROCESS, + zx_cvt(zx_object_wait_one(self.handle.raw(), zx_TASK_TERMINATED, + zx_TIME_INFINITE, ptr::null_mut()))?; + zx_cvt(zx_object_get_info(self.handle.raw(), zx_INFO_PROCESS, &mut proc_info as *mut _ as *mut libc::c_void, - mem::size_of::(), &mut actual, + mem::size_of::(), &mut actual, &mut avail))?; } if actual != 1 { @@ -168,14 +168,14 @@ impl Process { pub fn try_wait(&mut self) -> io::Result> { use default::Default; - use sys::process::magenta::*; + use sys::process::zircon::*; - let mut proc_info: mx_info_process_t = Default::default(); - let mut actual: mx_size_t = 0; - let mut avail: mx_size_t = 0; + let mut proc_info: zx_info_process_t = Default::default(); + let mut actual: zx_size_t = 0; + let mut avail: zx_size_t = 0; unsafe { - let status = mx_object_wait_one(self.handle.raw(), MX_TASK_TERMINATED, + let status = zx_object_wait_one(self.handle.raw(), zx_TASK_TERMINATED, 0, ptr::null_mut()); match status { 0 => { }, // Success @@ -184,9 +184,9 @@ impl Process { }, _ => { panic!("Failed to wait on process handle: {}", status); }, } - mx_cvt(mx_object_get_info(self.handle.raw(), MX_INFO_PROCESS, + zx_cvt(zx_object_get_info(self.handle.raw(), zx_INFO_PROCESS, &mut proc_info as *mut _ as *mut libc::c_void, - mem::size_of::(), &mut actual, + mem::size_of::(), &mut actual, &mut avail))?; } if actual != 1 { diff --git a/src/libstd/sys/unix/process/magenta.rs b/src/libstd/sys/unix/process/zircon.rs similarity index 56% rename from src/libstd/sys/unix/process/magenta.rs rename to src/libstd/sys/unix/process/zircon.rs index bc20a74f114..4dbcdb57663 100644 --- a/src/libstd/sys/unix/process/magenta.rs +++ b/src/libstd/sys/unix/process/zircon.rs @@ -17,31 +17,31 @@ use u64; use libc::{c_int, c_void}; -pub type mx_handle_t = i32; -pub type mx_vaddr_t = usize; -pub type mx_rights_t = u32; -pub type mx_status_t = i32; +pub type zx_handle_t = i32; +pub type zx_vaddr_t = usize; +pub type zx_rights_t = u32; +pub type zx_status_t = i32; -pub type mx_size_t = usize; +pub type zx_size_t = usize; -pub const MX_HANDLE_INVALID: mx_handle_t = 0; +pub const zx_HANDLE_INVALID: zx_handle_t = 0; -pub type mx_time_t = u64; -pub const MX_TIME_INFINITE : mx_time_t = u64::MAX; +pub type zx_time_t = u64; +pub const zx_TIME_INFINITE : zx_time_t = u64::MAX; -pub type mx_signals_t = u32; +pub type zx_signals_t = u32; -pub const MX_OBJECT_SIGNAL_3 : mx_signals_t = 1 << 3; +pub const zx_OBJECT_SIGNAL_3 : zx_signals_t = 1 << 3; -pub const MX_TASK_TERMINATED : mx_signals_t = MX_OBJECT_SIGNAL_3; +pub const zx_TASK_TERMINATED : zx_signals_t = zx_OBJECT_SIGNAL_3; -pub const MX_RIGHT_SAME_RIGHTS : mx_rights_t = 1 << 31; +pub const zx_RIGHT_SAME_RIGHTS : zx_rights_t = 1 << 31; -pub type mx_object_info_topic_t = u32; +pub type zx_object_info_topic_t = u32; -pub const MX_INFO_PROCESS : mx_object_info_topic_t = 3; +pub const zx_INFO_PROCESS : zx_object_info_topic_t = 3; -pub fn mx_cvt(t: T) -> io::Result where T: TryInto+Copy { +pub fn zx_cvt(t: T) -> io::Result where T: TryInto+Copy { if let Ok(status) = TryInto::try_into(t) { if status < 0 { Err(io::Error::from_raw_os_error(status)) @@ -53,33 +53,33 @@ pub fn mx_cvt(t: T) -> io::Result where T: TryInto+Copy { } } -// Safe wrapper around mx_handle_t +// Safe wrapper around zx_handle_t pub struct Handle { - raw: mx_handle_t, + raw: zx_handle_t, } impl Handle { - pub fn new(raw: mx_handle_t) -> Handle { + pub fn new(raw: zx_handle_t) -> Handle { Handle { raw, } } - pub fn raw(&self) -> mx_handle_t { + pub fn raw(&self) -> zx_handle_t { self.raw } } impl Drop for Handle { fn drop(&mut self) { - unsafe { mx_cvt(mx_handle_close(self.raw)).expect("Failed to close mx_handle_t"); } + unsafe { zx_cvt(zx_handle_close(self.raw)).expect("Failed to close zx_handle_t"); } } } -// Common MX_INFO header +// Common zx_INFO header #[derive(Default)] #[repr(C)] -pub struct mx_info_header_t { +pub struct zx_info_header_t { pub topic: u32, // identifies the info struct pub avail_topic_size: u16, // “native” size of the struct pub topic_size: u16, // size of the returned struct (<=topic_size) @@ -89,34 +89,34 @@ pub struct mx_info_header_t { #[derive(Default)] #[repr(C)] -pub struct mx_record_process_t { +pub struct zx_record_process_t { pub return_code: c_int, } -// Returned for topic MX_INFO_PROCESS +// Returned for topic zx_INFO_PROCESS #[derive(Default)] #[repr(C)] -pub struct mx_info_process_t { - pub hdr: mx_info_header_t, - pub rec: mx_record_process_t, +pub struct zx_info_process_t { + pub hdr: zx_info_header_t, + pub rec: zx_record_process_t, } extern { - pub fn mx_job_default() -> mx_handle_t; + pub fn zx_job_default() -> zx_handle_t; - pub fn mx_task_kill(handle: mx_handle_t) -> mx_status_t; + pub fn zx_task_kill(handle: zx_handle_t) -> zx_status_t; - pub fn mx_handle_close(handle: mx_handle_t) -> mx_status_t; + pub fn zx_handle_close(handle: zx_handle_t) -> zx_status_t; - pub fn mx_handle_duplicate(handle: mx_handle_t, rights: mx_rights_t, - out: *const mx_handle_t) -> mx_handle_t; + pub fn zx_handle_duplicate(handle: zx_handle_t, rights: zx_rights_t, + out: *const zx_handle_t) -> zx_handle_t; - pub fn mx_object_wait_one(handle: mx_handle_t, signals: mx_signals_t, timeout: mx_time_t, - pending: *mut mx_signals_t) -> mx_status_t; + pub fn zx_object_wait_one(handle: zx_handle_t, signals: zx_signals_t, timeout: zx_time_t, + pending: *mut zx_signals_t) -> zx_status_t; - pub fn mx_object_get_info(handle: mx_handle_t, topic: u32, buffer: *mut c_void, - buffer_size: mx_size_t, actual_size: *mut mx_size_t, - avail: *mut mx_size_t) -> mx_status_t; + pub fn zx_object_get_info(handle: zx_handle_t, topic: u32, buffer: *mut c_void, + buffer_size: zx_size_t, actual_size: *mut zx_size_t, + avail: *mut zx_size_t) -> zx_status_t; } // From `enum special_handles` in system/ulib/launchpad/launchpad.c @@ -133,117 +133,117 @@ pub struct launchpad_t { env: *const c_char, env_len: usize, - handles: *mut mx_handle_t, + handles: *mut zx_handle_t, handles_info: *mut u32, handle_count: usize, handle_alloc: usize, - entry: mx_vaddr_t, - base: mx_vaddr_t, - vdso_base: mx_vaddr_t, + entry: zx_vaddr_t, + base: zx_vaddr_t, + vdso_base: zx_vaddr_t, stack_size: usize, - special_handles: [mx_handle_t; HND_SPECIAL_COUNT], + special_handles: [zx_handle_t; HND_SPECIAL_COUNT], loader_message: bool, } extern { - pub fn launchpad_create(job: mx_handle_t, name: *const c_char, - lp: *mut *mut launchpad_t) -> mx_status_t; + pub fn launchpad_create(job: zx_handle_t, name: *const c_char, + lp: *mut *mut launchpad_t) -> zx_status_t; pub fn launchpad_go(lp: *mut launchpad_t, - proc_handle: *mut mx_handle_t, - err_msg: *mut *const c_char) -> mx_status_t; + proc_handle: *mut zx_handle_t, + err_msg: *mut *const c_char) -> zx_status_t; pub fn launchpad_destroy(lp: *mut launchpad_t); pub fn launchpad_set_args(lp: *mut launchpad_t, argc: c_int, - argv: *const *const c_char) -> mx_status_t; + argv: *const *const c_char) -> zx_status_t; - pub fn launchpad_set_environ(lp: *mut launchpad_t, envp: *const *const c_char) -> mx_status_t; + pub fn launchpad_set_environ(lp: *mut launchpad_t, envp: *const *const c_char) -> zx_status_t; - pub fn launchpad_clone(lp: *mut launchpad_t, what: u32) -> mx_status_t; + pub fn launchpad_clone(lp: *mut launchpad_t, what: u32) -> zx_status_t; - pub fn launchpad_clone_fd(lp: *mut launchpad_t, fd: c_int, target_fd: c_int) -> mx_status_t; + pub fn launchpad_clone_fd(lp: *mut launchpad_t, fd: c_int, target_fd: c_int) -> zx_status_t; - pub fn launchpad_transfer_fd(lp: *mut launchpad_t, fd: c_int, target_fd: c_int) -> mx_status_t; + pub fn launchpad_transfer_fd(lp: *mut launchpad_t, fd: c_int, target_fd: c_int) -> zx_status_t; - pub fn launchpad_elf_load(lp: *mut launchpad_t, vmo: mx_handle_t) -> mx_status_t; + pub fn launchpad_elf_load(lp: *mut launchpad_t, vmo: zx_handle_t) -> zx_status_t; - pub fn launchpad_add_vdso_vmo(lp: *mut launchpad_t) -> mx_status_t; + pub fn launchpad_add_vdso_vmo(lp: *mut launchpad_t) -> zx_status_t; - pub fn launchpad_load_vdso(lp: *mut launchpad_t, vmo: mx_handle_t) -> mx_status_t; + pub fn launchpad_load_vdso(lp: *mut launchpad_t, vmo: zx_handle_t) -> zx_status_t; - pub fn launchpad_vmo_from_file(filename: *const c_char) -> mx_handle_t; + pub fn launchpad_vmo_from_file(filename: *const c_char) -> zx_handle_t; } // Launchpad clone constants -pub const LP_CLONE_MXIO_ROOT: u32 = 0x0001; -pub const LP_CLONE_MXIO_CWD: u32 = 0x0002; -// LP_CLONE_MXIO_STDIO = 0x0004 -// LP_CLONE_MXIO_ALL = 0x00FF +pub const LP_CLONE_FDIO_ROOT: u32 = 0x0001; +pub const LP_CLONE_FDIO_CWD: u32 = 0x0002; +// LP_CLONE_FDIO_STDIO = 0x0004 +// LP_CLONE_FDIO_ALL = 0x00FF // LP_CLONE_ENVIRON = 0x0100 // LP_CLONE_DEFAULT_JOB = 0x0200 // LP_CLONE_ALL = 0xFFFF // Errors -#[allow(unused)] pub const ERR_INTERNAL: mx_status_t = -1; +#[allow(unused)] pub const ERR_INTERNAL: zx_status_t = -1; // ERR_NOT_SUPPORTED: The operation is not implemented, supported, // or enabled. -#[allow(unused)] pub const ERR_NOT_SUPPORTED: mx_status_t = -2; +#[allow(unused)] pub const ERR_NOT_SUPPORTED: zx_status_t = -2; // ERR_NO_RESOURCES: The system was not able to allocate some resource // needed for the operation. -#[allow(unused)] pub const ERR_NO_RESOURCES: mx_status_t = -3; +#[allow(unused)] pub const ERR_NO_RESOURCES: zx_status_t = -3; // ERR_NO_MEMORY: The system was not able to allocate memory needed // for the operation. -#[allow(unused)] pub const ERR_NO_MEMORY: mx_status_t = -4; +#[allow(unused)] pub const ERR_NO_MEMORY: zx_status_t = -4; -// ERR_CALL_FAILED: The second phase of mx_channel_call(; did not complete +// ERR_CALL_FAILED: The second phase of zx_channel_call(; did not complete // successfully. -#[allow(unused)] pub const ERR_CALL_FAILED: mx_status_t = -5; +#[allow(unused)] pub const ERR_CALL_FAILED: zx_status_t = -5; // ERR_INTERRUPTED_RETRY: The system call was interrupted, but should be // retried. This should not be seen outside of the VDSO. -#[allow(unused)] pub const ERR_INTERRUPTED_RETRY: mx_status_t = -6; +#[allow(unused)] pub const ERR_INTERRUPTED_RETRY: zx_status_t = -6; // ======= Parameter errors ======= // ERR_INVALID_ARGS: an argument is invalid, ex. null pointer -#[allow(unused)] pub const ERR_INVALID_ARGS: mx_status_t = -10; +#[allow(unused)] pub const ERR_INVALID_ARGS: zx_status_t = -10; // ERR_BAD_HANDLE: A specified handle value does not refer to a handle. -#[allow(unused)] pub const ERR_BAD_HANDLE: mx_status_t = -11; +#[allow(unused)] pub const ERR_BAD_HANDLE: zx_status_t = -11; // ERR_WRONG_TYPE: The subject of the operation is the wrong type to // perform the operation. // Example: Attempting a message_read on a thread handle. -#[allow(unused)] pub const ERR_WRONG_TYPE: mx_status_t = -12; +#[allow(unused)] pub const ERR_WRONG_TYPE: zx_status_t = -12; // ERR_BAD_SYSCALL: The specified syscall number is invalid. -#[allow(unused)] pub const ERR_BAD_SYSCALL: mx_status_t = -13; +#[allow(unused)] pub const ERR_BAD_SYSCALL: zx_status_t = -13; // ERR_OUT_OF_RANGE: An argument is outside the valid range for this // operation. -#[allow(unused)] pub const ERR_OUT_OF_RANGE: mx_status_t = -14; +#[allow(unused)] pub const ERR_OUT_OF_RANGE: zx_status_t = -14; // ERR_BUFFER_TOO_SMALL: A caller provided buffer is too small for // this operation. -#[allow(unused)] pub const ERR_BUFFER_TOO_SMALL: mx_status_t = -15; +#[allow(unused)] pub const ERR_BUFFER_TOO_SMALL: zx_status_t = -15; // ======= Precondition or state errors ======= // ERR_BAD_STATE: operation failed because the current state of the // object does not allow it, or a precondition of the operation is // not satisfied -#[allow(unused)] pub const ERR_BAD_STATE: mx_status_t = -20; +#[allow(unused)] pub const ERR_BAD_STATE: zx_status_t = -20; // ERR_TIMED_OUT: The time limit for the operation elapsed before // the operation completed. -#[allow(unused)] pub const ERR_TIMED_OUT: mx_status_t = -21; +#[allow(unused)] pub const ERR_TIMED_OUT: zx_status_t = -21; // ERR_SHOULD_WAIT: The operation cannot be performed currently but // potentially could succeed if the caller waits for a prerequisite @@ -253,67 +253,67 @@ pub const LP_CLONE_MXIO_CWD: u32 = 0x0002; // messages waiting but has an open remote will return ERR_SHOULD_WAIT. // Attempting to read from a message pipe that has no messages waiting // and has a closed remote end will return ERR_REMOTE_CLOSED. -#[allow(unused)] pub const ERR_SHOULD_WAIT: mx_status_t = -22; +#[allow(unused)] pub const ERR_SHOULD_WAIT: zx_status_t = -22; // ERR_CANCELED: The in-progress operation (e.g. a wait) has been // // canceled. -#[allow(unused)] pub const ERR_CANCELED: mx_status_t = -23; +#[allow(unused)] pub const ERR_CANCELED: zx_status_t = -23; // ERR_PEER_CLOSED: The operation failed because the remote end // of the subject of the operation was closed. -#[allow(unused)] pub const ERR_PEER_CLOSED: mx_status_t = -24; +#[allow(unused)] pub const ERR_PEER_CLOSED: zx_status_t = -24; // ERR_NOT_FOUND: The requested entity is not found. -#[allow(unused)] pub const ERR_NOT_FOUND: mx_status_t = -25; +#[allow(unused)] pub const ERR_NOT_FOUND: zx_status_t = -25; // ERR_ALREADY_EXISTS: An object with the specified identifier // already exists. // Example: Attempting to create a file when a file already exists // with that name. -#[allow(unused)] pub const ERR_ALREADY_EXISTS: mx_status_t = -26; +#[allow(unused)] pub const ERR_ALREADY_EXISTS: zx_status_t = -26; // ERR_ALREADY_BOUND: The operation failed because the named entity // is already owned or controlled by another entity. The operation // could succeed later if the current owner releases the entity. -#[allow(unused)] pub const ERR_ALREADY_BOUND: mx_status_t = -27; +#[allow(unused)] pub const ERR_ALREADY_BOUND: zx_status_t = -27; // ERR_UNAVAILABLE: The subject of the operation is currently unable // to perform the operation. // Note: This is used when there's no direct way for the caller to // observe when the subject will be able to perform the operation // and should thus retry. -#[allow(unused)] pub const ERR_UNAVAILABLE: mx_status_t = -28; +#[allow(unused)] pub const ERR_UNAVAILABLE: zx_status_t = -28; // ======= Permission check errors ======= // ERR_ACCESS_DENIED: The caller did not have permission to perform // the specified operation. -#[allow(unused)] pub const ERR_ACCESS_DENIED: mx_status_t = -30; +#[allow(unused)] pub const ERR_ACCESS_DENIED: zx_status_t = -30; // ======= Input-output errors ======= // ERR_IO: Otherwise unspecified error occurred during I/O. -#[allow(unused)] pub const ERR_IO: mx_status_t = -40; +#[allow(unused)] pub const ERR_IO: zx_status_t = -40; // ERR_REFUSED: The entity the I/O operation is being performed on // rejected the operation. // Example: an I2C device NAK'ing a transaction or a disk controller // rejecting an invalid command. -#[allow(unused)] pub const ERR_IO_REFUSED: mx_status_t = -41; +#[allow(unused)] pub const ERR_IO_REFUSED: zx_status_t = -41; // ERR_IO_DATA_INTEGRITY: The data in the operation failed an integrity // check and is possibly corrupted. // Example: CRC or Parity error. -#[allow(unused)] pub const ERR_IO_DATA_INTEGRITY: mx_status_t = -42; +#[allow(unused)] pub const ERR_IO_DATA_INTEGRITY: zx_status_t = -42; // ERR_IO_DATA_LOSS: The data in the operation is currently unavailable // and may be permanently lost. // Example: A disk block is irrecoverably damaged. -#[allow(unused)] pub const ERR_IO_DATA_LOSS: mx_status_t = -43; +#[allow(unused)] pub const ERR_IO_DATA_LOSS: zx_status_t = -43; // Filesystem specific errors -#[allow(unused)] pub const ERR_BAD_PATH: mx_status_t = -50; -#[allow(unused)] pub const ERR_NOT_DIR: mx_status_t = -51; -#[allow(unused)] pub const ERR_NOT_FILE: mx_status_t = -52; +#[allow(unused)] pub const ERR_BAD_PATH: zx_status_t = -50; +#[allow(unused)] pub const ERR_NOT_DIR: zx_status_t = -51; +#[allow(unused)] pub const ERR_NOT_FILE: zx_status_t = -52; // ERR_FILE_BIG: A file exceeds a filesystem-specific size limit. -#[allow(unused)] pub const ERR_FILE_BIG: mx_status_t = -53; +#[allow(unused)] pub const ERR_FILE_BIG: zx_status_t = -53; // ERR_NO_SPACE: Filesystem or device space is exhausted. -#[allow(unused)] pub const ERR_NO_SPACE: mx_status_t = -54; +#[allow(unused)] pub const ERR_NO_SPACE: zx_status_t = -54; diff --git a/src/libstd/sys/unix/rand.rs b/src/libstd/sys/unix/rand.rs index 1f56a299407..fd066c9cdbe 100644 --- a/src/libstd/sys/unix/rand.rs +++ b/src/libstd/sys/unix/rand.rs @@ -344,15 +344,15 @@ mod imp { use io; use rand::Rng; - #[link(name = "magenta")] + #[link(name = "zircon")] extern { - fn mx_cprng_draw(buffer: *mut u8, len: usize, actual: *mut usize) -> i32; + fn zx_cprng_draw(buffer: *mut u8, len: usize, actual: *mut usize) -> i32; } fn getrandom(buf: &mut [u8]) -> Result { unsafe { let mut actual = 0; - let status = mx_cprng_draw(buf.as_mut_ptr(), buf.len(), &mut actual); + let status = zx_cprng_draw(buf.as_mut_ptr(), buf.len(), &mut actual); if status == 0 { Ok(actual) } else { @@ -387,7 +387,7 @@ mod imp { let ret = getrandom(buf); match ret { Err(err) => { - panic!("kernel mx_cprng_draw call failed! (returned {}, buf.len() {})", + panic!("kernel zx_cprng_draw call failed! (returned {}, buf.len() {})", err, buf.len()) } Ok(actual) => { diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs index e9e4b55402c..d4613d29a36 100644 --- a/src/tools/tidy/src/deps.rs +++ b/src/tools/tidy/src/deps.rs @@ -35,8 +35,11 @@ static EXCEPTIONS: &'static [&'static str] = &[ "thread-id", // Apache-2.0, mdbook "cssparser", // MPL-2.0, rustdoc "smallvec", // MPL-2.0, rustdoc + // TODO: remove magenta references when "everything" has moved over to using the zircon name. "magenta-sys", // BSD-3-Clause, rustdoc "magenta", // BSD-3-Clause, rustdoc + "zircon-sys", // BSD-3-Clause, rustdoc + "zircon", // BSD-3-Clause, rustdoc "cssparser-macros", // MPL-2.0, rustdoc "selectors", // MPL-2.0, rustdoc ]; From de3bb916d852a7110cc97ac557fc7ed64f87848f Mon Sep 17 00:00:00 2001 From: "P.Y. Laligand" Date: Fri, 15 Sep 2017 14:04:08 -0700 Subject: [PATCH 02/15] Testing on Travis. --- src/libcompiler_builtins | 2 +- src/tools/cargo | 2 +- src/tools/rls | 2 +- src/tools/rust-installer | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libcompiler_builtins b/src/libcompiler_builtins index ef4951582f6..38ffaf97aa4 160000 --- a/src/libcompiler_builtins +++ b/src/libcompiler_builtins @@ -1 +1 @@ -Subproject commit ef4951582f620c589cd9e18ec182538bf116bce3 +Subproject commit 38ffaf97aa418cc369ca0197a72a0b927cc0f622 diff --git a/src/tools/cargo b/src/tools/cargo index 8118b02ac5c..33250c48b47 160000 --- a/src/tools/cargo +++ b/src/tools/cargo @@ -1 +1 @@ -Subproject commit 8118b02ac5ce49b22e049ff03316d5e1574852cf +Subproject commit 33250c48b4763b01478d780e76206484a1d5b207 diff --git a/src/tools/rls b/src/tools/rls index 7221e38023c..8dd70945fb0 160000 --- a/src/tools/rls +++ b/src/tools/rls @@ -1 +1 @@ -Subproject commit 7221e38023c41ff2532ebbf54a7da296fd488b50 +Subproject commit 8dd70945fb049df3f9dc7685cdc58d94e05e8ffc diff --git a/src/tools/rust-installer b/src/tools/rust-installer index 0ddd53c4bc2..adea17e1b22 160000 --- a/src/tools/rust-installer +++ b/src/tools/rust-installer @@ -1 +1 @@ -Subproject commit 0ddd53c4bc2a76df565a1c1fc0cc6f19f254b51e +Subproject commit adea17e1b22231a9036a619264b72565e3a3962f From cc4e82fe7a9126a068e27dcdfc251a1b4be1aa77 Mon Sep 17 00:00:00 2001 From: "P.Y. Laligand" Date: Fri, 15 Sep 2017 14:11:04 -0700 Subject: [PATCH 03/15] Fixed casing issues. --- src/libstd/sys/unix/process/process_fuchsia.rs | 16 ++++++++-------- src/libstd/sys/unix/process/zircon.rs | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/libstd/sys/unix/process/process_fuchsia.rs b/src/libstd/sys/unix/process/process_fuchsia.rs index 1a7f544f8e9..6059acdd485 100644 --- a/src/libstd/sys/unix/process/process_fuchsia.rs +++ b/src/libstd/sys/unix/process/process_fuchsia.rs @@ -67,8 +67,8 @@ impl Command { } // Duplicate the job handle - let mut job_copy: zx_handle_t = zx_HANDLE_INVALID; - zx_cvt(zx_handle_duplicate(job_handle, zx_RIGHT_SAME_RIGHTS, &mut job_copy))?; + let mut job_copy: zx_handle_t = ZX_HANDLE_INVALID; + zx_cvt(zx_handle_duplicate(job_handle, ZX_RIGHT_SAME_RIGHTS, &mut job_copy))?; // Create a launchpad let mut launchpad: *mut launchpad_t = ptr::null_mut(); zx_cvt(launchpad_create(job_copy, self.get_argv()[0], &mut launchpad))?; @@ -82,7 +82,7 @@ impl Command { zx_cvt(launchpad_add_vdso_vmo(launchpad))?; // Load the executable zx_cvt(launchpad_elf_load(launchpad, launchpad_vmo_from_file(self.get_argv()[0])))?; - zx_cvt(launchpad_load_vdso(launchpad, zx_HANDLE_INVALID))?; + zx_cvt(launchpad_load_vdso(launchpad, ZX_HANDLE_INVALID))?; zx_cvt(launchpad_clone(launchpad, LP_CLONE_FDIO_ROOT | LP_CLONE_FDIO_CWD))?; // Clone stdin, stdout, and stderr @@ -152,9 +152,9 @@ impl Process { let mut avail: zx_size_t = 0; unsafe { - zx_cvt(zx_object_wait_one(self.handle.raw(), zx_TASK_TERMINATED, - zx_TIME_INFINITE, ptr::null_mut()))?; - zx_cvt(zx_object_get_info(self.handle.raw(), zx_INFO_PROCESS, + zx_cvt(zx_object_wait_one(self.handle.raw(), ZX_TASK_TERMINATED, + ZX_TIME_INFINITE, ptr::null_mut()))?; + zx_cvt(zx_object_get_info(self.handle.raw(), ZX_INFO_PROCESS, &mut proc_info as *mut _ as *mut libc::c_void, mem::size_of::(), &mut actual, &mut avail))?; @@ -175,7 +175,7 @@ impl Process { let mut avail: zx_size_t = 0; unsafe { - let status = zx_object_wait_one(self.handle.raw(), zx_TASK_TERMINATED, + let status = zx_object_wait_one(self.handle.raw(), ZX_TASK_TERMINATED, 0, ptr::null_mut()); match status { 0 => { }, // Success @@ -184,7 +184,7 @@ impl Process { }, _ => { panic!("Failed to wait on process handle: {}", status); }, } - zx_cvt(zx_object_get_info(self.handle.raw(), zx_INFO_PROCESS, + zx_cvt(zx_object_get_info(self.handle.raw(), ZX_INFO_PROCESS, &mut proc_info as *mut _ as *mut libc::c_void, mem::size_of::(), &mut actual, &mut avail))?; diff --git a/src/libstd/sys/unix/process/zircon.rs b/src/libstd/sys/unix/process/zircon.rs index 4dbcdb57663..2a0fcabcf7f 100644 --- a/src/libstd/sys/unix/process/zircon.rs +++ b/src/libstd/sys/unix/process/zircon.rs @@ -24,22 +24,22 @@ pub type zx_status_t = i32; pub type zx_size_t = usize; -pub const zx_HANDLE_INVALID: zx_handle_t = 0; +pub const ZX_HANDLE_INVALID: zx_handle_t = 0; pub type zx_time_t = u64; -pub const zx_TIME_INFINITE : zx_time_t = u64::MAX; +pub const ZX_TIME_INFINITE : zx_time_t = u64::MAX; pub type zx_signals_t = u32; -pub const zx_OBJECT_SIGNAL_3 : zx_signals_t = 1 << 3; +pub const ZX_OBJECT_SIGNAL_3 : zx_signals_t = 1 << 3; -pub const zx_TASK_TERMINATED : zx_signals_t = zx_OBJECT_SIGNAL_3; +pub const ZX_TASK_TERMINATED : zx_signals_t = ZX_OBJECT_SIGNAL_3; -pub const zx_RIGHT_SAME_RIGHTS : zx_rights_t = 1 << 31; +pub const ZX_RIGHT_SAME_RIGHTS : zx_rights_t = 1 << 31; pub type zx_object_info_topic_t = u32; -pub const zx_INFO_PROCESS : zx_object_info_topic_t = 3; +pub const ZX_INFO_PROCESS : zx_object_info_topic_t = 3; pub fn zx_cvt(t: T) -> io::Result where T: TryInto+Copy { if let Ok(status) = TryInto::try_into(t) { @@ -76,7 +76,7 @@ impl Drop for Handle { } } -// Common zx_INFO header +// Common ZX_INFO header #[derive(Default)] #[repr(C)] pub struct zx_info_header_t { @@ -93,7 +93,7 @@ pub struct zx_record_process_t { pub return_code: c_int, } -// Returned for topic zx_INFO_PROCESS +// Returned for topic ZX_INFO_PROCESS #[derive(Default)] #[repr(C)] pub struct zx_info_process_t { From 20265ef3ac5ecaa51cac6cee45d714ea49d3db31 Mon Sep 17 00:00:00 2001 From: "P.Y. Laligand" Date: Fri, 15 Sep 2017 16:46:51 -0700 Subject: [PATCH 04/15] Updated Zircon version. --- src/ci/docker/dist-fuchsia/build-toolchain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index 86430b48127..bea68775ecd 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -16,7 +16,7 @@ source shared.sh # Download sources SRCS=( - "https://fuchsia.googlesource.com/zircon zircon d17073dc8de344ead3b65e8cc6a12280dec38c84" + "https://fuchsia.googlesource.com/zircon zircon e9a26dbc70d631029f8ee9763103910b7e3a2fe1" "https://llvm.googlesource.com/llvm llvm 3f58a16d8eec385e2b3ebdfbb84ff9d3bf27e025" "https://llvm.googlesource.com/clang llvm/tools/clang 727ea63e6e82677f6e10e05e08bc7d6bdbae3111" "https://llvm.googlesource.com/lld llvm/tools/lld a31286c1366e5e89b8872803fded13805a1a084b" From ae0cf7fd5f1d45829898bf2f6d368b5d31f1bec2 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Sun, 17 Sep 2017 20:02:14 -0700 Subject: [PATCH 05/15] Update Fuchsia toolchain build compiler-rt is now being built as part of the toolchain itself. --- src/ci/docker/dist-fuchsia/Dockerfile | 4 +- src/ci/docker/dist-fuchsia/build-toolchain.sh | 86 ++++++------------- .../dist-fuchsia/compiler-rt-dso-handle.patch | 41 --------- 3 files changed, 28 insertions(+), 103 deletions(-) delete mode 100644 src/ci/docker/dist-fuchsia/compiler-rt-dso-handle.patch diff --git a/src/ci/docker/dist-fuchsia/Dockerfile b/src/ci/docker/dist-fuchsia/Dockerfile index e18cb453baf..2cb186c1683 100644 --- a/src/ci/docker/dist-fuchsia/Dockerfile +++ b/src/ci/docker/dist-fuchsia/Dockerfile @@ -17,11 +17,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libncurses5-dev \ patch -RUN curl -L https://cmake.org/files/v3.8/cmake-3.8.0-rc1-Linux-x86_64.tar.gz | \ +RUN curl -L https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz | \ tar xzf - -C /usr/local --strip-components=1 WORKDIR /tmp -COPY dist-fuchsia/shared.sh dist-fuchsia/build-toolchain.sh dist-fuchsia/compiler-rt-dso-handle.patch /tmp/ +COPY dist-fuchsia/shared.sh dist-fuchsia/build-toolchain.sh /tmp/ RUN /tmp/build-toolchain.sh COPY scripts/sccache.sh /scripts/ diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index bea68775ecd..57fd25c1a21 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -17,14 +17,14 @@ source shared.sh # Download sources SRCS=( "https://fuchsia.googlesource.com/zircon zircon e9a26dbc70d631029f8ee9763103910b7e3a2fe1" - "https://llvm.googlesource.com/llvm llvm 3f58a16d8eec385e2b3ebdfbb84ff9d3bf27e025" - "https://llvm.googlesource.com/clang llvm/tools/clang 727ea63e6e82677f6e10e05e08bc7d6bdbae3111" - "https://llvm.googlesource.com/lld llvm/tools/lld a31286c1366e5e89b8872803fded13805a1a084b" - "https://llvm.googlesource.com/lldb llvm/tools/lldb 0b2384abec4cb99ad66687712e07dee4dd9d187e" - "https://llvm.googlesource.com/compiler-rt llvm/runtimes/compiler-rt 9093a35c599fe41278606a20b51095ea8bd5a081" - "https://llvm.googlesource.com/libcxx llvm/runtimes/libcxx 607e0c71ec4f7fd377ad3f6c47b08dbe89f66eaa" - "https://llvm.googlesource.com/libcxxabi llvm/runtimes/libcxxabi 0a3a1a8a5ca5ef69e0f6b7d5b9d13e63e6fd2c19" - "https://llvm.googlesource.com/libunwind llvm/runtimes/libunwind e128003563d99d9ee62247c4cee40f07d21c03e3" + "https://llvm.googlesource.com/llvm llvm 65bdf0ae4a87e6992c24f06e2612909952468710" + "https://llvm.googlesource.com/clang llvm/tools/clang 914987de45cf83636537909ce09156aa7a37d6ec" + "https://llvm.googlesource.com/lld llvm/tools/lld f8ed4483c589b390daafac92e28f4680ad052643" + "https://llvm.googlesource.com/lldb llvm/tools/lldb 55cf8753321782668cb7e2d879457ee1ad57a2b9" + "https://llvm.googlesource.com/compiler-rt llvm/runtimes/compiler-rt a8682fdf74d3cb93769b7394f2cdffc5cefb8bd8" + "https://llvm.googlesource.com/libcxx llvm/runtimes/libcxx 5f919fe349450b3da0e29611ae37f6a940179290" + "https://llvm.googlesource.com/libcxxabi llvm/runtimes/libcxxabi caa78daf9285dada17e3e6b8aebcf7d128427f83" + "https://llvm.googlesource.com/libunwind llvm/runtimes/libunwind 469bacd2ea64679c15bb4d86adf000f2f2c27328" ) fetch() { @@ -41,27 +41,7 @@ for i in "${SRCS[@]}"; do fetch $i done -# Remove this once https://reviews.llvm.org/D28791 is resolved -cd llvm/runtimes/compiler-rt -patch -Np1 < /tmp/compiler-rt-dso-handle.patch -cd ../../.. - -# Build toolchain -cd llvm -mkdir build -cd build -hide_output cmake -GNinja \ - -DFUCHSIA_SYSROOT=${PWD}/../../zircon/third_party/ulib/musl \ - -DLLVM_ENABLE_LTO=OFF \ - -DCLANG_BOOTSTRAP_PASSTHROUGH=LLVM_ENABLE_LTO \ - -C ../tools/clang/cmake/caches/Fuchsia.cmake \ - .. -hide_output ninja stage2-distribution -hide_output ninja stage2-install-distribution -cd ../.. - # Build sysroot -rm -rf llvm/runtimes/compiler-rt ./zircon/scripts/download-toolchain build_sysroot() { @@ -77,40 +57,26 @@ build_sysroot() { mkdir -p $dst cp -r zircon/build-${tgt}/sysroot/include $dst/ cp -r zircon/build-${tgt}/sysroot/lib $dst/ - - cd llvm - mkdir build-runtimes-${arch} - cd build-runtimes-${arch} - hide_output cmake -GNinja \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DCMAKE_AR=/usr/local/bin/llvm-ar \ - -DCMAKE_RANLIB=/usr/local/bin/llvm-ranlib \ - -DCMAKE_INSTALL_PREFIX= \ - -DLLVM_MAIN_SRC_DIR=${PWD}/.. \ - -DLLVM_BINARY_DIR=${PWD}/../build \ - -DLLVM_ENABLE_WERROR=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DLLVM_INCLUDE_TESTS=ON \ - -DCMAKE_SYSTEM_NAME=Fuchsia \ - -DCMAKE_C_COMPILER_TARGET=${arch}-fuchsia \ - -DCMAKE_CXX_COMPILER_TARGET=${arch}-fuchsia \ - -DUNIX=1 \ - -DLIBCXX_HAS_MUSL_LIBC=ON \ - -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ - -DCMAKE_SYSROOT=${dst} \ - -DCMAKE_C_COMPILER_FORCED=TRUE \ - -DCMAKE_CXX_COMPILER_FORCED=TRUE \ - -DLLVM_ENABLE_LIBCXX=ON \ - -DCMAKE_EXE_LINKER_FLAGS="-nodefaultlibs -lc" \ - -DCMAKE_SHARED_LINKER_FLAGS="$(clang --target=${arch}-fuchsia -print-libgcc-file-name)" \ - ../runtimes - hide_output env DESTDIR="${dst}" ninja install - cd ../.. } -build_sysroot "x86_64" -build_sysroot "aarch64" +for arch in x86_64 aarch64; do + build_sysroot ${arch} +done + +# Build toolchain +cd llvm +mkdir build +cd build +hide_output cmake -GNinja \ + -DFUCHSIA_x86_64_SYSROOT=/usr/local/x86_64-unknown-fuchsia \ + -DFUCHSIA_aarch64_SYSROOT=/usr/local/aarch64-unknown-fuchsia \ + -DLLVM_ENABLE_LTO=OFF \ + -DCLANG_BOOTSTRAP_PASSTHROUGH=LLVM_ENABLE_LTO \ + -C ../tools/clang/cmake/caches/Fuchsia.cmake \ + .. +hide_output ninja stage2-distribution +hide_output ninja stage2-install-distribution +cd ../.. rm -rf zircon llvm diff --git a/src/ci/docker/dist-fuchsia/compiler-rt-dso-handle.patch b/src/ci/docker/dist-fuchsia/compiler-rt-dso-handle.patch deleted file mode 100644 index 0b702894bb2..00000000000 --- a/src/ci/docker/dist-fuchsia/compiler-rt-dso-handle.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt -index fc4384af2..b442264c0 100644 ---- a/lib/builtins/CMakeLists.txt -+++ b/lib/builtins/CMakeLists.txt -@@ -194,6 +194,12 @@ if(APPLE) - atomic_thread_fence.c) - endif() - -+if(FUCHSIA) -+ set(GENERIC_SOURCES -+ ${GENERIC_SOURCES} -+ dso_handle.c) -+endif() -+ - if(NOT WIN32 OR MINGW) - set(GENERIC_SOURCES - ${GENERIC_SOURCES} -diff --git a/lib/builtins/dso_handle.c b/lib/builtins/dso_handle.c -new file mode 100644 -index 000000000..7766cd0aa ---- /dev/null -+++ b/lib/builtins/dso_handle.c -@@ -0,0 +1,18 @@ -+/* ===-- dso_handle.c - Provide __dso_handle -------------------------------=== -+ * -+ * The LLVM Compiler Infrastructure -+ * -+ * This file is dual licensed under the MIT and the University of Illinois Open -+ * Source Licenses. See LICENSE.TXT for details. -+ * -+ * ===----------------------------------------------------------------------=== -+ */ -+ -+/* __dso_handle symbol is mandated by C++ ABI with a value which is an address -+ * in one of the object's segments, and as such this symbol has to be included -+ * statically and cannot be a part of a shared library. Traditionally, it has -+ * been defined in crtbegin.o but there's no principled reason for it to be -+ * there. We defined this symbol in the builtin library which is built as a -+ * static library and always included in the final link. -+ */ -+__attribute__((visibility("hidden"))) void *const __dso_handle; From d0ff222d0f92cbf2b67195dd7ebf3416574a328c Mon Sep 17 00:00:00 2001 From: "P.Y. Laligand" Date: Mon, 18 Sep 2017 15:45:28 -0700 Subject: [PATCH 06/15] Update submodules. --- src/libcompiler_builtins | 2 +- src/tools/cargo | 2 +- src/tools/rls | 2 +- src/tools/rust-installer | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libcompiler_builtins b/src/libcompiler_builtins index 38ffaf97aa4..ef4951582f6 160000 --- a/src/libcompiler_builtins +++ b/src/libcompiler_builtins @@ -1 +1 @@ -Subproject commit 38ffaf97aa418cc369ca0197a72a0b927cc0f622 +Subproject commit ef4951582f620c589cd9e18ec182538bf116bce3 diff --git a/src/tools/cargo b/src/tools/cargo index 33250c48b47..8118b02ac5c 160000 --- a/src/tools/cargo +++ b/src/tools/cargo @@ -1 +1 @@ -Subproject commit 33250c48b4763b01478d780e76206484a1d5b207 +Subproject commit 8118b02ac5ce49b22e049ff03316d5e1574852cf diff --git a/src/tools/rls b/src/tools/rls index 8dd70945fb0..7221e38023c 160000 --- a/src/tools/rls +++ b/src/tools/rls @@ -1 +1 @@ -Subproject commit 8dd70945fb049df3f9dc7685cdc58d94e05e8ffc +Subproject commit 7221e38023c41ff2532ebbf54a7da296fd488b50 diff --git a/src/tools/rust-installer b/src/tools/rust-installer index adea17e1b22..0ddd53c4bc2 160000 --- a/src/tools/rust-installer +++ b/src/tools/rust-installer @@ -1 +1 @@ -Subproject commit adea17e1b22231a9036a619264b72565e3a3962f +Subproject commit 0ddd53c4bc2a76df565a1c1fc0cc6f19f254b51e From e98e674570910661caa408d55a4026161456709c Mon Sep 17 00:00:00 2001 From: "P.Y. Laligand" Date: Mon, 18 Sep 2017 15:54:48 -0700 Subject: [PATCH 07/15] TODO --> FIXME --- src/tools/tidy/src/deps.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs index d4613d29a36..38df6577694 100644 --- a/src/tools/tidy/src/deps.rs +++ b/src/tools/tidy/src/deps.rs @@ -35,7 +35,7 @@ static EXCEPTIONS: &'static [&'static str] = &[ "thread-id", // Apache-2.0, mdbook "cssparser", // MPL-2.0, rustdoc "smallvec", // MPL-2.0, rustdoc - // TODO: remove magenta references when "everything" has moved over to using the zircon name. + // FIXME: remove magenta references when "everything" has moved over to using the zircon name. "magenta-sys", // BSD-3-Clause, rustdoc "magenta", // BSD-3-Clause, rustdoc "zircon-sys", // BSD-3-Clause, rustdoc From 6c08208c31893559e9b940dd305ad7febee9bf82 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Tue, 19 Sep 2017 09:55:16 -0700 Subject: [PATCH 08/15] Install unzip into Fuchsia Docker container --- src/ci/docker/dist-fuchsia/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ci/docker/dist-fuchsia/Dockerfile b/src/ci/docker/dist-fuchsia/Dockerfile index 2cb186c1683..f0bd74be369 100644 --- a/src/ci/docker/dist-fuchsia/Dockerfile +++ b/src/ci/docker/dist-fuchsia/Dockerfile @@ -15,7 +15,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ swig \ libedit-dev \ libncurses5-dev \ - patch + patch \ + unzip RUN curl -L https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz | \ tar xzf - -C /usr/local --strip-components=1 From 850c7cbbf1740fa4729c2e8081ebd98a7f6f60b5 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Tue, 19 Sep 2017 12:05:01 -0700 Subject: [PATCH 09/15] Download clang-tools-extra as well --- src/ci/docker/dist-fuchsia/build-toolchain.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index 57fd25c1a21..f6deda2a36b 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -19,6 +19,7 @@ SRCS=( "https://fuchsia.googlesource.com/zircon zircon e9a26dbc70d631029f8ee9763103910b7e3a2fe1" "https://llvm.googlesource.com/llvm llvm 65bdf0ae4a87e6992c24f06e2612909952468710" "https://llvm.googlesource.com/clang llvm/tools/clang 914987de45cf83636537909ce09156aa7a37d6ec" + "https://llvm.googlesource.com/clang-tools-extra llvm/tools/clang/tools/extra 83de24124250a7cdc7a0fdc61b7e3c3d64b80225" "https://llvm.googlesource.com/lld llvm/tools/lld f8ed4483c589b390daafac92e28f4680ad052643" "https://llvm.googlesource.com/lldb llvm/tools/lldb 55cf8753321782668cb7e2d879457ee1ad57a2b9" "https://llvm.googlesource.com/compiler-rt llvm/runtimes/compiler-rt a8682fdf74d3cb93769b7394f2cdffc5cefb8bd8" From 0ef87cc109bcec982fd86edad5b1ee4cf929eed3 Mon Sep 17 00:00:00 2001 From: James Tucker Date: Wed, 20 Sep 2017 11:56:38 -0700 Subject: [PATCH 10/15] bump liblibc to 0.2.31 --- src/liblibc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/liblibc b/src/liblibc index 136bf195dfa..44e4018e1a3 160000 --- a/src/liblibc +++ b/src/liblibc @@ -1 +1 @@ -Subproject commit 136bf195dfa546a3589f414c1dfe693aa6ff1018 +Subproject commit 44e4018e1a37716286ec98cb5b7dd7d33ecaf940 From 1fdbfa9930d87ed90c77eb2adc4a6f5cce92122d Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Thu, 21 Sep 2017 15:36:05 -0700 Subject: [PATCH 11/15] Use Zircon's Clang rather than building our own This toolchain is already used to build Zircon itself and is the official Clang toolchain used by all Fuchsia developers. --- src/ci/docker/dist-fuchsia/Dockerfile | 9 --- src/ci/docker/dist-fuchsia/build-toolchain.sh | 69 ++++++------------- 2 files changed, 20 insertions(+), 58 deletions(-) diff --git a/src/ci/docker/dist-fuchsia/Dockerfile b/src/ci/docker/dist-fuchsia/Dockerfile index f0bd74be369..6f35a53c8ad 100644 --- a/src/ci/docker/dist-fuchsia/Dockerfile +++ b/src/ci/docker/dist-fuchsia/Dockerfile @@ -3,7 +3,6 @@ FROM ubuntu:16.04 RUN apt-get update && apt-get install -y --no-install-recommends \ g++ \ make \ - ninja-build \ file \ curl \ ca-certificates \ @@ -11,16 +10,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ sudo \ bzip2 \ - xz-utils \ - swig \ - libedit-dev \ - libncurses5-dev \ - patch \ unzip -RUN curl -L https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz | \ - tar xzf - -C /usr/local --strip-components=1 - WORKDIR /tmp COPY dist-fuchsia/shared.sh dist-fuchsia/build-toolchain.sh /tmp/ RUN /tmp/build-toolchain.sh diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index f6deda2a36b..105f712ce51 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -14,38 +14,22 @@ set -ex source shared.sh +ZIRCON=e9a26dbc70d631029f8ee9763103910b7e3a2fe1 + +mkdir -p zircon +pushd zircon > /dev/null + # Download sources -SRCS=( - "https://fuchsia.googlesource.com/zircon zircon e9a26dbc70d631029f8ee9763103910b7e3a2fe1" - "https://llvm.googlesource.com/llvm llvm 65bdf0ae4a87e6992c24f06e2612909952468710" - "https://llvm.googlesource.com/clang llvm/tools/clang 914987de45cf83636537909ce09156aa7a37d6ec" - "https://llvm.googlesource.com/clang-tools-extra llvm/tools/clang/tools/extra 83de24124250a7cdc7a0fdc61b7e3c3d64b80225" - "https://llvm.googlesource.com/lld llvm/tools/lld f8ed4483c589b390daafac92e28f4680ad052643" - "https://llvm.googlesource.com/lldb llvm/tools/lldb 55cf8753321782668cb7e2d879457ee1ad57a2b9" - "https://llvm.googlesource.com/compiler-rt llvm/runtimes/compiler-rt a8682fdf74d3cb93769b7394f2cdffc5cefb8bd8" - "https://llvm.googlesource.com/libcxx llvm/runtimes/libcxx 5f919fe349450b3da0e29611ae37f6a940179290" - "https://llvm.googlesource.com/libcxxabi llvm/runtimes/libcxxabi caa78daf9285dada17e3e6b8aebcf7d128427f83" - "https://llvm.googlesource.com/libunwind llvm/runtimes/libunwind 469bacd2ea64679c15bb4d86adf000f2f2c27328" -) +git init +git remote add origin https://fuchsia.googlesource.com/zircon +git fetch --depth=1 origin $ZIRCON +git reset --hard FETCH_HEAD -fetch() { - mkdir -p $2 - pushd $2 > /dev/null - git init - git remote add origin $1 - git fetch --depth=1 origin $3 - git reset --hard FETCH_HEAD - popd > /dev/null -} +# Download toolchain +./scripts/download-toolchain +cp -a prebuilt/downloads/clang+llvm-x86_64-linux/. /usr/local -for i in "${SRCS[@]}"; do - fetch $i -done - -# Build sysroot -./zircon/scripts/download-toolchain - -build_sysroot() { +build() { local arch="$1" case "${arch}" in @@ -53,33 +37,20 @@ build_sysroot() { aarch64) tgt="zircon-qemu-arm64" ;; esac - hide_output make -C zircon -j$(getconf _NPROCESSORS_ONLN) $tgt + hide_output make -j$(getconf _NPROCESSORS_ONLN) $tgt dst=/usr/local/${arch}-unknown-fuchsia mkdir -p $dst - cp -r zircon/build-${tgt}/sysroot/include $dst/ - cp -r zircon/build-${tgt}/sysroot/lib $dst/ + cp -a build-${tgt}/sysroot/include $dst/ + cp -a build-${tgt}/sysroot/lib $dst/ } +# Build sysroot for arch in x86_64 aarch64; do - build_sysroot ${arch} + build ${arch} done -# Build toolchain -cd llvm -mkdir build -cd build -hide_output cmake -GNinja \ - -DFUCHSIA_x86_64_SYSROOT=/usr/local/x86_64-unknown-fuchsia \ - -DFUCHSIA_aarch64_SYSROOT=/usr/local/aarch64-unknown-fuchsia \ - -DLLVM_ENABLE_LTO=OFF \ - -DCLANG_BOOTSTRAP_PASSTHROUGH=LLVM_ENABLE_LTO \ - -C ../tools/clang/cmake/caches/Fuchsia.cmake \ - .. -hide_output ninja stage2-distribution -hide_output ninja stage2-install-distribution -cd ../.. - -rm -rf zircon llvm +popd > /dev/null +rm -rf zircon for arch in x86_64 aarch64; do for tool in clang clang++; do From 992e94ab3b345dc2f597626b0de825855db2c39d Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Thu, 21 Sep 2017 16:26:10 -0700 Subject: [PATCH 12/15] Re-add CMake package This appears to be needed by the Rust build. --- src/ci/docker/dist-fuchsia/Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ci/docker/dist-fuchsia/Dockerfile b/src/ci/docker/dist-fuchsia/Dockerfile index 6f35a53c8ad..5e8222d4c36 100644 --- a/src/ci/docker/dist-fuchsia/Dockerfile +++ b/src/ci/docker/dist-fuchsia/Dockerfile @@ -8,8 +8,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ python2.7-dev \ git \ + cmake \ + ninja-build \ sudo \ bzip2 \ + xz-utils \ unzip WORKDIR /tmp From c481f85dc22155b81672d4a6c73a013730d5dd06 Mon Sep 17 00:00:00 2001 From: James Tucker Date: Fri, 22 Sep 2017 11:20:48 -0700 Subject: [PATCH 13/15] ensure that prebuilt toolchain binaries are +x --- src/ci/docker/dist-fuchsia/build-toolchain.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index 105f712ce51..5900d548ecb 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -27,6 +27,7 @@ git reset --hard FETCH_HEAD # Download toolchain ./scripts/download-toolchain +chmod +x prebuilt/downloads/clang+llvm-x86_64-linux/bin/* cp -a prebuilt/downloads/clang+llvm-x86_64-linux/. /usr/local build() { From d7a17fb3cf3bedd5efdda46a8412cdce097d1154 Mon Sep 17 00:00:00 2001 From: James Tucker Date: Sun, 24 Sep 2017 14:31:50 -0700 Subject: [PATCH 14/15] LP_CLONE_FDIO_ROOT is now LP_CLONE_FDIO_NAMESPACE --- src/libstd/sys/unix/process/process_fuchsia.rs | 2 +- src/libstd/sys/unix/process/zircon.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libstd/sys/unix/process/process_fuchsia.rs b/src/libstd/sys/unix/process/process_fuchsia.rs index 6059acdd485..5d34da04446 100644 --- a/src/libstd/sys/unix/process/process_fuchsia.rs +++ b/src/libstd/sys/unix/process/process_fuchsia.rs @@ -83,7 +83,7 @@ impl Command { // Load the executable zx_cvt(launchpad_elf_load(launchpad, launchpad_vmo_from_file(self.get_argv()[0])))?; zx_cvt(launchpad_load_vdso(launchpad, ZX_HANDLE_INVALID))?; - zx_cvt(launchpad_clone(launchpad, LP_CLONE_FDIO_ROOT | LP_CLONE_FDIO_CWD))?; + zx_cvt(launchpad_clone(launchpad, LP_CLONE_FDIO_NAMESPACE | LP_CLONE_FDIO_CWD))?; // Clone stdin, stdout, and stderr if let Some(fd) = stdio.stdin.fd() { diff --git a/src/libstd/sys/unix/process/zircon.rs b/src/libstd/sys/unix/process/zircon.rs index 2a0fcabcf7f..b5ec11b40fd 100644 --- a/src/libstd/sys/unix/process/zircon.rs +++ b/src/libstd/sys/unix/process/zircon.rs @@ -180,7 +180,7 @@ extern { // Launchpad clone constants -pub const LP_CLONE_FDIO_ROOT: u32 = 0x0001; +pub const LP_CLONE_FDIO_NAMESPACE: u32 = 0x0001; pub const LP_CLONE_FDIO_CWD: u32 = 0x0002; // LP_CLONE_FDIO_STDIO = 0x0004 // LP_CLONE_FDIO_ALL = 0x00FF From a3aef1aa95a3f2807b80af0336c4fe14dba06bb1 Mon Sep 17 00:00:00 2001 From: James Tucker Date: Sun, 24 Sep 2017 21:32:27 -0700 Subject: [PATCH 15/15] Fix fuchsia toolchain prebuild setup * Adjust bootstrap to provide useful output on failure * Add missing package dependencies in the build environment * Fix permission bits on prebuilt toolchain files --- src/bootstrap/sanity.rs | 5 ++-- src/ci/docker/dist-fuchsia/Dockerfile | 28 +++++++++++-------- src/ci/docker/dist-fuchsia/build-toolchain.sh | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs index 54208d8bb57..8b23be69a85 100644 --- a/src/bootstrap/sanity.rs +++ b/src/bootstrap/sanity.rs @@ -221,8 +221,9 @@ $ pacman -R cmake && pacman -S mingw-w64-x86_64-cmake let run = |cmd: &mut Command| { cmd.output().map(|output| { String::from_utf8_lossy(&output.stdout) - .lines().next().unwrap() - .to_string() + .lines().next().unwrap_or_else(|| { + panic!("{:?} failed {:?}", cmd, output) + }).to_string() }) }; build.lldb_version = run(Command::new("lldb").arg("--version")).ok(); diff --git a/src/ci/docker/dist-fuchsia/Dockerfile b/src/ci/docker/dist-fuchsia/Dockerfile index 5e8222d4c36..bcd95924b42 100644 --- a/src/ci/docker/dist-fuchsia/Dockerfile +++ b/src/ci/docker/dist-fuchsia/Dockerfile @@ -1,17 +1,21 @@ FROM ubuntu:16.04 -RUN apt-get update && apt-get install -y --no-install-recommends \ - g++ \ - make \ - file \ - curl \ - ca-certificates \ - python2.7-dev \ - git \ - cmake \ - ninja-build \ - sudo \ +RUN apt-get update && apt-get build-dep -y clang llvm && apt-get install -y \ + build-essential \ bzip2 \ + ca-certificates \ + cmake \ + curl \ + file \ + g++ \ + gdb \ + git \ + libedit-dev \ + make \ + ninja-build \ + nodejs \ + python2.7-dev \ + sudo \ xz-utils \ unzip @@ -34,4 +38,4 @@ ENV TARGETS=x86_64-unknown-fuchsia ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia ENV RUST_CONFIGURE_ARGS --target=$TARGETS --enable-extended -ENV SCRIPT python2.7 ../x.py dist --target $TARGETS +ENV SCRIPT python2.7 ../x.py dist --target $TARGETS \ No newline at end of file diff --git a/src/ci/docker/dist-fuchsia/build-toolchain.sh b/src/ci/docker/dist-fuchsia/build-toolchain.sh index 5900d548ecb..756013a235c 100755 --- a/src/ci/docker/dist-fuchsia/build-toolchain.sh +++ b/src/ci/docker/dist-fuchsia/build-toolchain.sh @@ -27,7 +27,7 @@ git reset --hard FETCH_HEAD # Download toolchain ./scripts/download-toolchain -chmod +x prebuilt/downloads/clang+llvm-x86_64-linux/bin/* +chmod -R a+rx prebuilt/downloads/clang+llvm-x86_64-linux cp -a prebuilt/downloads/clang+llvm-x86_64-linux/. /usr/local build() {