Giter Site home page Giter Site logo

zcore's Introduction

zCore

CI Docs Coverage Status issue forks stars license

基于 zircon 并提供 Linux 兼容性的操作系统内核。

原版README

Reimplement Zircon microkernel in safe Rust as a userspace program!

  • zCore设计架构概述
  • 支持bare-metal模式的Zircon & Linux
  • 支持libos模式的Zircon & Linux
  • 支持的图形应用程序等更多指导请查看原版README文档

启动内核

cargo qemu --arch riscv64

这个命令会使用 qemu-system-riscv64 启动 zCore。

默认的文件系统中将包含 busybox 应用程序和 musl-libc 链接器。它们是用自动下载的 musl-libc RISC-V 交叉编译工具链编译的。

目录

项目构建

项目构建采用 xtask 模式,常用操作被封装成 cargo 命令。

另外,还通过 Makefile 提供 make 调用,以兼容一些旧脚本。

目前已测试的开发环境包括 Ubuntu20.04、Ubuntu22.04 和 Debian11,Ubuntu22.04 不能正确编译 x86_64 的 libc 测试。若不需要烧写到物理硬件,使用 WSL2 或其他虚拟机的操作与真机并无不同之处。

构建命令

命令的基本格式为 cargo <command> [--args [value]],这实际上是 cargo run --package xtask --release -- <command> [--args [value]] 的简写。command 被传递给 xtask 应用程序,解析并执行。

许多命令的效果受到仓库环境的影响,也会影响仓库的环境。为了使用方便,如果一个命令依赖于另一个命令的效果,它们被设计为递归的。命令的递归关系图如下,对于它们的详细解释在下一节:


NOTICE 建议使用等宽字体


┌────────────┐ ┌─────────────┐ ┌─────────────┐
| update-all | | check-style | | zircon-init |
└────────────┘ └─────────────┘ └─────────────┘
┌─────┐ ┌──────┐  ┌─────┐  ┌─────────────┐ ┌─────────────────┐
| asm | | qemu |─→| bin |  | linux-libos | | libos-libc-test |
└─────┘ └──────┘  └─────┘  └─────────────┘ └─────────────────┘
                     |            └───┐┌─────┘   ┌───────────┐
                     ↓                ↓↓      ┌──| libc-test |
                 ┌───────┐        ┌────────┐←─┘  └───────────┘
                 | image |───────→| rootfs |←─┐ ┌────────────┐
                 └───────┘        └────────┘  └─| other-test |
                 ┌────────┐           ↑         └────────────┘
                 | opencv |────→┌───────────┐
                 └────────┘  ┌─→| musl-libc |
                 ┌────────┐  |  └───────────┘
                 | ffmpeg |──┘
                 └────────┘
-------------------------------------------------------------------
图例:A 递归执行 B(A 依赖 B 的结果,执行 A 时自动先执行 B)
┌───┐  ┌───┐
| A |─→| B |
└───┘  └───┘

命令参考

如果下面的命令描述与行为不符,或怀疑此文档更新不及时,亦可直接查看内联文档。 如果发现 error: no such subcommand: ...,查看命令简写为哪些命令设置了别名。


NOTICE 内联文档也是中英双语


update-all

更新工具链、依赖和 git 子模块。

如果没有递归克隆子模块,可以使用这个命令克隆。

cargo update-all

check-style

静态检查。设置多种编译选项,检查代码能否编译。

cargo check-style

zircon-init

下载 zircon 模式所需的二进制文件。

cargo zircon-init

asm

反汇并保存编指定架构的内核。默认保存到 target/zcore.asm

cargo asm -m virt-riscv64 -o z.asm

bin

生成内核 raw 镜像到指定位置。默认输出到 target/{arch}/release/zcore.bin

cargo bin -m virt-riscv64 -o z.bin

qemu

在 Qemu 中启动 zCore。这需要 Qemu 已经安装好了。

cargo qemu --arch riscv64 --smp 4

支持将 qemu 连接到 gdb:

cargo qemu --arch riscv64 --smp 4 --gdb 1234

rootfs

重建 Linux rootfs。直接执行这个命令会清空已有的为此架构构造的 rootfs 目录,重建最小的 rootfs。

cargo rootfs --arch riscv64

musl-libs

将 musl 动态库拷贝到 rootfs 目录对应位置。

cargo musl-libs --arch riscv64

ffmpeg

将 ffmpeg 动态库拷贝到 rootfs 目录对应位置。

cargo ffmpeg --arch riscv64

opencv

将 opencv 动态库拷贝到 rootfs 目录对应位置。如果 ffmpeg 已经放好了,opencv 将会编译出包含 ffmepg 支持的版本。

cargo opencv --arch riscv64

libc-test

将 libc 测试集拷贝到 rootfs 目录对应位置。

cargo libc-test --arch riscv64

other-test

将其他测试集拷贝到 rootfs 目录对应位置。

cargo other-test --arch riscv64

image

从 rootfs 目录构建 Linux rootfs 镜像文件。

cargo image --arch riscv64

linux-libos

在 linux libos 模式下启动 zCore 并执行位于指定路径的应用程序。

NOTICE libos 模式只能执行单个应用程序,完成就会退出。

cargo linux-libos --args "/bin/busybox"

可以直接给应用程序传参数:

cargo linux-libos --args "/bin/busybox ls"

平台支持

Qemu/virt

直接使用命令启动,参见启动内核qemu 命令

全志/哪吒

使用以下命令构造系统镜像:

cargo bin -m nezha -o z.bin

然后使用 rustsbi-d1 将镜像部署到 Flash 或 DRAM。

另: 可以查看README for D1 文档获知更多D1开发板有关的操作指导。

赛昉/星光

使用以下命令构造系统镜像:

cargo bin -m visionfive -o z.bin

然后根据此文档的详细说明通过 u-boot 网络启动系统。

晶视/cr1825

使用以下命令构造系统镜像:

cargo bin -m cr1825 -o z.bin

然后通过 u-boot 网络启动系统。

其他

zcore's People

Contributors

0400h avatar benpigchu avatar burtonqin avatar chyyuu avatar deathwish5 avatar elliott10 avatar equation314 avatar gcyyfun avatar heheda12345 avatar ilfth avatar jiegec avatar leo-frank avatar panql avatar pleasewhy avatar rzswh avatar shzhxh avatar summervibes avatar sunshine-lcc avatar vitalyankh avatar wangrunji0408 avatar weixiao-huang avatar wfly1998 avatar whfuyn avatar workerwork avatar xxchan avatar ydrmaster avatar yunwei37 avatar yuoo655 avatar yuzc19 avatar yxl76 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zcore's Issues

The "uname" command shows up incorrect results

  • Ubuntu 20.04 Desktop (64 bit)
  • rustup 1.21.1 (7832b2ebe 2019-12-20)
  • rustc 1.44.0-nightly (b543afca9 2020-04-05)
  • Followed README.md to build zCore
  • Run cargo run --release -p linux-loader /bin/busybox uname -a
  • Got the result
    rCore orz 0.1.0 1 machine Linux

Should zCore kernel have a uname starting with zCore?

The two contiguous vmo resize test panicked

Test with make test test_filter="VmoCloneResizeTests.ContiguousVmoResize*"

The RefCell borrowed twice in this test was introduced in #48 by me. However, before that PR, this would be locking a single lock twice, which was a deadlock.

why Segmentation fault (core dumped) when i build by "cargo run --release -p zircon-loader prebuilt/zircon"

bootsvc: Starting...
bootsvc: Taking root resource handle...
bootsvc: Creating bootfs service...
bootsvc: Retrieving boot image...
bootsvc: Decommitted BOOTDATA VMO from 0 to 0x2901000
bootsvc: Loading boot arguments...
bootsvc: Creating svcfs service...
bootsvc: Loading kernel VMOs...
bootsvc: vmo.get_property on PA_VMO_VDSO 0: ZX_ERR_INVALID_ARGS
bootsvc: vmo.get_property on PA_VMO_VDSO 1: ZX_ERR_INVALID_ARGS
bootsvc: vmo.get_property on PA_VMO_VDSO 2: ZX_ERR_INVALID_ARGS
bootsvc: vmo.get_property on PA_VMO_KERNEL_FILE 0: ZX_ERR_INVALID_ARGS
bootsvc: vmo.get_property on PA_VMO_KERNEL_FILE 1: ZX_ERR_INVALID_ARGS
bootsvc: vmo.get_property on PA_VMO_KERNEL_FILE 2: ZX_ERR_INVALID_ARGS
bootsvc: Creating loader service...
bootsvc: Launching next process...
bootsvc: bootsvc.next = bin/component_manager,fuchsia-boot:///#meta/root.cm,--config-file,/boot/config/component_manager,--use-builtin-process-launcher
userboot: loader-service channel peer closed
userboot: finished!
bootsvc: Launched bin/component_manager
[component_manager] INFO: Component manager is starting up...
[component_manager] INFO: Loaded runtime config from /boot/config/component_manager
Segmentation fault (core dumped)

[discuss] Using libc-test for zcore linux LibOS on Ubuntu 20.04

I can run libc-test on zcore linux LibOS now, maybe I should create a new pull-request with a new branch on rCore/libc-test repo for customizations makefile ? ( but it seems I cannot create a new branch on pull-request... )

Also, I will write a makefile or script for automatic test and report in zCore, maybe the method of running tests can be add to the main README.md like zircon test ?

Support negative tests

Add negative tests to the original test suite.

Description:

  • Example: if the test program does not have access privilege to some IO port, then it is expected that issuing the in/out on that port causes a #GP exception

Depends on:

  • Exception Channel

Fixing VMO/VMAR

There are still many failed vmar/vmo related core-test. Also, the attempt to run rustc on Linux mode of zCore failed due to mmap related issue. I believe these are related. We should revisited our VMO/VMAR implementation now.

Fuchsia startup process analysis

Fuchsia启动流程分析

  1. ZBI镜像中包含Fuchsia内核zircon和RAM disk (bootfs)以及特定硬件信息、内核“command line”;

  2. 内核zircon开启用户空间,启动第一个用户进程userboot。

    • userboot通过vDSO进行标准系统调用;
    • userboot elf镜像在内核编译时嵌入到内核中;
    • 内核将userboot和vDSO都映射到第一个用户进程,然后启动userboot的入口;
  3. userboot从ZBI镜像中找到bootfs,LZ4格式解压并复制到一个VMO。从bootfs中启动bootsvc,包括它的动态链接库;下一个启动程序也可以由环境变量“userboot=”指定。

  4. bootsvc, usermode加载的第一个程序。
    提供的系统服务:

    • bootfs “启动文件系统” 服务,在系统自举后,挂载到”/boot”;
    • 从bootfs加载的加载服务;

    bootsvc其中一个主要工作是启动组件管理器component manager;从bootfs启动一个bootsvc.next内核参数指定的程序,默认是bin/component_manager;

  5. component manager驱动v2组件框架。此框架控制程序的运行方式和时间,以及从其他程序可访问的功能。树形组织:root, bootstrap -driver_manager -fshost, core -appmgr

    • 存储在bootfs中的重要组件fshost和driver manager,为存储在package包中的appmgr构建完备的系统功能;
    • appmgr启动所有的用户应用软件;
  6. driver manager驱动管理器,查找硬件,为之运行合适的驱动,向Fuchsia暴露devfs的句柄;driver manager创建需要的DevHost

    • DevHost是一个包含一个或多个驱动的进程;每个驱动程序都是存储在bootfs或包中的动态库,当要运行驱动程序时,它会动态链接到驱动程序主机中后执行;
    • 包packages中的驱动,在driver manager创建的一个线程中,等待/system-delayed文件系统可用后加载驱动;
  7. fshost查找块设备,启动所需的文件系统进程,为Fuchsia提供这些文件系统的句柄;需要访问/dev句柄;
    从每个设备读取头数据,以检测文件系统类型;初始化FVM块,一个动态分配block组到虚拟块地址空间的分区管理器;初始化加密的zxcrypt分区;之后,查找到适当的块设备,启动minfs和blobfs;
    ffshost提供两个目录/pkgfs-delayed 和 /system-delayed, 以检测文件系统的可用性。

  8. appmgr运行v1组件框架。component manager使用fshost的句柄/pkgfs-delayed加载appmgr.

    • v2框架的功能可被转发到appmgr中的sys领域;sysmgr管理的服务可被暴露给v2框架;与v2通过这种机制沟通彼此;
    • appmgr被标记成一个eager组件。appmgr存储在一个包package,依赖fshost的/pkgfs-delayed句柄,fshost需要访问driver manager的/dev句柄。驱动组件和文件系统组件都起来后,component manager完成载入appmgr;
  9. v1组件初始化

    • appmgr创建一个顶级领域”app”;
    • 在app域启动第一个v1组件sysmgr,用于管理”sys”领域;
    • sys域有大量的FIDL服务;这些服务可由sysmgr配置文件.config管理;例如sshd-host.cmx远程登陆、scenic.cmx图形引擎;
      appmgr领域

Some improvements

Originally posted by @wangrunji0408 in #120 (comment)

Timer

  • Remove (or implement?) Slack.

Port

  • Make struct fields in port_packet private if possible.

  • Interrupt::bind() should validate port.can_bind_to_interrupt().

Futex

  • For syscall layer, use proc.get_futex() only.

Waker

  • update the Waker every time the future is polled

EventPair

When you get an object which is known to be a EventPair, its peer should be the same type intuitively.

  • Then Socket, Channel, Fifo should also have a fn peer(&self) -> ZxResult<Arc<Self>>

[bug] Linux program cannot receive interrupt while running.

Environment: QEMU
Command: cd zCore && make run linux=1
File: zCore/src/main.rs

#[cfg(feature = "linux")]
fn main(ramfs_data: &'static mut [u8], _cmdline: &str) {
    use alloc::sync::Arc;
    use alloc::vec;
    use linux_object::fs::MemBuf;

    let args = vec!["/bin/loop".into()];    // <-- I'VE EDITED HERE
    let envs = vec!["PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/x86_64-alpine-linux-musl/bin".into()];

    let device = Arc::new(MemBuf::new(ramfs_data));
    let rootfs = rcore_fs_sfs::SimpleFileSystem::open(device).unwrap();
    let _proc = linux_loader::run(args, envs, rootfs);
    run();
}

fn run() -> ! {
    loop {
        executor::run_until_idle();    // <-- PROBLEM OCCURS HERE
        x86_64::instructions::interrupts::enable_interrupts_and_hlt();    // <-- WHEN PROGRAM BLOCKS, IT WILL NEVER RUN
        x86_64::instructions::interrupts::disable();
        info!("I'm running.");    // <-- I'VE EDITED HERE
    }
}

Noticed that I replace args from busybox to loop,the code of loop is following:

#include <stdio.h>
int main()
{
	while (1);
	return 0;
}

When a zircon program is running, the info "I'm running" displays.

But when a linux program is running, before it ends, the info will never display, which also means that interrupt is not enabled, the program will never receive interrupt when running.

Safe userspace memory access mechanism

With the current UserPtr implementation we don't isolate userspace memory accesses from the rest of the kernel. The kernel dereferences user pointers directly, and VM faults from writing/reading a user address aren't handled.

Given that some platforms may provide special protection against userspace memory accesses (e.g. SMAP on x86), it would be nice to have copy_to_user/copy_from_user-like primitives in the HAL.

添加KernelHandle

按照我的理解,KernelObject的创建应该只能够在这个包内部进行,对外给出create的接口,创建时返回KernelHandle。将KernelHandle也加入到该crate且要求每一个KernelObject对应的文件内实现一个create函数?

crash in zircon-loader prebuilt/zircon

backtrace:

#0  0x00005652fbc944f8 in ?? ()
#1  0x00007f116fffdad8 in ?? ()
#2  0x00005652fbc944f8 in ?? ()
#3  0x00007f116fffdad8 in ?? ()
#4  0x00005652fac32213 in zircon_loader::spawn::_$u7b$$u7b$closure$u7d$$u7d$::he342d2f69aa4cad0 () at zircon-loader/src/lib.rs:203
#5  0x00005652fac18faa in _$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::hd19fb99a35257388 (
    self=..., cx=0x7f116fffdad8)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/future/mod.rs:73
#6  0x00005652fac46db0 in _$LT$core..pin..Pin$LT$P$GT$$u20$as$u20$core..future..future..Future$GT$::poll::h20197d79cea892b8 (self=..., 
    cx=0x7f116fffdad8)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/future/future.rs:118
#7  0x00005652fac3c60b in _$LT$async_std..task..builder..SupportTaskLocals$LT$F$GT$$u20$as$u20$core..future..future..Future$GT$::poll::_$u7b$$u7b$closure$u7d$$u7d$::h57f15227947c3ec8 () at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/builder.rs:198
#8  0x00005652fac3c467 in async_std::task::task_locals_wrapper::TaskLocalsWrapper::set_current::_$u7b$$u7b$closure$u7d$$u7d$::hfcf3da47117932b4 (
    current=0x7f116ffff560)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/task_locals_wrapper.rs:60
#9  0x00005652fac4ec39 in std::thread::local::LocalKey$LT$T$GT$::try_with::h75917380ffa184d8 (self=0x5652fb460368, f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/local.rs:263
#10 0x00005652fac4e7ae in std::thread::local::LocalKey$LT$T$GT$::with::h48862ae325a7147a (self=0x5652fb460368, f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/local.rs:239
#11 0x00005652fac3c3b9 in async_std::task::task_locals_wrapper::TaskLocalsWrapper::set_current::hf0c989863d035b2d (task=0x5652fbc92288, f=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/task_locals_wrapper.rs:55
#12 0x00005652fac3c5ba in _$LT$async_std..task..builder..SupportTaskLocals$LT$F$GT$$u20$as$u20$core..future..future..Future$GT$::poll::h08f326c2a439b5da (self=..., cx=0x7f116fffdad8) at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/builder.rs:196
#13 0x00005652fac4a377 in async_task::raw::RawTask$LT$F$C$R$C$S$C$T$GT$::run::he018ee4cfb308364 (ptr=0x5652fbc92260)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-task-3.0.0/src/raw.rs:502
#14 0x00005652facc1eca in async_task::task::Task$LT$T$GT$::run::h90b4213390fc70d6 (self=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-task-3.0.0/src/task.rs:265
#15 0x00005652faced88f in smol::executor::Worker::tick::_$u7b$$u7b$closure$u7d$$u7d$::h67a5fcfea21df4dd ()
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/executor.rs:323
#16 0x00005652facdef82 in scoped_tls::ScopedKey$LT$T$GT$::set::h71e51edd61554623 (self=0x5652fb4627c0 <smol::executor::WORKER::h435a7c8b7836aecd>, 
    t=0x7f116fffe0f8, f=...) at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
#17 0x00005652facecbef in smol::executor::Worker::enter::h7c880690d3c1e448 (self=0x7f116fffe0f8, f=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/executor.rs:247
#18 0x00005652faced527 in smol::executor::Worker::tick::hc4e2ff00e551ef83 (self=0x7f116fffe0f8)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/executor.rs:323
#19 0x00005652facb0a47 in smol::run::run::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h2e3bccffcd1c7bd8 ()
---Type <return> to continue, or q <return> to quit---
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/run.rs:125
#20 0x00005652facb0f32 in scoped_tls::ScopedKey$LT$T$GT$::set::h31aba5750b1882a2 (self=0x5652fb4621a8 <smol::run::WORKER::habac79db926e5901>, 
    t=0x7f116fffe0f8, f=...) at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137
#21 0x00005652facb092f in smol::run::run::_$u7b$$u7b$closure$u7d$$u7d$::h0d6298fb1c3da69f ()
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/run.rs:117
#22 0x00005652faca4b72 in smol::context::enter::h09c546b0e8f0c949 (f=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/context.rs:8
#23 0x00005652facb07ab in smol::run::run::ha9451183233ef2a5 (future=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/smol-0.1.14/src/run.rs:116
#24 0x00005652faca32fc in async_std::task::builder::Builder::blocking::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h6dc40f254d8f5c6a
    () at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/builder.rs:170
#25 0x00005652faca6e41 in async_std::task::task_locals_wrapper::TaskLocalsWrapper::set_current::_$u7b$$u7b$closure$u7d$$u7d$::h502bc8377ba09697 (
    current=0x7f116ffff560)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/task_locals_wrapper.rs:60
#26 0x00005652faca7c25 in std::thread::local::LocalKey$LT$T$GT$::try_with::h9e867984129b2fbe (self=0x5652fb461520, f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/local.rs:263
#27 0x00005652faca72f8 in std::thread::local::LocalKey$LT$T$GT$::with::h1f48bf17a9894c9f (self=0x5652fb461520, f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/local.rs:239
#28 0x00005652faca6ce0 in async_std::task::task_locals_wrapper::TaskLocalsWrapper::set_current::h23a496cbab4d2954 (task=0x7f116fffe600, f=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/task_locals_wrapper.rs:55
#29 0x00005652faca346d in async_std::task::builder::Builder::blocking::_$u7b$$u7b$closure$u7d$$u7d$::h910e2c67874e7999 (
    num_nested_blocking=0x7f116ffff548)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/builder.rs:167
#30 0x00005652faca7aba in std::thread::local::LocalKey$LT$T$GT$::try_with::h69a319a162f761da (self=0x5652fb4614e0, f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/local.rs:263
#31 0x00005652faca7438 in std::thread::local::LocalKey$LT$T$GT$::with::h8cb9b5441cafc27f (self=0x5652fb4614e0, f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/local.rs:239
#32 0x00005652faca320e in async_std::task::builder::Builder::blocking::h39d23b1ca319a5c3 (self=..., future=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/builder.rs:160
#33 0x00005652faca9db5 in async_std::task::block_on::block_on::h105fa08647c926c1 (future=...)
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/task/block_on.rs:33
#34 0x00005652facae361 in async_std::rt::RUNTIME::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h1b721dc05fa3985e ()
    at /home/odin/peiwenqian/.cargo/registry/src/github.com-1ecc6299db9ec823/async-std-1.6.2/src/rt/mod.rs:30
#35 0x00005652facb1206 in std::sys_common::backtrace::__rust_begin_short_backtrace::h49aa8ec852b91e49 (f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/sys_common/backtrace.rs:130
#36 0x00005652facac287 in std::thread::Builder::spawn_unchecked::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h8bbc5a447cf10255 ()
---Type <return> to continue, or q <return> to quit---
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/mod.rs:475
#37 0x00005652faca656a in _$LT$std..panic..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$::call_once::h3ebb93db4fa79643 (self=..., _args=0)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/panic.rs:318
#38 0x00005652facac38e in std::panicking::try::do_call::h9f3de9e6f2651f3d (data=0x7f116fffe9f8 "\220\240\300\373RV")
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/panicking.rs:297
#39 0x00005652facae69d in __rust_try ()
#40 0x00005652facac304 in std::panicking::try::he0dfd6c8917a7cf6 (f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/panicking.rs:274
#41 0x00005652faca65ea in std::panic::catch_unwind::hde145c3cc2159383 (f=...)
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/panic.rs:394
#42 0x00005652facac0dd in std::thread::Builder::spawn_unchecked::_$u7b$$u7b$closure$u7d$$u7d$::h8218c71b94901bfd ()
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/thread/mod.rs:474
#43 0x00005652faca8829 in core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h2ff01c90b8134d96 ()
    at /home/odin/peiwenqian/.rustup/toolchains/nightly-2020-06-04-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore/ops/function.rs:232
#44 0x00005652fb0421ea in call_once<(),FnOnce<()>> () at /rustc/56daaf669ebc3d5083db5cded719f780dc31104e/src/liballoc/boxed.rs:1076
#45 call_once<(),alloc::boxed::Box<FnOnce<()>>> () at /rustc/56daaf669ebc3d5083db5cded719f780dc31104e/src/liballoc/boxed.rs:1076
#46 std::sys::unix::thread::Thread::new::thread_start::hff71cfc60258a5d2 () at src/libstd/sys/unix/thread.rs:87
#47 0x00007f117518ddd5 in start_thread () from /lib64/libpthread.so.0
#48 0x00007f1174ca0ead in clone () from /lib64/libc.so.6

command:

$ cargo run -p zircon-loader prebuilt/zircon  
   Compiling kernel-hal v0.1.0 (/home/odin/peiwenqian/rust/zCore/kernel-hal)
   Compiling zircon-object v0.1.0 (/home/odin/peiwenqian/rust/zCore/zircon-object)
   Compiling kernel-hal-unix v0.1.0 (/home/odin/peiwenqian/rust/zCore/kernel-hal-unix)
   Compiling zircon-syscall v0.1.0 (/home/odin/peiwenqian/rust/zCore/zircon-syscall)
   Compiling zircon-loader v0.1.0 (/home/odin/peiwenqian/rust/zCore/zircon-loader)
    Finished dev [unoptimized + debuginfo] target(s) in 4.85s
     Running `target/debug/zircon-loader prebuilt/zircon`
userboot: decompressed BOOTFS to VMO!
userboot: searching bootfs for 'bin/bootsvc'
userboot: 'bin/bootsvc' has PT_INTERP "lib/ld.so.1"
userboot: searching bootfs for 'lib/ld.so.1'
userboot: userboot: loaded lib/ld.so.1 at 0x28200000000, entry point 0x282000575cc
userboot: userboot: loaded vDSO at 0x282000ad000, entry point 0x282000b4e6b
userboot: process bin/bootsvc started.
userboot: waiting for loader-service requests...
userboot: searching bootfs for 'lib/liblaunchpad.so'
userboot: searching bootfs for 'lib/libfdio.so'
userboot: searching bootfs for 'lib/libtrace-engine.so'
userboot: searching bootfs for 'lib/libasync-default.so'
userboot: searching bootfs for 'lib/libmemfs.so'
userboot: searching bootfs for 'lib/libc++.so.2'
userboot: searching bootfs for 'lib/libc++abi.so.1'
userboot: searching bootfs for 'lib/libunwind.so.1'
{{{reset}}}
{{{module:0:<application>:elf:dbd5f97ed489b42b}}}
{{{mmap:0x20200000000:0x30000:load:0:r:0}}}
{{{mmap:0x20200030000:0xfd000:load:0:rx:0x30000}}}
{{{mmap:0x2020012d000:0xf000:load:0:rw:0x12d000}}}
{{{mmap:0x2020013c000:0x1000:load:0:rw:0x13c000}}}
dso: id=dbd5f97ed489b42b base=0x0000020200000000 name=<application>
{{{module:0x3:liblaunchpad.so:elf:b76f0d8110442057}}}
{{{mmap:0x282000f6000:0x3000:load:0x3:r:0}}}
{{{mmap:0x282000f9000:0x4000:load:0x3:rx:0x3000}}}
{{{mmap:0x282000fd000:0x1000:load:0x3:rw:0x7000}}}
{{{mmap:0x282000fe000:0x1000:load:0x3:rw:0x8000}}}
dso: id=b76f0d8110442057 base=0x00000282000f6000 name=liblaunchpad.so
{{{module:0x2:<vDSO>:elf:10d74791a14f7360}}}
{{{mmap:0x282000ad000:0x7000:load:0x2:r:0}}}
{{{mmap:0x282000b4000:0x2000:load:0x2:rx:0x7000}}}
dso: id=10d74791a14f7360 base=0x00000282000ad000 name=<vDSO>
{{{module:0x4:libfdio.so:elf:c3bf7a8a244e7287}}}
{{{mmap:0x282000ff000:0x12000:load:0x4:r:0}}}
{{{mmap:0x28200111000:0x3c000:load:0x4:rx:0x12000}}}
{{{mmap:0x2820014d000:0x7000:load:0x4:rw:0x4e000}}}
{{{mmap:0x28200154000:0x4000:load:0x4:rw:0x55000}}}
dso: id=c3bf7a8a244e7287 base=0x00000282000ff000 name=libfdio.so
{{{module:0x5:libtrace-engine.so:elf:f0dd4c361cb612f2}}}
{{{mmap:0x28200158000:0x4000:load:0x5:r:0}}}
{{{mmap:0x2820015c000:0x6000:load:0x5:rx:0x4000}}}
{{{mmap:0x28200162000:0x1000:load:0x5:rw:0xa000}}}
{{{mmap:0x28200163000:0x1000:load:0x5:rw:0xb000}}}
dso: id=f0dd4c361cb612f2 base=0x0000028200158000 name=libtrace-engine.so
{{{module:0x6:libasync-default.so:elf:99150f38cfad363e}}}
{{{mmap:0x28200164000:0x1000:load:0x6:r:0}}}
{{{mmap:0x28200165000:0x1000:load:0x6:rx:0x1000}}}
{{{mmap:0x28200166000:0x1000:load:0x6:rw:0x2000}}}
dso: id=99150f38cfad363e base=0x0000028200164000 name=libasync-default.so
{{{module:0x7:libmemfs.so:elf:c78ca7d6f498fbff}}}
{{{mmap:0x28200167000:0xc000:load:0x7:r:0}}}
{{{mmap:0x28200173000:0x2d000:load:0x7:rx:0xc000}}}
{{{mmap:0x282001a0000:0x5000:load:0x7:rw:0x39000}}}
{{{mmap:0x282001a5000:0x1000:load:0x7:rw:0x3e000}}}
dso: id=c78ca7d6f498fbff base=0x0000028200167000 name=libmemfs.so
{{{module:0x8:libc++.so.2:elf:b93b2e97bb80b9ea}}}
{{{mmap:0x282001a6000:0x53000:load:0x8:r:0}}}
{{{mmap:0x282001f9000:0x74000:load:0x8:rx:0x53000}}}
{{{mmap:0x2820026d000:0x6000:load:0x8:rw:0xc7000}}}
{{{mmap:0x28200273000:0x7000:load:0x8:rw:0xcd000}}}
dso: id=b93b2e97bb80b9ea base=0x00000282001a6000 name=libc++.so.2
{{{module:0x9:libc++abi.so.1:elf:50ce8a297362fa00}}}
{{{mmap:0x2820027a000:0x18000:load:0x9:r:0}}}
{{{mmap:0x28200292000:0x1c000:load:0x9:rx:0x18000}}}
{{{mmap:0x282002ae000:0x4000:load:0x9:rw:0x34000}}}
{{{mmap:0x282002b2000:0x1000:load:0x9:rw:0x38000}}}
dso: id=50ce8a297362fa00 base=0x000002820027a000 name=libc++abi.so.1
{{{module:0x1:libc.so:elf:0e81ca5ebfa5379b}}}
{{{mmap:0x28200000000:0x4f000:load:0x1:r:0}}}
{{{mmap:0x2820004f000:0x59000:load:0x1:rx:0x4f000}}}
{{{mmap:0x282000a8000:0x2000:load:0x1:rw:0xa8000}}}
{{{mmap:0x282000aa000:0x3000:load:0x1:rw:0xaa000}}}
dso: id=0e81ca5ebfa5379b base=0x0000028200000000 name=libc.so
{{{module:0xa:libunwind.so.1:elf:b38531532aba8b47}}}
{{{mmap:0x282002b3000:0x4000:load:0xa:r:0}}}
{{{mmap:0x282002b7000:0x6000:load:0xa:rx:0x4000}}}
{{{mmap:0x282002bd000:0x1000:load:0xa:rw:0xa000}}}
{{{mmap:0x282002be000:0x1000:load:0xa:rw:0xb000}}}
dso: id=b38531532aba8b47 base=0x00000282002b3000 name=libunwind.so.1
bootsvc: Starting...
bootsvc: Taking root resource handle...
bootsvc: Creating bootfs service...
bootsvc: Retrieving boot image...
bootsvc: Decommitted BOOTDATA VMO from 0 to 0x4dbb000
bootsvc: Loading boot arguments...
bootsvc: Creating svcfs service...
bootsvc: Loading kernel VMOs...
bootsvc: Creating loader service...
bootsvc: Launching next process...
userboot: loader-service channel peer closed
bootsvc: bootsvc.next = bin/component_manager,fuchsia-boot:///#meta/root.cm,--use-builtin-process-launcher
userboot: finished!
bootsvc: Launched bin/component_manager
[component_manager] INFO: Component manager is starting up...
fshost: watching for exit
driver_manager: launch /boot/bin/svchost (svchost) OK
console.shell: disabled
driver_manager: launch /boot/bin/pwrbtn-monitor (pwrbtn-monitor) OK
driver_manager: launch /boot/bin/miscsvc (miscsvc) OK
Segmentation fault (core dumped)

env:

$ uname -r
3.10.0-957.el7.x86_64
$ rustc --version
rustc 1.45.0-nightly (56daaf669 2020-06-03)

$ rpm -qa | grep qemu
qemu-img-1.5.3-173.el7_8.3.x86_64
libvirt-daemon-driver-qemu-4.5.0-10.el7.x86_64
ipxe-roms-qemu-20170123-1.git4e85b27.el7_4.1.noarch
qemu-kvm-1.5.3-173.el7_8.3.x86_64
qemu-kvm-common-1.5.3-173.el7_8.3.x86_64

zCore version

master branch
42bd799d97ebc10355582cb852837ca29b2fbcf5

macOS run zircon shell cause cpu busy

zircon-loader cpu usage 204%

zCore % cargo run --release -p zircon-loader prebuilt/zircon                
warning: custom registry support via the `registry.index` configuration is being removed, this functionality will not work in the future
    Finished release [optimized] target(s) in 0.13s
     Running `target/release/zircon-loader prebuilt/zircon`
userboot: option ""
userboot: option "console.shell=true"
userboot: decompressed BOOTFS to VMO!
userboot: searching bootfs for 'bin/bootsvc'
userboot: 'bin/bootsvc' has PT_INTERP "lib/ld.so.1"
userboot: searching bootfs for 'lib/ld.so.1'
userboot: userboot: loaded lib/ld.so.1 at 0x28200000000, entry point 0x282000575cc
userboot: userboot: loaded vDSO at 0x282000ad000, entry point 0x282000b4e6b
userboot: process bin/bootsvc started.
userboot: waiting for loader-service requests...
userboot: searching bootfs for 'lib/liblaunchpad.so'
userboot: searching bootfs for 'lib/libfdio.so'
userboot: searching bootfs for 'lib/libtrace-engine.so'
userboot: searching bootfs for 'lib/libasync-default.so'
userboot: searching bootfs for 'lib/libmemfs.so'
userboot: searching bootfs for 'lib/libc++.so.2'
userboot: searching bootfs for 'lib/libc++abi.so.1'
userboot: searching bootfs for 'lib/libunwind.so.1'
{{{reset}}}
{{{module:0:<application>:elf:dbd5f97ed489b42b}}}
{{{mmap:0x20200000000:0x30000:load:0:r:0}}}
{{{mmap:0x20200030000:0xfd000:load:0:rx:0x30000}}}
{{{mmap:0x2020012d000:0xf000:load:0:rw:0x12d000}}}
{{{mmap:0x2020013c000:0x1000:load:0:rw:0x13c000}}}
dso: id=dbd5f97ed489b42b base=0x0000020200000000 name=<application>
{{{module:0x3:liblaunchpad.so:elf:b76f0d8110442057}}}
{{{mmap:0x282000f6000:0x3000:load:0x3:r:0}}}
{{{mmap:0x282000f9000:0x4000:load:0x3:rx:0x3000}}}
{{{mmap:0x282000fd000:0x1000:load:0x3:rw:0x7000}}}
{{{mmap:0x282000fe000:0x1000:load:0x3:rw:0x8000}}}
dso: id=b76f0d8110442057 base=0x00000282000f6000 name=liblaunchpad.so
{{{module:0x2:<vDSO>:elf:10d74791a14f7360}}}
{{{mmap:0x282000ad000:0x7000:load:0x2:r:0}}}
{{{mmap:0x282000b4000:0x2000:load:0x2:rx:0x7000}}}
dso: id=10d74791a14f7360 base=0x00000282000ad000 name=<vDSO>
{{{module:0x4:libfdio.so:elf:c3bf7a8a244e7287}}}
{{{mmap:0x282000ff000:0x12000:load:0x4:r:0}}}
{{{mmap:0x28200111000:0x3c000:load:0x4:rx:0x12000}}}
{{{mmap:0x2820014d000:0x7000:load:0x4:rw:0x4e000}}}
{{{mmap:0x28200154000:0x4000:load:0x4:rw:0x55000}}}
dso: id=c3bf7a8a244e7287 base=0x00000282000ff000 name=libfdio.so
{{{module:0x5:libtrace-engine.so:elf:f0dd4c361cb612f2}}}
{{{mmap:0x28200158000:0x4000:load:0x5:r:0}}}
{{{mmap:0x2820015c000:0x6000:load:0x5:rx:0x4000}}}
{{{mmap:0x28200162000:0x1000:load:0x5:rw:0xa000}}}
{{{mmap:0x28200163000:0x1000:load:0x5:rw:0xb000}}}
dso: id=f0dd4c361cb612f2 base=0x0000028200158000 name=libtrace-engine.so
{{{module:0x6:libasync-default.so:elf:99150f38cfad363e}}}
{{{mmap:0x28200164000:0x1000:load:0x6:r:0}}}
{{{mmap:0x28200165000:0x1000:load:0x6:rx:0x1000}}}
{{{mmap:0x28200166000:0x1000:load:0x6:rw:0x2000}}}
dso: id=99150f38cfad363e base=0x0000028200164000 name=libasync-default.so
{{{module:0x7:libmemfs.so:elf:c78ca7d6f498fbff}}}
{{{mmap:0x28200167000:0xc000:load:0x7:r:0}}}
{{{mmap:0x28200173000:0x2d000:load:0x7:rx:0xc000}}}
{{{mmap:0x282001a0000:0x5000:load:0x7:rw:0x39000}}}
{{{mmap:0x282001a5000:0x1000:load:0x7:rw:0x3e000}}}
dso: id=c78ca7d6f498fbff base=0x0000028200167000 name=libmemfs.so
{{{module:0x8:libc++.so.2:elf:b93b2e97bb80b9ea}}}
{{{mmap:0x282001a6000:0x53000:load:0x8:r:0}}}
{{{mmap:0x282001f9000:0x74000:load:0x8:rx:0x53000}}}
{{{mmap:0x2820026d000:0x6000:load:0x8:rw:0xc7000}}}
{{{mmap:0x28200273000:0x7000:load:0x8:rw:0xcd000}}}
dso: id=b93b2e97bb80b9ea base=0x00000282001a6000 name=libc++.so.2
{{{module:0x9:libc++abi.so.1:elf:50ce8a297362fa00}}}
{{{mmap:0x2820027a000:0x18000:load:0x9:r:0}}}
{{{mmap:0x28200292000:0x1c000:load:0x9:rx:0x18000}}}
{{{mmap:0x282002ae000:0x4000:load:0x9:rw:0x34000}}}
{{{mmap:0x282002b2000:0x1000:load:0x9:rw:0x38000}}}
dso: id=50ce8a297362fa00 base=0x000002820027a000 name=libc++abi.so.1
{{{module:0x1:libc.so:elf:0e81ca5ebfa5379b}}}
{{{mmap:0x28200000000:0x4f000:load:0x1:r:0}}}
{{{mmap:0x2820004f000:0x59000:load:0x1:rx:0x4f000}}}
{{{mmap:0x282000a8000:0x2000:load:0x1:rw:0xa8000}}}
{{{mmap:0x282000aa000:0x3000:load:0x1:rw:0xaa000}}}
dso: id=0e81ca5ebfa5379b base=0x0000028200000000 name=libc.so
{{{module:0xa:libunwind.so.1:elf:b38531532aba8b47}}}
{{{mmap:0x282002b3000:0x4000:load:0xa:r:0}}}
{{{mmap:0x282002b7000:0x6000:load:0xa:rx:0x4000}}}
{{{mmap:0x282002bd000:0x1000:load:0xa:rw:0xa000}}}
{{{mmap:0x282002be000:0x1000:load:0xa:rw:0xb000}}}
dso: id=b38531532aba8b47 base=0x00000282002b3000 name=libunwind.so.1
bootsvc: Starting...
bootsvc: Taking root resource handle...
bootsvc: Creating bootfs service...
bootsvc: Retrieving boot image...
bootsvc: Decommitted BOOTDATA VMO from 0 to 0x4dbb000
bootsvc: Loading boot arguments...
bootsvc: Creating svcfs service...
bootsvc: Loading kernel VMOs...
bootsvc: Creating loader service...
bootsvc: Launching next process...
userboot: loader-service channel peer closed
bootsvc: bootsvc.next = bin/component_manager,fuchsia-boot:///#meta/root.cm,--use-builtin-process-launcher
userboot: finished!
bootsvc: Launched bin/component_manager
[component_manager] INFO: Component manager is starting up...
fshost: watching for exit
driver_manager: launch /boot/bin/svchost (svchost) OK
console.shell: enabled

Sampling process 94967 for 3 seconds with 1 millisecond of run time between samples
Sampling completed, processing symbols...
Analysis of sampling zircon-loader (pid 94967) every 1 millisecond
Process:         zircon-loader [94967]
Path:            /Users/USER/*/zircon-loader
Load Address:    0x10df5b000
Identifier:      zircon-loader
Version:         0
Code Type:       X86-64
Parent Process:  zsh [93059]

Date/Time:       2020-05-04 12:06:32.337 +0800
Launch Time:     2020-05-04 12:06:14.161 +0800
OS Version:      Mac OS X 10.15.4 (19E287)
Report Version:  7
Analysis Tool:   /usr/bin/sample

Physical footprint:         10.8M
Physical footprint (peak):  82.8M
----

Call graph:
    2747 Thread_5434342   DispatchQueue_1: com.apple.main-thread  (serial)
    + 2747 start  (in libdyld.dylib) + 1  [0x7fff6ed17cc9]
    +   2747 main  (in zircon-loader) + 41  [0x10df616e9]
    +     2747 std::rt::lang_start_internal::h6bb9eb30b55f695f  (in zircon-loader) + 441  [0x10e0d3ed9]
    +       2747 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::hc9d565b85310f43c  (in zircon-loader) + 6  [0x10df61b46]
    +         2747 zircon_loader::main::h0d832d74d17649ad  (in zircon-loader) + 27  [0x10df616ab]
    +           2747 async_std::task::block_on::block_on::h0f5386aa897b3176  (in zircon-loader) + 425  [0x10df70589]
    +             2747 std::thread::local::LocalKey$LT$T$GT$::with::h2049f4a342014968  (in zircon-loader) + 160  [0x10df628d0]
    +               2747 std::thread::local::LocalKey$LT$T$GT$::with::hac21e826899730e4  (in zircon-loader) + 172  [0x10df62a1c]
    +                 2747 crossbeam_utils::sync::parker::Parker::park::h1ef7753ac77b4bb0  (in zircon-loader) + 32  [0x10e01e540]
    +                   2747 crossbeam_utils::sync::parker::Inner::park::hdbd2cd5d57de08a7  (in zircon-loader) + 629  [0x10e01e8a5]
    +                     2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
    +                       2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]
    2747 Thread_5434343
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::hd2c7e26bd43f2493  (in zircon-loader) + 80  [0x10e0115b0]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::had1ce06461ad2b01  (in zircon-loader) + 59  [0x10e00e1eb]
    +             2747 _$LT$std..io..Bytes$LT$R$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$::next::h0e53c2f17b8f83c3  (in zircon-loader) + 46  [0x10e00d9ee]
    +               2747 _$LT$std..io..stdio..Stdin$u20$as$u20$std..io..Read$GT$::read::h20516992200ffa65  (in zircon-loader) + 153  [0x10e0cc6b9]
    +                 2747 _$LT$std..io..stdio..StdinLock$u20$as$u20$std..io..Read$GT$::read::h928982a51067dcff  (in zircon-loader) + 136  [0x10e0cc7c8]
    +                   2747 read  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5981e]
    2747 Thread_5434345: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 230  [0x10e015cf6]
    +             2747 std::thread::local::LocalKey$LT$T$GT$::with::h9a87c09a8d17fb6a  (in zircon-loader) + 75  [0x10e016aab]
    +               2747 async_task::raw::RawTask$LT$F$C$R$C$S$C$T$GT$::run::h6456d856655f8d59  (in zircon-loader) + 123  [0x10e00ed4b]
    +                 2747 _$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::he0096e7024153045  (in zircon-loader) + 71  [0x10e00db67]
    +                   2747 _$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::hec07e9efe36cda6b  (in zircon-loader) + 1144  [0x10e00a5f8]
    +                     2747 zircon_syscall::Syscall::syscall::_$u7b$$u7b$closure$u7d$$u7d$::h1f28cb2e6b36de28  (in zircon-loader) + 13403  [0x10e00541b]
    +                       2747 zircon_syscall::vmo::_$LT$impl$u20$zircon_syscall..Syscall$GT$::sys_vmo_create_child::h71ceff3b3fd18aa2  (in zircon-loader) + 996  [0x10e02beb4]
    +                         2747 zircon_object::vm::vmo::VmObject::create_child::h0f6b0cc07c2553b6  (in zircon-loader) + 655  [0x10e046cef]
    +                           2747 _$LT$zircon_object..vm..vmo..paged..VMObjectPaged$u20$as$u20$zircon_object..vm..vmo..VMObjectTrait$GT$::create_child::hc1ca9a081ac52c4a  (in zircon-loader) + 802,805  [0x10e053992,0x10e053995]
    2747 Thread_5434346: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]
    +             2747 async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
    +               2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
    +                 2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]
    2747 Thread_5434347: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]
    +             2747 async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
    +               2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
    +                 2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]
    2747 Thread_5434348: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]
    +             2747 async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
    +               2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
    +                 2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]
    2747 Thread_5434349: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 230  [0x10e015cf6]
    +             2747 std::thread::local::LocalKey$LT$T$GT$::with::h9a87c09a8d17fb6a  (in zircon-loader) + 75  [0x10e016aab]
    +               2747 async_task::raw::RawTask$LT$F$C$R$C$S$C$T$GT$::run::h6456d856655f8d59  (in zircon-loader) + 123  [0x10e00ed4b]
    +                 2747 _$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::he0096e7024153045  (in zircon-loader) + 71  [0x10e00db67]
    +                   2747 _$LT$core..future..from_generator..GenFuture$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::hec07e9efe36cda6b  (in zircon-loader) + 1144  [0x10e00a5f8]
    +                     2747 zircon_syscall::Syscall::syscall::_$u7b$$u7b$closure$u7d$$u7d$::h1f28cb2e6b36de28  (in zircon-loader) + 10804  [0x10e0049f4]
    +                       2747 zircon_syscall::vmar::_$LT$impl$u20$zircon_syscall..Syscall$GT$::sys_vmar_map::h404285a223840450  (in zircon-loader) + 903  [0x10e02ab87]
    +                         2747 zircon_object::vm::vmar::VmAddressRegion::map_at_ext::h820dbffc9ee4821e  (in zircon-loader) + 43  [0x10e04ee3b]
    +                           2747 zircon_object::vm::vmar::VmAddressRegion::map_ext::h348afea46f4120a5  (in zircon-loader) + 968  [0x10e04f248]
    +                             2747 _$LT$zircon_object..vm..vmo..paged..VMObjectPaged$u20$as$u20$zircon_object..vm..vmo..VMObjectTrait$GT$::commit_page::h53fb7b4ee7fed7db  (in zircon-loader) + 36  [0x10e0533d4]
    +                               2747 zircon_object::vm::vmo::paged::VMObjectPaged::commit_page_internal::h4a75d48dc5c23aa0  (in zircon-loader) + 553  [0x10e054839]
    +                                 2747 zircon_object::vm::vmo::paged::VMObjectPaged::commit_page_internal::h4a75d48dc5c23aa0  (in zircon-loader) + 553  [0x10e054839]
    +                                   2747 zircon_object::vm::vmo::paged::VMObjectPaged::commit_page_internal::h4a75d48dc5c23aa0  (in zircon-loader) + 738,741  [0x10e0548f2,0x10e0548f5]
    2747 Thread_5434350: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]
    +             2747 async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
    +               2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
    +                 2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]
    2747 Thread_5434351: async-std/executor
    + 2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
    +   2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
    +     2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
    +       2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
    +         2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
    +           2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]
    +             2747 async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
    +               2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
    +                 2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]
    2747 Thread_5434352: async-std/executor
      2747 thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
        2747 _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
          2747 std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
            2747 _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
              2747 core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
                2747 std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]
                  2747 async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
                    2747 _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
                      2747 __psynch_cvwait  (in libsystem_kernel.dylib) + 10  [0x7fff6ee5b882]

Total number in stack (recursive counted multiple, when >=5):
        9       _$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::heacd975c874b9eab  (in zircon-loader) + 62  [0x10e0c8abe]
        9       _pthread_start  (in libsystem_pthread.dylib) + 148  [0x7fff6ef1c109]
        9       std::sys::unix::thread::Thread::new::thread_start::h1bdf9788fd716076  (in zircon-loader) + 38  [0x10e0d5cd6]
        9       thread_start  (in libsystem_pthread.dylib) + 15  [0x7fff6ef17b8b]
        8       core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h720862c8cb22eaf2  (in zircon-loader) + 113  [0x10e018901]
        7       __psynch_cvwait  (in libsystem_kernel.dylib) + 0  [0x7fff6ee5b878]
        7       _pthread_cond_wait  (in libsystem_pthread.dylib) + 698  [0x7fff6ef1c425]
        6       async_std::task::executor::sleepers::Sleepers::wait::he9dcfb6f811d8ffa  (in zircon-loader) + 102  [0x10e018e76]
        6       std::sys_common::backtrace::__rust_begin_short_backtrace::h02219bd1e1208d2d  (in zircon-loader) + 291  [0x10e015d33]

Sort by top of stack, same collapsed (when >= 5):
        __psynch_cvwait  (in libsystem_kernel.dylib)        19229
        _$LT$zircon_object..vm..vmo..paged..VMObjectPaged$u20$as$u20$zircon_object..vm..vmo..VMObjectTrait$GT$::create_child::hc1ca9a081ac52c4a  (in zircon-loader)        2747
        read  (in libsystem_kernel.dylib)        2747
        zircon_object::vm::vmo::paged::VMObjectPaged::commit_page_internal::h4a75d48dc5c23aa0  (in zircon-loader)        2747

Binary Images:
       0x10df5b000 -        0x10e162fef +zircon-loader (0) <197C02A8-7BA6-36B8-81A3-CBFC0DFC333E> /Users/*/zircon-loader
       0x11851e000 -        0x1185afeff  dyld (750.5) <1F893B81-89A5-3502-8510-95B97B9F730D> /usr/lib/dyld
    0x7fff6bcfd000 -     0x7fff6bcfefff  libSystem.B.dylib (1281.100.1) <DB8310F1-272D-3533-A840-3B390AF55C26> /usr/lib/libSystem.B.dylib
    0x7fff6bfe3000 -     0x7fff6c035fff  libc++.1.dylib (902.1) <08199809-33CA-321E-9B9D-FD5B2BC64580> /usr/lib/libc++.1.dylib
    0x7fff6c036000 -     0x7fff6c04bffb  libc++abi.dylib (902) <1C880020-396D-3F91-BE27-5A09A9239F68> /usr/lib/libc++abi.dylib
    0x7fff6db5d000 -     0x7fff6db90fde  libobjc.A.dylib (787.1) <20AC082F-2DB7-3974-A2D4-8C5E01787584> /usr/lib/libobjc.A.dylib
    0x7fff6dc64000 -     0x7fff6dc7cfff  libresolv.9.dylib (67.40.1) <92A522F9-95E2-35EE-A8AD-FC8DEE6B2C1F> /usr/lib/libresolv.9.dylib
    0x7fff6eaf9000 -     0x7fff6eafeff3  libcache.dylib (83) <5F90FFCE-403B-3724-991D-BA32401D99C5> /usr/lib/system/libcache.dylib
    0x7fff6eaff000 -     0x7fff6eb0afff  libcommonCrypto.dylib (60165) <C7A5E3F7-1E5A-3785-875A-B6647082B614> /usr/lib/system/libcommonCrypto.dylib
    0x7fff6eb0b000 -     0x7fff6eb12fff  libcompiler_rt.dylib (101.2) <A517E149-2D25-3C04-BCEF-F69149C85B18> /usr/lib/system/libcompiler_rt.dylib
    0x7fff6eb13000 -     0x7fff6eb1cff7  libcopyfile.dylib (166.40.1) <1A5270B5-0D97-35DA-9296-4F4A428BC6A2> /usr/lib/system/libcopyfile.dylib
    0x7fff6eb1d000 -     0x7fff6ebaffe3  libcorecrypto.dylib (866.100.30) <FCDEC0D1-8C30-3989-BDD1-996BBC715C29> /usr/lib/system/libcorecrypto.dylib
    0x7fff6ecbc000 -     0x7fff6ecfcff0  libdispatch.dylib (1173.100.2) <EB592997-B11C-3AB3-85B1-F725F3D0B412> /usr/lib/system/libdispatch.dylib
    0x7fff6ecfd000 -     0x7fff6ed33fff  libdyld.dylib (750.5) <D2A07EF5-A64B-3692-BE13-89DAA2EC5E80> /usr/lib/system/libdyld.dylib
    0x7fff6ed34000 -     0x7fff6ed34ffb  libkeymgr.dylib (30) <CC5A2B43-770B-3C6C-BA10-AA3A6B4A142D> /usr/lib/system/libkeymgr.dylib
    0x7fff6ed42000 -     0x7fff6ed42ff7  liblaunch.dylib (1738.100.39) <A7FF7357-600F-3014-8C28-A4F367717E8D> /usr/lib/system/liblaunch.dylib
    0x7fff6ed43000 -     0x7fff6ed48ff7  libmacho.dylib (959.0.1) <D8FED478-25A2-3844-AE4B-A5C9F9827615> /usr/lib/system/libmacho.dylib
    0x7fff6ed49000 -     0x7fff6ed4bff3  libquarantine.dylib (110.40.3) <51E0304F-AB11-3BF7-99DC-BB916CC9088B> /usr/lib/system/libquarantine.dylib
    0x7fff6ed4c000 -     0x7fff6ed4dff7  libremovefile.dylib (48) <078F29AB-26BA-3493-BCAA-E1E75A187521> /usr/lib/system/libremovefile.dylib
    0x7fff6ed4e000 -     0x7fff6ed65ff3  libsystem_asl.dylib (377.60.2) <0F1BAC19-2AE0-3F8E-9B90-AACF819B2BF7> /usr/lib/system/libsystem_asl.dylib
    0x7fff6ed66000 -     0x7fff6ed66ff7  libsystem_blocks.dylib (74) <32224AFF-C06F-3279-B753-097194EDEF49> /usr/lib/system/libsystem_blocks.dylib
    0x7fff6ed67000 -     0x7fff6edeefff  libsystem_c.dylib (1353.100.2) <4F5EED22-4D46-3F04-8C64-C492CDAD70EB> /usr/lib/system/libsystem_c.dylib
    0x7fff6edef000 -     0x7fff6edf2ffb  libsystem_configuration.dylib (1061.101.1) <2A2C778D-07EB-35C7-A954-8BF8FD74BD75> /usr/lib/system/libsystem_configuration.dylib
    0x7fff6edf3000 -     0x7fff6edf6fff  libsystem_coreservices.dylib (114) <FDA41CC4-170A-3D93-85BD-838A563B03C4> /usr/lib/system/libsystem_coreservices.dylib
    0x7fff6edf7000 -     0x7fff6edfffff  libsystem_darwin.dylib (1353.100.2) <B567B86D-8818-38A4-A861-03EB83B55867> /usr/lib/system/libsystem_darwin.dylib
    0x7fff6ee00000 -     0x7fff6ee07fff  libsystem_dnssd.dylib (1096.100.3) <7C690DF5-E119-33FB-85CD-9EFC67A36E40> /usr/lib/system/libsystem_dnssd.dylib
    0x7fff6ee08000 -     0x7fff6ee09ffb  libsystem_featureflags.dylib (17) <415D83EF-084C-3485-B757-53001870EA94> /usr/lib/system/libsystem_featureflags.dylib
    0x7fff6ee0a000 -     0x7fff6ee57ff7  libsystem_info.dylib (538) <17049D3F-C798-3651-B391-1551FC699D3E> /usr/lib/system/libsystem_info.dylib
    0x7fff6ee58000 -     0x7fff6ee84ff7  libsystem_kernel.dylib (6153.101.6) <E76440E1-D1E8-3D9A-8B47-D01F554FF1C4> /usr/lib/system/libsystem_kernel.dylib
    0x7fff6ee85000 -     0x7fff6eeccfff  libsystem_m.dylib (3178) <74741FA8-5C29-3241-9046-4FC91C6A6D4A> /usr/lib/system/libsystem_m.dylib
    0x7fff6eecd000 -     0x7fff6eef4fff  libsystem_malloc.dylib (283.100.5) <97833239-2F83-3AEB-A426-0593997C8A54> /usr/lib/system/libsystem_malloc.dylib
    0x7fff6eef5000 -     0x7fff6ef02ffb  libsystem_networkextension.dylib (1095.100.29) <C9E988B2-6A18-35C0-9577-63201E9D6018> /usr/lib/system/libsystem_networkextension.dylib
    0x7fff6ef03000 -     0x7fff6ef0cff7  libsystem_notify.dylib (241.100.2) <E405F84B-BD4F-3874-9755-CB3EC86E18D5> /usr/lib/system/libsystem_notify.dylib
    0x7fff6ef0d000 -     0x7fff6ef15fef  libsystem_platform.dylib (220.100.1) <6EF12F34-C33F-36BF-9A9A-2A35EA19EFE0> /usr/lib/system/libsystem_platform.dylib
    0x7fff6ef16000 -     0x7fff6ef20fff  libsystem_pthread.dylib (416.100.3) <A8514582-E000-3854-911A-0A73D2C79600> /usr/lib/system/libsystem_pthread.dylib
    0x7fff6ef21000 -     0x7fff6ef25ff3  libsystem_sandbox.dylib (1217.101.2) <E9D78CDE-FB67-32E7-BABC-9EFC23AA0DC6> /usr/lib/system/libsystem_sandbox.dylib
    0x7fff6ef26000 -     0x7fff6ef28fff  libsystem_secinit.dylib (62.100.2) <AAC639E5-7103-3366-A602-8FC6944E2C13> /usr/lib/system/libsystem_secinit.dylib
    0x7fff6ef29000 -     0x7fff6ef30ffb  libsystem_symptoms.dylib (1238.100.26) <487B92DE-45F9-39F9-A478-89BBD478157D> /usr/lib/system/libsystem_symptoms.dylib
    0x7fff6ef31000 -     0x7fff6ef47ff2  libsystem_trace.dylib (1147.100.8) <BB90B1FD-8C09-3DF4-BD8B-9E4AEADFEA2B> /usr/lib/system/libsystem_trace.dylib
    0x7fff6ef49000 -     0x7fff6ef4eff7  libunwind.dylib (35.4) <CC87C836-BE9D-334E-A0E6-0297D52E9D73> /usr/lib/system/libunwind.dylib
    0x7fff6ef4f000 -     0x7fff6ef84ffe  libxpc.dylib (1738.100.39) <32B0E31E-9DA3-328B-A962-BC9591B93537> /usr/lib/system/libxpc.dylib
Sample analysis of process 94967 written to file /dev/stdout

Implement Linux sys_fork and run shell on bare-metal

The new rCore is built upon Zircon objects. Since Zircon doesn't have fork operation, its virtual memory management object -- VMAR doesn't support cloning the entire virtual memory space.

To implement fork for Linux, first we need to add clone to VMAR: just create a new VMAR, clone all mapped VMOs and establish new mappings for them. The rest work is similar to vfork.

Implement Stream object

Stream is an IO interface of VMO, which is useful in media device drivers.

Implement the following syscalls:

  • zx_stream_create() - create a stream from a VMO
  • zx_stream_readv() - read data from the stream at the current seek offset
  • zx_stream_readv_at() - read data from the stream at a given offset
  • zx_stream_writev() - write data to the stream at the current seek offset
  • zx_stream_writev_at() - write data to the stream at a given offset
  • zx_stream_seek() - modify the current seek offset of the stream

Pass all StreamTest in core-tests.

Reference: https://fuchsia.dev/fuchsia-src/reference/kernel_objects/stream

[discuss] Replace libc with relibc

It seems that zCore depends on a prebuilt libc.so library. How about replacing libc with relibc, a libc written in pure Rust?

If this is approved, I will try to implement it.

macOS run busybox failed

OS: macOS 10.15.4 (19E287)
run busybox failed:

zCore % RUST_BACKTRACE=1 cargo run --release -p linux-loader /bin/busybox   
warning: custom registry support via the `registry.index` configuration is being removed, this functionality will not work in the future
    Finished release [optimized] target(s) in 0.49s
     Running `target/release/linux-loader /bin/busybox`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: EntryNotFound', /Users/xxx/.cargo/git/checkouts/rcore-fs-7fdf258332f6146d/e17b27b/rcore-fs-mountfs/src/lib.rs:115:24
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: rust_begin_unwind
   7: core::panicking::panic_fmt
   8: core::result::unwrap_failed
   9: rcore_fs_mountfs::MNode::overlaid_inode
  10: rcore_fs_mountfs::MNode::find
  11: linux_object::fs::create_root_fs
  12: linux_object::process::LinuxProcess::new
  13: <zircon_object::task::process::Process as linux_object::process::ProcessExt>::create_linux
  14: linux_loader::run
  15: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
  16: std::thread::local::LocalKey<T>::with
  17: std::thread::local::LocalKey<T>::with
  18: async_std::task::block_on::block_on
  19: linux_loader::main
  20: std::rt::lang_start::{{closure}}
  21: std::rt::lang_start_internal
  22: main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Packages Zircon's emulator needs (Include ZBI)

We know how to run Fuchsia to the graphical interface with emulator FEMU:

fuchsia/prebuilt/third_party/aemu/linux-x64/emulator \
-gpu swiftshader_indirect -fuchsia \
-kernel fuchsia/out/default/multiboot.bin -initrd /tmp/tmp_fuchsia/fuchsia-ssh.zbi -m 8192 -serial stdio \
-vga none -machine q35 -enable-kvm -net none \
-drive file=/tmp/tmp_fuchsia/fvm.blk,format=raw,if=none,id=vdisk -device virtio-blk-pci,drive=vdisk \
-append "kernel.serial=legacy"

Emulator needs a lot of file packages to start up the system: multiboot.bin, fvm.blk, fuchsia-ssh.zbi.
Let's explore how to generate these file packages.
By tracking Fuchsia's compilation, I figured it out.

Multiboot: fuchsia/out/default/multiboot.bin

Multiboot-compatible ELF kernel image. kernel bzImage type file

../../prebuilt/third_party/clang/linux-x64/bin/clang++ -o ./multiboot.bin.debug -Wl,-T,../../zircon/kernel/target/pc/multiboot/multiboot.ld -fuse-ld=lld -Wl,-z,combreloc -Wl,-z,relro -Wl,-z,now -Wl,-z,text -Wl,--pack-dyn-relocs=relr --target=x86_64-fuchsia -mcx16 -march=x86-64 -fcrash-diagnostics-dir=clang-crashreports -fcolor-diagnostics -Wl,--color-diagnostics -Wl,-z,max-page-size=4096 -fdebug-prefix-map=/mnt/SSD/xly/fuchsia/fuchsia/out/default.zircon=. -fdebug-prefix-map=/mnt/SSD/xly/fuchsia/fuchsia/out=.. -fdebug-prefix-map=/mnt/SSD/xly/fuchsia/fuchsia=../.. -no-canonical-prefixes -O2 -g3 -Wl,--icf=all -ffunction-sections -Wl,--gc-sections -fdata-sections -fno-exceptions -fno-rtti -m32 -mregparm=3 -fno-pic -Wl,--no-pie -nostdlib -static -Wl,--no-pie -noprofilelib -fno-sanitize-link-runtime -fno-exceptions -Wl,-Map,./multiboot.map -Wl,--start-group @'./multiboot.rsp'  -Wl,--end-group
|
V
../../prebuilt/third_party/clang/linux-x64/bin/llvm-objcopy --strip-sections  ./multiboot.bin.debug  ./multiboot.bin

Drive file: fvm.blk

fuchsia/out/default/obj/build/images/fvm.blk

host_x64/fvm obj/build/images/fvm.blk create --slice 8388608 --blob obj/build/images/blob.blk --data obj/build/images/data.blk

host_x64/blobfs --depfile --json-output blobs.json --compress obj/build/images/blob.blk create --manifest obj/build/images/blob.manifest
# blob.blk is blob type file, include files in the  blob.manifest

host_x64/minfs --depfile obj/build/images/data.blk create
# data.blk is empty, and it's encrypted data type

Ramdisk initrd: fuchsia-ssh.zbi

A Zircon Boot Image (ZBI) contains the kernel image and a RAM disk for the boot filesystem.

../../prebuilt/third_party/clang/linux-x64/bin/clang++ -o kernel-x64-clang/obj/kernel/image -Wl,-T,../../zircon/kernel/image.ld -Wl,--just-symbols,@kernel-x64-clang/gen/kernel/zircon.elf.rsp -fuse-ld=lld -Wl,-z,combreloc -Wl,-z,relro -Wl,-z,now -Wl,-z,text -Wl,--pack-dyn-relocs=relr --target=x86_64-fuchsia -mcx16 -march=x86-64 -fcrash-diagnostics-dir=clang-crashreports -fcolor-diagnostics -Wl,--color-diagnostics -Wl,-z,max-page-size=4096 -fdebug-prefix-map=fuchsia/out/default.zircon=. -fdebug-prefix-map=fuchsia/fuchsia/out=.. -fdebug-prefix-map=fuchsia=../.. -no-canonical-prefixes -O2 -g3 -Wl,--icf=all -fno-exceptions -fno-rtti -nostdlib -static -Wl,--no-pie -noprofilelib -fno-sanitize-link-runtime -fno-exceptions -fdata-sections -ffunction-sections -Wl,--gc-sections -fdata-sections -Wl,--build-id=none -Wl,-defsym,KERNEL_BASE=0xffffffff80100000 -Wl,-defsym,SMP_MAX_CPUS=32 -Wl,-defsym,BOOT_HEADER_SIZE=0x50 -Wl,-Map,kernel-x64-clang/obj/kernel/image.map -Wl,--start-group @'kernel-x64-clang/obj/kernel/image.rsp'  -Wl,--end-group 
# **Kernel** image
|
V
cd out/default.zircon ; ../../prebuilt/third_party/clang/linux-x64/bin/llvm-objcopy -O binary kernel-x64-clang/obj/kernel/image kernel-x64-clang/kernel.zbi
|
V
# kernel.zbi and files in various manifests and some specific files with --entry parameter
|
V
host_x64/zbi --output=fuchsia.zbi --depfile=fuchsia.zbi.d --complete=x64 --compressed=zstd obj/build/images/boot.manifest ../default.zircon/kernel-x64-clang/kernel.zbi obj/src/devices/bin/driver_manager/driver_manager.manifest obj/src/devices/devices.manifest obj/src/power/shutdown-shim/shutdown-shim.manifest obj/src/sys/bootstrap/root_manifests.manifest obj/src/sys/component_manager/component_manager_bootfs.manifest obj/src/security/policy/component_manager_policy.manifest --entry=config/devmgr=obj/build/images/devmgr_config.txt --entry=config/zxcrypt=obj/build/images/zxcrypt_config.txt --type=cmdline --entry=console.shell=true --entry=kernel.enable-debugging-syscalls=true --entry=kernel.enable-serial-syscalls=true --entry=netsvc.all-features=true --entry=netsvc.disable=false --entry=kernel.oom.behavior=reboot --entry=virtcon.hide-on-boot
# fuchsia/out/default/fuchsia.zbi

ZBI package

How to show contents of a zbi package:

host_x64/zbi -t -v input.zbi

How to decompless a zbi package:

host_x64/zbi --extract --output-dir=obj/build/images/fuchsia.zbi/bootfs --json-output=fuchsia.zbi.json fuchsia.zbi
# OR
host_x64/zbi -x -D fuchsia.zbi/bootfs input_fuchsia.zbi

How to merge a zbi package and a folder into a new zbi package:

host_x64/zbi -o output.zbi input.zbi input_dir/

Pi Support Strategy?

Dear Team,
Thanks for sharing this amazing project!
Was wondering if this project can be extended to run on a Raspberry-Pi?

If we think it a good idea, could the team please share some guidance on what might be important milestones to supporting Pi?

With a high level roadmap, I (or other ppl with same interest) can chip off the work and eventually we can have this OS running on Pis.

What do we think?

Build zCore kernel failed

OS: macOS 10.15.4 (19E287) , Ubuntu 18.4

build zCore kernel failed:

zCore % cd zCore && make run mode=release 
echo Building zCore kenel
Building zCore kenel
cargo build -Z build-std=core,alloc --target x86_64.json --release
warning: custom registry support via the `registry.index` configuration is being removed, this functionality will not work in the future
    Updating `git://mirrors.ustc.edu.cn/crates.io-index` index
warning: Patch `rustc-std-workspace-core v1.99.0 (/Users/xxx/.rustup/toolchains/nightly-2020-04-06-x86_64-apple-darwin/lib/rustlib/src/rust/src/tools/rustc-std-workspace-core)` was not used in the crate graph.
Patch `rustc-std-workspace-alloc v1.99.0 (/Users/xxx/.rustup/toolchains/nightly-2020-04-06-x86_64-apple-darwin/lib/rustlib/src/rust/src/tools/rustc-std-workspace-alloc)` was not used in the crate graph.
Patch `rustc-std-workspace-std v1.99.0 (/Users/xxx/.rustup/toolchains/nightly-2020-04-06-x86_64-apple-darwin/lib/rustlib/src/rust/src/tools/rustc-std-workspace-std)` was not used in the crate graph.
Check that the patched package version and available features are compatible
with the dependency requirements. If the patch has a different version from
what is locked in the Cargo.lock file, run `cargo update` to use the new
version. This may also occur with an optional dependency that is not enabled.
   Compiling rustc-std-workspace-core v1.0.0 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling rustc_version v0.2.3 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling bitflags v1.2.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling x86_64 v0.9.6 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling log v0.4.8 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling proc-macro-nested v0.1.4 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling trapframe v0.1.7 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling x86 v0.15.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling byteorder v1.3.4 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling x86_64 v0.10.1 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling proc-macro2 v1.0.12 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling rustversion v1.0.2 (registry `git://mirrors.ustc.edu.cn/crates.io-index`)
   Compiling rcore-console v0.1.0 (https://github.com/rcore-os/rcore-console?rev=a980897b#a980897b)
   Compiling zircon-syscall v0.1.0 (/Users/xxx/work/projects/zCore/zircon-syscall)
error[E0463]: can't find crate for `std`
  |
  = note: the `x86_64-10611178388697844167` target may not be installed

error: aborting due to previous error

For more information about this error, try `rustc --explain E0463`.
error: could not compile `rustc-std-workspace-core`.

To learn more, run the command again with --verbose.
warning: build failed, waiting for other jobs to finish...
error: build failed
make: *** [kernel] Error 101

Whether to validate flags/options?

from_bits_truncate() is used in some syscalls in linux-syscall and zircon-syscall, so it is possible that the input flag has an invalid bit set. Should this return Err? I'm not sure of the behavior of linux and zircon when this situation happens.

Failed to run on VirtualBox

The output shows that it fails on decompressing the ZBI:

userboot: ZX_ERR_IO_DATA_INTEGRITY: failed to decompress BOOTFS

Fail to run Zircon program on macOS and Ubuntu

macOS 10.14.5: Bus error: 10

RUST_LOG=debug cargo run --release -p zircon-loader prebuilt/zircon

1

Ubuntu 20.04: Segmentation fault

RUST_LOG=debug cargo run --release -p zircon-loader prebuilt/zircon

2

CANNOT run "ls" as a native linux program

  • Ubuntu 20.04 Desktop (64 bit)
  • rustup 1.21.1 (7832b2ebe 2019-12-20)
  • rustc 1.44.0-nightly (b543afca9 2020-04-05)
  • Followed README.md to build zCore
  • Run cargo run --release -p linux-loader /bin/busybox ls
  • Got the result
$ cargo run --release -p linux-loader /bin/busybox ls
    Finished release [optimized] target(s) in 0.04s
     Running `target/release/linux-loader /bin/busybox ls`
[ERROR][1] unknown syscall: 228. exit...

Is there anything missing in zCore kernel?

run zcore in win10 docker failed

The way to reproduce error and the error is show below:

cargo run --release -p linux-loader /bin/busybox ls
   Compiling kernel-hal-unix v0.1.0 (/home/vimer/project/os/zCore/kernel-hal-unix)
   Compiling linux-loader v0.1.0 (/home/vimer/project/os/zCore/linux-loader)
    Finished release [optimized] target(s) in 4.80s
     Running `target/release/linux-loader /bin/busybox ls`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: EINVAL', linux-loader/src/lib.rs:37:23
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

My environment is :

Linux 8a871de48133 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

image

Failed to follow README

The following error raised on my side:

$ make rootfs

wget http://dl-cdn.alpinelinux.org/alpine/v3.11/releases/x86_64/alpine-minirootfs-3.11.3-x86_64.tar.gz -O prebuilt/linux/alpine-minirootfs-3.11.3-x86_64.tar.gz
--2020-05-03 13:27:26--  http://dl-cdn.alpinelinux.org/alpine/v3.11/releases/x86_64/alpine-minirootfs-3.11.3-x86_64.tar.gz
Resolving dl-cdn.alpinelinux.org (dl-cdn.alpinelinux.org)... 151.101.228.249
Connecting to dl-cdn.alpinelinux.org (dl-cdn.alpinelinux.org)|151.101.228.249|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2723602 (2.6M) [application/octet-stream]
Saving to: ‘prebuilt/linux/alpine-minirootfs-3.11.3-x86_64.tar.gz’

prebuilt/linux/alpine-minirootf 100%[======================================================>]   2.60M  29.8KB/s    in 98s

2020-05-03 13:29:06 (27.0 KB/s) - ‘prebuilt/linux/alpine-minirootfs-3.11.3-x86_64.tar.gz’ saved [2723602/2723602]

mkdir -p rootfs
tar xf prebuilt/linux/alpine-minirootfs-3.11.3-x86_64.tar.gz -C rootfs
cp prebuilt/linux/libc-libos.so rootfs/lib/ld-musl-x86_64.so.1

$ cargo run --release -p linux-loader /bin/busybox ls

    Finished release [optimized] target(s) in 0.10s
     Running `target/release/linux-loader /bin/busybox ls`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: EINVAL', linux-loader/src/lib.rs:42:23
stack backtrace:
   0:        0x10bd4cc1f - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hcf90b7e47e11a9ce
   1:        0x10bd6afde - core::fmt::write::h560e714837db4b87
   2:        0x10bd4a537 - std::io::Write::write_fmt::h9d7b0a8de1542891
   3:        0x10bd4f0fa - std::panicking::default_hook::{{closure}}::hf1031e0cc4fa76c4
   4:        0x10bd4ee3c - std::panicking::default_hook::h89dea9edda9793a2
   5:        0x10bd4f6c8 - std::panicking::rust_panic_with_hook::h332622a460c53019
   6:        0x10bd4f292 - rust_begin_unwind
   7:        0x10bd7398f - core::panicking::panic_fmt::hfd0d665e5d65955b
   8:        0x10bd73895 - core::option::expect_none_failed::h7e7ae6bb50cb5378
   9:        0x10bce5a6b - linux_loader::run::ha92fbe9a6a32b970
  10:        0x10bc47080 - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::h19b465a7654e691b
  11:        0x10bc4e55b - std::thread::local::LocalKey<T>::with::hebd3256d48ffd818
  12:        0x10bc4e420 - std::thread::local::LocalKey<T>::with::he3e228234166e303
  13:        0x10bc45897 - async_std::task::block_on::block_on::h84c8c56dc07f8c25
  14:        0x10bc48305 - linux_loader::main::h7765ce3119d672d2
  15:        0x10bc4d7f6 - std::rt::lang_start::{{closure}}::h8b6d3ed30e178571
  16:        0x10bd4fa29 - std::rt::lang_start_internal::h6bb9eb30b55f695f
  17:        0x10bc48339 - main

I followed every step in README. Except I didn't run git lfs pull (is this caused by this skip?)
Or is the busybox ls a bad case for busybox [args]?
Or anything else I'm missing? Thanks.

panicked at 'attempt to add with overflow'

Call to sys_pci_init may panick due to overflow adding u8

UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
      FS0: Alias(s):HD0a65535a1:;BLK1:
          PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/HD(1,MBR,0xBE1AFDFA,0x3F,0xFBFC1)
     BLK2: Alias(s):
          PciRoot(0x0)/Pci(0x2,0x0)/Sata(0x0,0xFFFF,0x0)
     BLK0: Alias(s):
          PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell> \EFI\boot\bootx64.efi
INFO: bootloader is running
INFO: opening file: \EFI\Boot\rboot.conf
INFO: loading file to memory
INFO: switching graphic mode
INFO: config: Config {
INFO:     kernel_stack_address: 0xffffff0100000000,
INFO:     kernel_stack_size: 0x200,
INFO:     physical_memory_offset: 0xffff800000000000,
INFO:     kernel_path: "\\EFI\\zCore\\zcore.elf",
INFO:     resolution: Some(
INFO:         (
INFO:             0x400,
INFO:             0x300,
INFO:         ),
INFO:     ),
INFO:     initramfs: Some(
INFO:         "\\EFI\\zCore\\fuchsia.zbi",
INFO:     ),
INFO:     cmdline: "LOG=error",
INFO: }
INFO: acpi2: 0x7fbfa014
INFO: smbios: 0x7fbcc000
INFO: opening file: \EFI\zCore\zcore.elf
INFO: loading file to memory
INFO: opening file: \EFI\zCore\fuchsia.zbi
INFO: loading file to memory
INFO: mapping ELF
INFO: mapping stack at 0xffffff0100000000
INFO: mapping physical memory
INFO: exit boot services
userboot: option "LOG=error"
userboot: option "console.shell=true"
userboot: decompressed BOOTFS to VMO!
userboot: searching bootfs for 'bin/bootsvc'
userboot: 'bin/bootsvc' has PT_INTERP "lib/ld.so.1"
userboot: searching bootfs for 'lib/ld.so.1'
userboot: userboot: loaded lib/ld.so.1 at 0x28200000000, entry point 0x282000575cc
userboot: userboot: loaded vDSO at 0x282000ad000, entry point 0x282000b4e1a
userboot: process bin/bootsvc started.
userboot: waiting for loader-service requests...
userboot: searching bootfs for 'lib/liblaunchpad.so'
userboot: searching bootfs for 'lib/libfdio.so'
userboot: searching bootfs for 'lib/libtrace-engine.so'
userboot: searching bootfs for 'lib/libasync-default.so'
userboot: searching bootfs for 'lib/libmemfs.so'
userboot: searching bootfs for 'lib/libc++.so.2'
userboot: searching bootfs for 'lib/libc++abi.so.1'
userboot: searching bootfs for 'lib/libunwind.so.1'
{{{reset}}}
{{{module:0:<application>:elf:dbd5f97ed489b42b}}}
{{{mmap:0x20200000000:0x30000:load:0:r:0}}}
{{{mmap:0x20200030000:0xfd000:load:0:rx:0x30000}}}
{{{mmap:0x2020012d000:0xf000:load:0:rw:0x12d000}}}
{{{mmap:0x2020013c000:0x1000:load:0:rw:0x13c000}}}
dso: id=dbd5f97ed489b42b base=0x0000020200000000 name=<application>
{{{module:0x3:liblaunchpad.so:elf:b76f0d8110442057}}}
{{{mmap:0x282000f6000:0x3000:load:0x3:r:0}}}
{{{mmap:0x282000f9000:0x4000:load:0x3:rx:0x3000}}}
{{{mmap:0x282000fd000:0x1000:load:0x3:rw:0x7000}}}
{{{mmap:0x282000fe000:0x1000:load:0x3:rw:0x8000}}}
dso: id=b76f0d8110442057 base=0x00000282000f6000 name=liblaunchpad.so
{{{module:0x2:<vDSO>:elf:4eaf7db870868da0}}}
{{{mmap:0x282000ad000:0x7000:load:0x2:r:0}}}
{{{mmap:0x282000b4000:0x2000:load:0x2:rx:0x7000}}}
dso: id=4eaf7db870868da0 base=0x00000282000ad000 name=<vDSO>
{{{module:0x4:libfdio.so:elf:c3bf7a8a244e7287}}}
{{{mmap:0x282000ff000:0x12000:load:0x4:r:0}}}
{{{mmap:0x28200111000:0x3c000:load:0x4:rx:0x12000}}}
{{{mmap:0x2820014d000:0x7000:load:0x4:rw:0x4e000}}}
{{{mmap:0x28200154000:0x4000:load:0x4:rw:0x55000}}}
dso: id=c3bf7a8a244e7287 base=0x00000282000ff000 name=libfdio.so
{{{module:0x5:libtrace-engine.so:elf:f0dd4c361cb612f2}}}
{{{mmap:0x28200158000:0x4000:load:0x5:r:0}}}
{{{mmap:0x2820015c000:0x6000:load:0x5:rx:0x4000}}}
{{{mmap:0x28200162000:0x1000:load:0x5:rw:0xa000}}}
{{{mmap:0x28200163000:0x1000:load:0x5:rw:0xb000}}}
dso: id=f0dd4c361cb612f2 base=0x0000028200158000 name=libtrace-engine.so
{{{module:0x6:libasync-default.so:elf:99150f38cfad363e}}}
{{{mmap:0x28200164000:0x1000:load:0x6:r:0}}}
{{{mmap:0x28200165000:0x1000:load:0x6:rx:0x1000}}}
{{{mmap:0x28200166000:0x1000:load:0x6:rw:0x2000}}}
dso: id=99150f38cfad363e base=0x0000028200164000 name=libasync-default.so
{{{module:0x7:libmemfs.so:elf:c78ca7d6f498fbff}}}
{{{mmap:0x28200167000:0xc000:load:0x7:r:0}}}
{{{mmap:0x28200173000:0x2d000:load:0x7:rx:0xc000}}}
{{{mmap:0x282001a0000:0x5000:load:0x7:rw:0x39000}}}
{{{mmap:0x282001a5000:0x1000:load:0x7:rw:0x3e000}}}
dso: id=c78ca7d6f498fbff base=0x0000028200167000 name=libmemfs.so
{{{module:0x8:libc++.so.2:elf:b93b2e97bb80b9ea}}}
{{{mmap:0x282001a6000:0x53000:load:0x8:r:0}}}
{{{mmap:0x282001f9000:0x74000:load:0x8:rx:0x53000}}}
{{{mmap:0x2820026d000:0x6000:load:0x8:rw:0xc7000}}}
{{{mmap:0x28200273000:0x7000:load:0x8:rw:0xcd000}}}
dso: id=b93b2e97bb80b9ea base=0x00000282001a6000 name=libc++.so.2
{{{module:0x9:libc++abi.so.1:elf:50ce8a297362fa00}}}
{{{mmap:0x2820027a000:0x18000:load:0x9:r:0}}}
{{{mmap:0x28200292000:0x1c000:load:0x9:rx:0x18000}}}
{{{mmap:0x282002ae000:0x4000:load:0x9:rw:0x34000}}}
{{{mmap:0x282002b2000:0x1000:load:0x9:rw:0x38000}}}
dso: id=50ce8a297362fa00 base=0x000002820027a000 name=libc++abi.so.1
{{{module:0x1:libc.so:elf:0e81ca5ebfa5379b}}}
{{{mmap:0x28200000000:0x4f000:load:0x1:r:0}}}
{{{mmap:0x2820004f000:0x59000:load:0x1:rx:0x4f000}}}
{{{mmap:0x282000a8000:0x2000:load:0x1:rw:0xa8000}}}
{{{mmap:0x282000aa000:0x3000:load:0x1:rw:0xaa000}}}
dso: id=0e81ca5ebfa5379b base=0x0000028200000000 name=libc.so
{{{module:0xa:libunwind.so.1:elf:b38531532aba8b47}}}
{{{mmap:0x282002b3000:0x4000:load:0xa:r:0}}}
{{{mmap:0x282002b7000:0x6000:load:0xa:rx:0x4000}}}
{{{mmap:0x282002bd000:0x1000:load:0xa:rw:0xa000}}}
{{{mmap:0x282002be000:0x1000:load:0xa:rw:0xb000}}}
dso: id=b38531532aba8b47 base=0x00000282002b3000 name=libunwind.so.1
userboot: loader-service channel peer closed
bootsvc: Starting...
userboot: finished!
bootsvc: Taking root resource handle...
bootsvc: Creating bootfs service...
bootsvc: Retrieving boot image...
bootsvc: Decommitted BOOTDATA VMO from 0 to 0x4dbb000
bootsvc: Loading boot arguments...
bootsvc: Creating svcfs service...
bootsvc: Loading kernel VMOs...
bootsvc: Creating loader service...
bootsvc: Launching next process...
bootsvc: bootsvc.next = bin/component_manager,fuchsia-boot:///#meta/root.cm,--use-builtin-process-launcher
bootsvc: Launched bin/component_manager
[component_manager] INFO: Component manager is starting up...
fshost: watching for exit
driver_manager: launch /boot/bin/svchost (svchost) OK
console.shell: enabled
driver_manager: launch /boot/bin/pwrbtn-monitor (pwrbtn-monitor) OK
driver_manager: launch /boot/bin/miscsvc (miscsvc) OK
driver_manager: launch /boot/bin/device-name-provider (device-name-provider) OK
driver_manager: launch /boot/bin/virtual-console (virtual-console) OK
driver_manager: launch /boot/bin/sh (sh:console) OK
$ driver_manager: launch devhost 'driver_host:sys': pid=3499
driver_manager: launch devhost 'driver_host:test': pid=3548
driver_manager: launch devhost 'driver_host:root': pid=3613
driver_manager: launch devhost 'driver_host:misc': pid=3699
driver_host: create device drv='/boot/driver/platform-bus.so' args=''
Invalid zbi_board_info_t VMO
driver_host[sys/platform] bind driver '/boot/driver/platform-bus-x86.so'
driver_host[proxy] bind driver '/boot/driver/ethertap.so'
[113.321267243s ERROR 0:0] Skip IOPORTS_REQUEST
driver_host[proxy] bind driver '/boot/driver/test.so'
driver_host[proxy] bind driver '/boot/driver/virtual_audio_driver.so'
driver_host[proxy] bind driver '/boot/driver/builtin.so'
driver_host[proxy] bind driver '/boot/driver/demo-fifo.so'
Init: not using IOMMU
PlatformBus: set board name to "Standard PC (Q35 + ICH9, 2009)"
PlatformBus: set bootloader vendor to "EFI Development Kit II / OVMF"
driver_host[proxy] bind driver '/boot/driver/ktrace.so'
driver_host[sys/cpu-trace] bind driver '/boot/driver/cpu-trace.so'
driver_host[proxy] bind driver '/boot/driver/ram-nand.so'
[137.588546177s ERROR 0:0] syscall unimplemented: MTRACE_CONTROL
GetHwProperties: No PM support
IntelPT: No PT support
driver_host[sys/cpu-trace] bind driver '/boot/driver/cpu-trace.so' failed: -2
driver_host[sys/platform/00:00:1b] bind driver '/boot/driver/sysmem.so'
driver_host[proxy] bind driver '/boot/driver/ramdisk.so'
driver_manager: rpc: bind-driver 'cpu-trace' status -2
acpi-pwrbtn: initialized
driver_host[sys/platform/acpi/acpi-pwrbtn] bind driver '/boot/driver/hid.so'
driver_host[sys/platform/acpi/acpi-pwrbtn/hid-device-000] bind driver '/boot/driver/hid-input-report.so'
Can't process HID report descriptor for, all parsing attempts failed.
driver_host[sys/platform/acpi/acpi-pwrbtn/hid-device-000] bind driver '/boot/driver/hid-input-report.so' failed: -1
driver_manager: rpc: bind-driver 'hid-device-000' status -1
[149.262838831s ERROR 0:0] 

panicked at 'attempt to add with overflow', /mnt/c/root/works/code/git/zCore/zircon-syscall/src/pci.rs:111:33
[149.275560197s ERROR 0:0] KCounters {
    "exceptions.user": 30570,
    "exceptions.timer": 3469,
    "exceptions.pgfault": 0,
    "Process.create": 19,
    "Process.destroy": 1,
    "Thread.create": 45,
    "Thread.destroy": 4,
    "Channel.create": 1710,
    "Channel.destroy": 1190,
    "Job.create": 11,
    "Job.destroy": 0,
    "Event.create": 9,
    "Event.destroy": 2,
    "Timer.create": 25,
    "Timer.destroy": 0,
    "EventPair.create": 44,
    "EventPair.destroy": 0,
    "vmo.page_alloc": 1193348,
    "vmo.page_dealloc": 1066167,
    "VmObject.create": 1134,
    "VmObject.destroy": 72,
    "VmAddressRegion.create": 387,
    "VmAddressRegion.destroy": 23,
}

Userspace kcounter is broken on zCore

$ kcounter
exceptions.user = 13528378183450624 [rate overflow]
exceptions.timer = 0
exceptions.pgfault = 0
Channel.create = 0
Channel.destroy = 0
# ... all zeros

Cherry-pick standalone Fuchsia/Zircon Emulator/QEMU from the Fuchsia build environment

A Standalone Fuchsia Emulator

After compiling a complete Fuchsia OS, we can execute the following commands to run the native emulator FEMU :
cd $FUCHSIA_DIR
fx emu -N
But this way we don't know what FEMU is actually doing, and we can't run FEMU outside the Fuchsia build environment.

So I picked out these files and directories FEMU needs. And organized into LIST A below.
Copy the Fuchsia files and directories in LIST A to LinuxOS without Fuchsia build environment. Keep the directory structure.

Setup network:
sudo ip tuntap add dev qemu mode tap user $USER
sudo ifconfig qemu up

Then run Fuchsia Emulator(FEMU) with ssh access:

tools/devshell/emu -N

You can also add parameters to accelerate graphic:
--host-gpu , using the host GPU
--software-gpu ,software rendering using SwiftShader

prebuilt/third_party/aemu/linux-x64/emulator will be called. See the detailed operating parameters:

fuchsia/prebuilt/third_party/aemu/linux-x64/emulator -feature VirtioInput,GLDirectMem,KVM,Vulkan -window-size 1280x800 -gpu auto -fuchsia -kernel fuchsia/out/default/multiboot.bin -initrd /tmp/tmp.eu8Jd9nVUm/fuchsia-ssh.zbi -m 8192 -serial stdio -vga none -device virtio-keyboard-pci -device virtio_input_multi_touch_pci_1 -smp 4,threads=2 -machine q35 -device isa-debug-exit,iobase=0xf4,iosize=0x04 -enable-kvm -cpu host,migratable=no,+invtsc -netdev type=tap,ifname=qemu,id=net0,script=no -device e1000,netdev=net0,mac=52:54:00:63:5e:7a -drive file=/tmp/tmp.eu8Jd9nVUm/fvm.blk,format=raw,if=none,id=vdisk -device virtio-blk-pci,drive=vdisk -append 'TERM=xterm-256color kernel.serial=legacy kernel.entropy-mixin=14260cdcbbc4515f507ec9f9a6294b81ea2b331365e06d764daa7ff48cdcf0c7 kernel.halt-on-panic=true '

Run&Debug Zircon under QEMU

Normally, the following command can run the Fuchsia QEMU:
fx qemu -- -s

Alternatively, We can construct a QEMU excution environment for Zircon.
Add these files and directories in LIST B below. Keep the directory structure.
Run the following command to be able to attach with GDB later:

tools/devshell/qemu -- -s

fuchsia/prebuilt/third_party/qemu/linux-x64/bin/qemu-system-x86_64 will be called.
The detailed QEMU operating parameters:

fuchsia/prebuilt/third_party/qemu/linux-x64/bin/qemu-system-x86_64 -kernel fuchsia/out/default/multiboot.bin -initrd fuchsia/out/default/tmp.8yN/fuchsia-ssh.zbi -m 8192 -nographic -drive file=fuchsia/out/default/tmp.8yN/fvm.blk,format=raw,if=none,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0 -nic none -smp 4,threads=2 -machine q35 -device isa-debug-exit,iobase=0xf4,iosize=0x04 -fw_cfg name=etc/sercon-port,string=0 -cpu Haswell,+smap,-check,-fsgsbase -append 'TERM=xterm-256color kernel.serial=legacy kernel.entropy-mixin=cb8755a857c99d8ac8308220fe065a0904d6b660a8dcbfacdb7870cf91115abb kernel.halt-on-panic=true ' -s

According to the detailed QEMU operating parameters, we can manually generate the required files.
Generate initrd file and drive file:
fuchsia/out/default.zircon/tools/zbi --compressed=zstd -o ./fuchsia-ssh.zbi fuchsia/out/default/fuchsia.zbi --entry data/ssh/authorized_keys=fuchsia/.ssh/authorized_keys

source fuchsia/tools/devshell/lib/fvm.sh HOST_OUT_DIR=$PWD/fuchsia/out/default/host_x64 fx-fvm-extend-image fuchsia/out/default/obj/build/images/fvm.blk ./fvm.blk

At this time we can manually modify the QEMU parameters. For example, to replace kernel or file system.
fuchsia/prebuilt/third_party/qemu/linux-x64/bin/qemu-system-x86_64 -kernel fuchsia/out/default.zircon/multiboot.bin -initrd ./fuchsia-ssh.zbi -m 2G -display none -drive file=./fvm.blk,format=raw,if=none,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0 -serial stdio -append 'kernel.serial=legacy kernel.halt-on-panic=true ' -s

Now we can debug the kernel with "-s" parameter.

gdb out/default.zircon/kernel-x64-clang/obj/kernel/zircon.elf -x ./out/default.zircon/kernel-x64-clang/obj/kernel/zircon.elf-gdb.py
(gdb) target extended-remote :1234
(gdb) break lk_main
(gdb) continue
^C
(gdb) info threads

zircon.elf-gdb.py is gdb's Zircon debugging script.


LIST A for FEMU
tools/devshell/
./.fx-build-dir
./.config
./.ssh/authorized_keys
prebuilt/third_party/aemu/linux-x64/
prebuilt/third_party/grpcwebproxy/linux-x64/

out/default/rust-project.json
out/default/fx.config
out/default/args.gn

out/default/fuchsia.zbi
out/default/fuchsia.zbi
out/default/zedboot.zbi
out/default/zedboot.zbi
out/default/fuchsia.esp.blk
out/default/obj/build/images/blob.blk
out/default/obj/build/images/data.blk
out/default/obj/build/images/fvm.blk
out/default/obj/build/images/fvm.sparse.blk
out/default/obj/build/images/fvm.blob.sparse.blk
out/default/multiboot.bin
out/default/zedboot.esp.blk
out/default/netboot.zbi
out/default/netboot.zbi

out/default/host-tools/device-finder
out/default/host_x64/fvm

out/default.zircon/tools/
LIST B for Zircon using QEMU
/zircon/scripts/
prebuilt/third_party/qemu/linux-x64/
out/default.zircon/multiboot.bin
out/default.zircon/kernel-x64-clang/obj/kernel/zircon.elf
out/default.zircon/kernel-x64-clang/obj/kernel/zircon.elf-gdb.py

macOS 编译运行报错 - Did not find ELF magic number

macOS 10.15.4 (19E287)
按照要求安装了依赖,编译成功但运行不起来

  1. cargo run --release -p zircon-loader prebuilt/zircon
xxx@xxx zCore % RUST_BACKTRACE=1 cargo run --release -p zircon-loader prebuilt/zircon

warning: custom registry support via the `registry.index` configuration is being removed, this functionality will not work in the future
    Finished release [optimized] target(s) in 0.13s
     Running `target/release/zircon-loader prebuilt/zircon`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "Did not find ELF magic number"', /Users/xxx/work/projects/zCore/zircon-loader/src/lib.rs:64:19
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: rust_begin_unwind
   7: core::panicking::panic_fmt
   8: core::option::expect_none_failed
   9: zircon_loader::run_userboot
  10: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
  11: std::thread::local::LocalKey<T>::with
  12: std::thread::local::LocalKey<T>::with
  13: async_std::task::block_on::block_on
  14: zircon_loader::main
  15: std::rt::lang_start::{{closure}}
  16: std::rt::lang_start_internal
  17: main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Implement zx_thread_*_state

This is used by user space exception handler to read and modify the context of the thread that triggers an exception to make the thread recovered from exception.

Implement syscall:

  • zx_thread_read_state [doc]
  • zx_thread_write_state [doc]

Support thread state kind (x86):

  • ZX_THREAD_STATE_GENERAL_REGS
  • ZX_THREAD_STATE_FP_REGS
  • ZX_THREAD_STATE_VECTOR_REGS
  • ZX_THREAD_STATE_DEBUG_REGS
  • ZX_THREAD_STATE_SINGLE_STEP
  • ZX_THREAD_X86_REGISTER_FS
  • ZX_THREAD_X86_REGISTER_GS

what is git lfs?

In readme, there is git lfs command. It's not a git command.

Do you mean something like git submodule update --init ?

Recover naive VMO implementation

To achieve efficient copy-on-write, current VMOPaged implementation uses an ingenious data structure, which introduced complexity and endless bugs.

For example, an early version(e0ea3b0) can steadily run Zircon to shell in libos. But now it will trigger SIGFAULT or SIGBUS (#52). Even on bare-metal, sometimes there are mysterious memory errors. These bugs are difficult to fix and impact the functionality.

So for simplicity and stability, I'd like to restore the historical version of VMOPaged.
Current version will not be affected and we will continue to maintain them.

Build zCore kernel failed

OS: macOS 10.15.4

shuais@Macintosh zCore % cd zCore && make run mode=release
echo Building zCore kenel
Building zCore kenel
cargo build -Z build-std=core,alloc --target x86_64.json --release
Updating git repository https://github.com/rcore-os/bitmap-allocator
Updating crates.io index
Updating git repository https://github.com/PanQL/executor.git
error: failed to get rboot as a dependency of package zcore v0.1.0 (/Users/shuais/zCore/zCore)

Caused by:
failed to load source for dependency rboot

Caused by:
Unable to update /Users/shuais/zCore/rboot

Caused by:
failed to read /Users/shuais/zCore/rboot/Cargo.toml

Caused by:
No such file or directory (os error 2)
make: *** [kernel] Error 101

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.