Giter Site home page Giter Site logo

keystone's Introduction

Keystone: An Open-Source Secure Enclave Framework for RISC-V Processors

Documentation Status Build Status

Visit Project Website for more information.

Introduction

Keystone is an open-source project that builds trusted execution environments (TEEs) for RISC-V systems. Its hardware-enforced and software-defined memory isolation enables trusted computing (a.k.a. confidential computing) with various threat models and functionalities. The implementation is platform-agnostic, making Keystone portable across different RISC-V platforms with minimal engineering efforts.

Goals

Keystone is a free and open framework for architecting and deploying TEEs on RISC-V hardware platforms. The project's goals are:

  • Enable TEE on (almost) all RISC-V processors: Keystone aims to support as many RISC-V processor cores that follow RISC-V standard ISA and sub-ISAs as possible. This will help hardware designers and manufacturers to enable TEE with minimal efforts.

  • Make TEE easy to customize depending on needs: while providing simple TEE features, Keystone also aims to allow various customization that depends on platform-specific features or non-standard sub-ISAs. We borrow the concept from software-defined network, where hardware platform provides primitives and the software leverages the primitives to implement specific functionalities or meet security requirements.

  • Reduce the cost of building TEE: Keystone aims to reduce the cost of building TEE or TEE-based systems. We achieve this by reusing the implementation across multiple different platforms, reducing hardware integration cost, reducing verification cost, and integrating with existing software tools. We hope that anyone can simply extend Keystone to build their own novel TEE design with very low cost.

Status

Keystone started as an academic project that helps researchers to build and test their ideas. Now, Keystone is an Incubation Stage open-source project of the Confidential Computing Consortium (CCC) under the Linux Foundation.

Keystone has helped many researchers focus on their creative ideas instead of building TEE by themselves from scratch. This resulted in many innovative research projects and publications, which have been pushing the technical advancement of TEEs.

We are currently trying to make Keystone production-ready. You can find the latest general roadmap of Keystone here

Here are some ongoing and/or planned efforts towards the goal:

  • Technical Improvements: Make Keystone more usable and on par with existing industry solutions, including memory isolation improvement, better application and hardware support, and additional features.

  • Parity with Industry Standards: Make Keystone follow the industry standard. This includes standard cryptography, measured boot, and remote attestation protocols.

  • Hardware Integration: Partner with RISC-V hardware designer/vendor to fully integrate with the hardware. This includes integration with hardware root-of-trust, memory encryption engine, and crypto accelerators.

Documentation

See docs for getting started.

Hardware Support

Keystone requires a standard RISC-V platform with a hardware root of trust --- including secure key storage and measured boot. Currently, no hardware root of trust has been designed or manufactured specifically for Keystone. If you have a open-source root-of-trust we'd love to integrate with it!

As this project focuses more on the software stack and the toolchain, you can still run the full Keystone software stack on top of a few RISC-V platforms without a real root-of-trust. See https://github.com/keystone-enclave/keystone/tree/master/sm/plat for the supported platforms. In general, generic should work with most of the standard RISC-V cores as long as they support:

  • RV64 with SV39 addressing mode (or RV32 with SV32)
  • M/S/U privilege modes
  • More than 4 PMP registers

For full security, platform architect needs to provide the followings

  • Entropy source (and ideally a platform specific random number generator)
  • Measured boot
  • Secure on-chip key storage

Keystone doesn’t provide high-performance hardware-based memory encryption, as it requires a proprietary memory controller. Instead, it provides an example software-based encryption, which uses scratchpad SRAM (if any) to encrypt physical pages.

Team

Contributors

  • Gregor Haas
  • Evgeny Pobachienko
  • Jakob Sorensen
  • David Kholbrenner
  • Alex Thomas
  • Cathy Lu
  • Gui Andrade
  • Kevin Chen
  • Stephan Kaminsky
  • Dayeol Lee (Maintainer)

Advisors

  • David Kohlbrenner @ UW
  • Shweta Shinde @ ETH Zurich
  • Krste Asanovic @ UCB
  • Dawn Song @ UCB

License

Keystone is under BSD-3.

Contributing

See CONTRIBUTING.md

Citation

If you want to cite the project, please use the following bibtex:

@inproceedings{lee2019keystone,
    title={Keystone: An Open Framework for Architecting Trusted Execution Environments},
    author={Dayeol Lee and David Kohlbrenner and Shweta Shinde and Krste Asanovic and Dawn Song},
    year={2020},
    booktitle = {Proceedings of the Fifteenth European Conference on Computer Systems},
    series = {EuroSys’20}
}

keystone's People

Contributors

0xmichalis avatar a4lg avatar andreaskuster avatar anydayeol avatar archshift avatar benlaurie avatar cathylu10 avatar dayeol avatar dkohlbre avatar eddyim avatar eric-unc avatar evgenyp67 avatar grg-haas avatar gubaer avatar jarkkojs avatar jfoley8 avatar khanghua1505 avatar khoslaventures avatar kkrentz avatar mcd500 avatar msanft avatar msingla403 avatar nanamiiiii avatar nisiyama-suzune avatar pcotret avatar philippgie avatar red-robby avatar thaumicmekanism avatar veeyceey avatar zchn 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

keystone's Issues

Watchdog timers for scheduling and switching

Currently, enclaves have the ability to simply never exit while running.

We want the following behavior:

A scheduling (timer) interrupt from the OS may arrive to the runtime.
The runtime is expected to save state and context switch out.
The sm is expected to enforce a timeout on this context switch, and kill the enclave if it does not save and exit expediently.

This will require (at least):

  • Updating the timer interrupt handling on entering an enclave to be accurate to the scheduling timer interrupt from the OS, and inform the sm.
  • Updating the sm to start a watchdog timer that is handled by the sm.

Enclave Hash Calculation in SDK

Since we have some good ELF libraries in SDK, we can calculate the hash in the user space.
We need a separate util that calculates the hash of enclave based on the parameters and the ELF files.

Enable build in Mac OS X

Since keystone uses QEMU, it actually runs on any platform.
Need to test build in OS X and pack build scripts

[Issue] No easy method to move custom eapps to the HiFive build.

Currently the only way to do this is via:

copying keystone-demo bins into sdk/bin and running hifive make, or by copying them into hifive-work/buildroot_initramfs/target/root/
and then running hifive make
(Credit to @dkohlbre for this current solution)

Though an inclusion of this in a make file would make it easier for developers.

Make Enclave Runner Configurable with command-line Options

The only runner we have in sdk is test-runner, which is shared by all tests (as well as SeL4 booting).
There're several configurable parameters such as freemem size, untrusted memory (shared buffer) size, and so on.
We want them to be configurable by passing command line arguments.
This issue is also related to the measurement utility #74

解压异常,fast-setup.sh运行出错

firesim-riscv-tools-prebuilt-2.0/distrib.tar.partbn
firesim-riscv-tools-prebuilt-2.0/distrib.tar.partbo
firesim-riscv-tools-prebuilt-2.0/distrib.tar.partbp
firesim-riscv-tools-prebuilt-2.0/distrib.tar.partbq

gzip: stdin: unexpected end of file
tar: 归档文件中异常的 EOF
tar: 归档文件中异常的 EOF
tar: Error is not recoverable: exiting now
./fast-setup.sh: 行 33: ./installrelease.sh: 没有那个文件或目录
mv: 无法获取'distrib' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'riscv' 的文件状态(stat): 没有那个文件或目录
Toolchain has been installed in /home/whch/keystone/riscv

Correct type definitions to not use reserved naming

We are using a lot of _t types we created. These are reserved names.
Current proposal is to move to _kt for keystone-type.

Should we require ALL keystone types to have this naming convention? (Or just typedefs of non-struct types)

ncurses 6.1 Configuring configure: error: C compiler cannot create executables

I tryed to use fast-setup first, but it didn't work. After that I saw your discussion. Then I turned to manual setup. Although the process was very slow and difficult, it completed and it reached to 1.2.1.3.1. Build All. I used "make" first and I came across the problem.

$make
mkdir -p buildroot/dl
make -f hifive.mk
make[1]: Entering directory '/home/gw/keystone'
make -s -C /home/gw/keystone/buildroot RISCV=/home/gw/keystone/riscv-gnu-toolchain/riscv PATH=/home/gw/keystone/riscv-gnu-toolchain/riscv/bin:/home/gw/bin:/home/gw/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:home/keystone/riscv/bin:/home/gw/keystone/riscv-gnu-toolchain/riscv/bin O=/home/gw/keystone/hifive-work/buildroot_initramfs
make[2]: Entering directory '/home/gw/keystone/buildroot'

ncurses 6.1 Configuring
configure: error: C compiler cannot create executables
package/pkg-generic.mk:228: recipe for target '/home/gw/keystone/hifive-work/buildroot_initramfs/build/ncurses-6.1/.stamp_configured' failed
make[3]: *** [/home/gw/keystone/hifive-work/buildroot_initramfs/build/ncurses-6.1/.stamp_configured] Error 77
Makefile:84: recipe for target '_all' failed
make[2]: *** [_all] Error 2
make[2]: Leaving directory '/home/gw/keystone/buildroot'
hifive.mk:62: recipe for target '/home/gw/keystone/hifive-work/buildroot_initramfs/images/rootfs.tar' failed
make[1]: *** [/home/gw/keystone/hifive-work/buildroot_initramfs/images/rootfs.tar] Error 2
make[1]: Leaving directory '/home/gw/keystone'
Makefile:17: recipe for target 'hifive' failed
make: *** [hifive] Error 2

Then I tried to use "sudo make" , the result was:

$sudo make
mkdir -p buildroot/dl
make -f hifive.mk
make[1]: Entering directory '/home/gw/keystone'
make[1]: *** No rule to make target '/home/gw/keystone/riscv/bin/riscv64-unknown-linux-gnu-gcc', needed by '/home/gw/keystone/hifive-work/buildroot_initramfs/images/rootfs.tar'。 停止。
make[1]: Leaving directory '/home/gw/keystone'
Makefile:17: recipe for target 'hifive' failed
make: *** [hifive] Error 2

Could you please tell me how to deal with the problem?

Merge 3 Ioctls into one

We can merge UTM_INIT, UTM_ALLOC, and FINALIZE ioctls into one (finalize)
We need to fix both sdk and the driver

Calculating required number of pages considering page tables

The SDK currently calculates the number of pages that the enclave will consume.
We calculate this number based off the total memory size of the ELFs.
Also, we need to add the number of pages that will be used for the page tables that the enclave might need for the attestation.

We naively allocate 15 pages (which is more than sufficient for hundreds-of-megabyte enclave), but this is not the right way to handle this.

Linux suspends during a heavy enclave processing

test.patch.txt

This article moves from the forum.

I found a heavy enclave processing suspend the Linux on SiFive Unleashed board.
After the heavy enclave processing, the Linux reactivates.
Is it correct behavior?

I attach a git-patch to create a heavy enclave processing in the keystone-demo.
https://github.com/keystone-enclave/keystone-demo

Please take care of the reproduction. My Linux may break the file system.
I can not boot the Linux now.

When the word counting runs in the enclave, the Linux behavior is suspended about 2 minutes.

The Linux suspension is clear when the first word counting. It stops the "top" command.
However, the "top" command can run during the second word counting.
What did it happen?

PMP address range bug in QEMU

SM region is accessible even there is the first PMP entry holding a right NAPOT-decoded address range covering the entire SM.
I suspect QEMU because this didn't happen before bumping QEMU to the latest version.
But the security monitor could be wrong, so we need more inspection.

Bugs related to the timer interrupt which make the entire system starving for the CPU

There was a known bug where the enclave occupies the entire system during execution.
In single-core systems, this entirely hangs the machine during enclave execution.
In multi-core systems, this slows down the system and generates following kernel logs:

[   81.686879] INFO: rcu_sched detected stalls on CPUs/tasks:
[   81.687666]  (detected by 0, t=8407 jiffies, g=617, c=616, q=3)
[   81.688544] All QSes seen, last rcu_sched kthread activity 8407 (4294952409-4294944002), jiffies_till_next_fqs=1, root ->qsmask 0x0
[   81.690161] test-runner.ris R  running task        0   117    112 0x00000008
[   81.691198] Call Trace:
[   81.691652] [<        (ptrval)>] walk_stackframe+0x0/0xa2
[   81.692465] [<        (ptrval)>] show_stack+0x26/0x34
[   81.693236] [<        (ptrval)>] sched_show_task+0xa6/0xfc
[   81.694069] [<        (ptrval)>] rcu_check_callbacks+0x662/0x668
[   81.694955] [<        (ptrval)>] update_process_times+0x1e/0x48
[   81.695837] [<        (ptrval)>] tick_periodic+0x40/0xac
[   81.696645] [<        (ptrval)>] tick_handle_periodic+0x1a/0x5c
[   81.697539] [<        (ptrval)>] riscv_timer_interrupt+0x26/0x32
[   81.698428] [<        (ptrval)>] riscv_intc_irq+0xb4/0xf2
[   81.699243] [<        (ptrval)>] ret_from_syscall+0xa/0xe

It turns out that there were a bug in Eyrie runtime and a design flaw of the driver.

(1) Eyrie bug: Eyrie does not enable the timer interrupt when it executes the enclave, which makes it never yield the core until it finishes.

(2) Driver issue: Even if the enclave has been interrupted, the kernel does not schedule in the interrupt handler; the driver just immediately resumes the enclave. This was like the driver dedicates the core to the enclave, not yielding until the ioctl returns.

This caused #112

Fundamentally though, this is more about the issues #75 and #46.
We might need to include DoS protection and watchdog features in the next release.

The enclave process does not show up in the load monitoring tools (e.g., htop)

Originally posted by @kunisuzaki in #112 (comment)

I confirmed the Linux works well along with heavy keystone processing.
However, I still have a question because the workload on Linux does not show the keystone processing.
While I monitor each core's workload with "htop", the "htop" does not show any busy cores.
Doesn't the Linux monitor the load on keystone because of Logical Partition?

When I monitored the load on OP-TEE on ARM TrustZone, the Linux monitoring tool showed the Linux kernel consumes a core.

My guess is that the enclave is scheduled from the security monitor, which is not tracked by the Linux kernel. To fix this issue, one should understand how performance/load monitoring works in Linux, and modify the driver such that the linux is aware of time spent inside the enclave.

Exhaustive Test Required

We need to stop adding features and try stabilize all of the components at some point.
I'm filing this issue to just remind myself in the future,
let's start this on May because we don't have enough time atm.

[misc] Change Linux Distribution

Currently we're using busybear, which was the only option when we started using QEMU.
There are couple options available now (e.g., buildroot or Fedora), so we need to switch the distribution for the sake of stability.

Deprecate busybear

I have completed testing everything new in buildroot, so we can safely remove busybear now.

Make Failure on WSL

Describe the bug
The current Keystone build does not work on Windows Subsystem for Linux upon make.

I think it is because that Windows-styled directory names contain brackets and spaces which the script does not recognize.

Screenshots or Error Log
The make log:

nisiyama@DESKTOP-SIS2I6D:~/Keystone/keystone$ make
make -C sdk
make[1]: Entering directory '/home/nisiyama/Keystone/keystone/sdk'
make -C lib
make[2]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/lib'
make -C app
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/lib/app'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -Iinclude -c src/encret.s -o src/encret.o
riscv64-unknown-linux-gnu-gcc -Wall -Werror -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -Iinclude -c src/tiny-malloc.c -o src/tiny-malloc.o
riscv64-unknown-linux-gnu-gcc -Wall -Werror -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -Iinclude -c src/string.c -o src/string.o
riscv64-unknown-linux-gnu-gcc -Wall -Werror -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -Iinclude -c src/syscall.c -o src/syscall.o
riscv64-unknown-elf-ar rcs ../libkeystone-eapp.a src/encret.o src/tiny-malloc.o src/string.o src/syscall.o
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/lib/app'
make -C host
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/lib/host'
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I include/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/keystone.cpp
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I include/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/elffile.cpp
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I include/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/elf.cpp
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I include/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/elf32.cpp
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I include/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/elf64.cpp
riscv64-unknown-linux-gnu-ar rcs ../libkeystone-host.a keystone.o elffile.o elf.o elf32.o elf64.o
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/lib/host'
make -C edge
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/lib/edge'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -Iinclude/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/edge_call.c -o src/edge_call.o
riscv64-unknown-linux-gnu-gcc -Wall -Werror -Iinclude/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/edge_dispatch.c -o src/edge_dispatch.o
riscv64-unknown-linux-gnu-gcc -Wall -Werror -Iinclude/ -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -c src/edge_syscall.c -o src/edge_syscall.o
riscv64-unknown-elf-ar rcs ../libkeystone-edge.a src/edge_call.o src/edge_dispatch.o src/edge_syscall.o
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/lib/edge'
make -C verifier
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/lib/verifier'
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c ed25519/fe.c -o ed25519/fe.o
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c ed25519/ge.c -o ed25519/ge.o
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c ed25519/sc.c -o ed25519/sc.o
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c ed25519/verify.c -o ed25519/verify.o
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c ed25519/sign.c -o ed25519/sign.o
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c sha3/sha3.c -o sha3/sha3.o
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c json11.cpp
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c keys.cpp
riscv64-unknown-linux-gnu-g++ -Wall -Werror -I ./ -std=gnu++11 -c report.cpp
riscv64-unknown-linux-gnu-ar rcs ../libkeystone-verifier.a ed25519/fe.o ed25519/ge.o ed25519/sc.o ed25519/verify.o ed25519/sign.o sha3/sha3.o json11.o keys.o report.o
#riscv64-unknown-linux-gnu-g++ -std=gnu++11 test.cpp ../libkeystone-verifier.a -o test
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/lib/verifier'
make[2]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/lib'
make -C runtime
make[2]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/runtime'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c entry.S
make -C tmplib
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/runtime/tmplib'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -I. -D__riscv_xlen=64 -D__ASSEMBLY__ -include partial_linkage.h -c uaccess.S
cp uaccess.o  ../
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/runtime/tmplib'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c boot.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c interrupt.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c printf.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c syscall.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c string.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c linux_wrap.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c io_wrap.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c rt_util.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c mm.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c env.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -fPIC -fno-builtin -DIO_SYSCALL_WRAPPING -DLINUX_SYSCALL_WRAPPING -DUSE_FREEMEM -DENV_SETUP -I../lib/edge/include -I ./tmplib -c freemem.c
riscv64-unknown-linux-gnu-ld  -o eyrie-rt entry.o boot.o interrupt.o printf.o syscall.o string.o linux_wrap.o io_wrap.o rt_util.o mm.o env.o freemem.o ../lib/libkeystone-edge.a uaccess.o -T runtime.lds
make[2]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/runtime'
make -C tests
make[2]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests'
riscv64-unknown-linux-gnu-g++ -I../lib/host/include -I../lib/edge/include -I../lib/verifier -std=c++11 -c test-runner.cpp
In file included from test-runner.cpp:11:0:
../lib/verifier/test_dev_key.h:3:2: warning: #warning Using TEST device root key. No integrity guarantee. [-Wcpp]
 #warning Using TEST device root key. No integrity guarantee.
  ^~~~~~~
riscv64-unknown-linux-gnu-g++ -I../lib/host/include -I../lib/edge/include -I../lib/verifier -std=c++11 -c edge_wrapper.cpp
riscv64-unknown-linux-gnu-g++ -I../lib/host/include -I../lib/edge/include -I../lib/verifier -std=c++11 -L../lib -o test-runner.riscv test-runner.o edge_wrapper.o ../lib/libkeystone-host.a ../lib/libkeystone-edge.a ../lib/libkeystone-verifier.a
make -C stack;   make -C fibonacci;   make -C long-nop;   make -C loop;   make -C malloc;   make -C fib-bench;   make -C untrusted;   make -C attestation;
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/stack'
riscv64-unknown-linux-gnu-as   -o stack.o stack.s
riscv64-unknown-linux-gnu-ld -static -L../../lib -lkeystone-eapp -o stack.eapp_riscv stack.o ../../lib/libkeystone-eapp.a -T ../app.lds
chmod -x stack.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/stack'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/fibonacci'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -c fibonacci.c
riscv64-unknown-linux-gnu-ld -static -L../../lib -lkeystone-eapp -o fibonacci.eapp_riscv fibonacci.o ../../lib/libkeystone-eapp.a -T ../app.lds
chmod -x fibonacci.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/fibonacci'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/long-nop'
riscv64-unknown-linux-gnu-as   -o long-nop.o long-nop.s
./generate_func.sh 4097 add_long.s
riscv64-unknown-linux-gnu-as   -o add_long.o add_long.s
riscv64-unknown-linux-gnu-ld -static -L../../lib -lkeystone-eapp -o long-nop.eapp_riscv long-nop.o add_long.o ../../lib/libkeystone-eapp.a -T ../app.lds
chmod -x long-nop.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/long-nop'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/loop'
riscv64-unknown-linux-gnu-as   -o loop.o loop.s
riscv64-unknown-linux-gnu-ld -static -L../../lib -lkeystone-eapp -o loop.eapp_riscv loop.o ../../lib/libkeystone-eapp.a -T ../app.lds
chmod -x loop.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/loop'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/malloc'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -c malloc.c
riscv64-unknown-linux-gnu-ld -static -L../../lib -lkeystone-eapp -o malloc.eapp_riscv malloc.o ../../lib/libkeystone-eapp.a -T ../app.lds
chmod -x malloc.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/malloc'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/fib-bench'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -c fib-bench.c
riscv64-unknown-linux-gnu-ld -static -L../../lib -lkeystone-eapp -o fib-bench.eapp_riscv fib-bench.o ../../lib/libkeystone-eapp.a -T ../app.lds
chmod -x fib-bench.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/fib-bench'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/untrusted'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -I../../lib/edge/include -c untrusted.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -I../../lib/edge/include -c edge_wrapper.c
riscv64-unknown-linux-gnu-ld -static -L../../lib  -o untrusted.eapp_riscv untrusted.o edge_wrapper.o ../../lib/libkeystone-eapp.a ../../lib/libkeystone-edge.a -T ../app.lds
chmod -x untrusted.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/untrusted'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/tests/attestation'
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -I../../lib/edge/include -c attestation.c
riscv64-unknown-linux-gnu-gcc -Wall -Werror -I../../lib/app/include -I../../lib/edge/include -c edge_wrapper.c
riscv64-unknown-linux-gnu-ld -static -L../../lib  -o attestation.eapp_riscv attestation.o edge_wrapper.o ../../lib/libkeystone-eapp.a ../../lib/libkeystone-edge.a -T ../app.lds
chmod -x attestation.eapp_riscv
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests/attestation'
rm -f test
echo "echo 'testing stack'" >> test; echo "./test-runner.riscv stack.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing fibonacci'" >> test; echo "./test-runner.riscv fibonacci.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing long-nop'" >> test; echo "./test-runner.riscv long-nop.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing loop'" >> test; echo "./test-runner.riscv loop.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing malloc'" >> test; echo "./test-runner.riscv malloc.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing fib-bench'" >> test; echo "./test-runner.riscv fib-bench.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing untrusted'" >> test; echo "./test-runner.riscv untrusted.eapp_riscv eyrie-rt" >> test;   echo "echo 'testing attestation'" >> test; echo "./test-runner.riscv attestation.eapp_riscv eyrie-rt" >> test;
chmod +x test
make[2]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/tests'
make -C samples
make[2]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/samples'
make -C tiny-AES-c
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/sdk/samples/tiny-AES-c'
riscv64-unknown-linux-gnu-g++ -I../../lib/host/include -c aes.cpp
riscv64-unknown-linux-gnu-g++ -I../../lib/host/include -L../../lib -o aes.riscv aes.o ../../lib/libkeystone-host.a
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/samples/tiny-AES-c'
make[2]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk/samples'
mkdir -p bin/
cp tests/*/*.eapp_riscv tests/test tests/test-runner.riscv bin/
cp samples/tiny-AES-c/aes.riscv bin/
cp runtime/eyrie-rt bin/
make[1]: Leaving directory '/home/nisiyama/Keystone/keystone/sdk'
./scripts/apply-patch.sh
patching file hw/riscv/boot.c
patching file arch/riscv/mm/dma.c
patching file arch/riscv/mm/init.c
cd riscv-qemu; ./configure --target-list=riscv64-softmmu,riscv32-softmmu;
Install prefix    /usr/local
BIOS directory    /usr/local/share/qemu
firmware path     /usr/local/share/qemu-firmware
binary directory  /usr/local/bin
library directory /usr/local/lib
module directory  /usr/local/lib/qemu
libexec directory /usr/local/libexec
include directory /usr/local/include
config directory  /usr/local/etc
local state directory   /usr/local/var
Manual directory  /usr/local/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path       /home/nisiyama/Keystone/keystone/riscv-qemu
GIT binary        git
GIT submodules    ui/keycodemapdb tests/fp/berkeley-testfloat-3 tests/fp/berkeley-softfloat-3 dtc capstone
C compiler        cc
Host C compiler   cc
C++ compiler      c++
Objective-C compiler cc
ARFLAGS           rv
CFLAGS            -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS       -I/usr/include/pixman-1 -I$(SRC_PATH)/dtc/libfdt  -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv  -Wexpansion-to-defined -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-strong -I$(SRC_PATH)/capstone/include
LDFLAGS           -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g
QEMU_LDFLAGS      -L$(BUILD_DIR)/dtc/libfdt
make              make
install           install
python            python -B
smbd              /usr/sbin/smbd
module support    no
host CPU          x86_64
host big endian   no
target list       riscv64-softmmu riscv32-softmmu
gprof enabled     no
sparse enabled    no
strip binaries    yes
profiler          no
static build      no
SDL support       no
GTK support       no
GTK GL support    no
VTE support       no
TLS priority      NORMAL
GNUTLS support    no
libgcrypt         no
nettle            no
libtasn1          no
curses support    no
virgl support     no
curl support      no
mingw32 support   no
Audio drivers     oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support    no
Multipath support no
VNC support       yes
VNC SASL support  no
VNC JPEG support  no
VNC PNG support   no
xen support       no
brlapi support    no
bluez  support    no
Documentation     yes
PIE               yes
vde support       no
netmap support    no
Linux AIO support no
ATTR/XATTR support yes
Install blobs     yes
KVM support       yes
HAX support       no
HVF support       no
WHPX support      no
TCG support       yes
TCG debug enabled no
TCG interpreter   no
malloc trim support yes
RDMA support      no
PVRDMA support    no
fdt support       git
membarrier        no
preadv support    yes
fdatasync         yes
madvise           yes
posix_madvise     yes
posix_memalign    yes
libcap-ng support no
vhost-net support yes
vhost-crypto support yes
vhost-scsi support yes
vhost-vsock support yes
vhost-user support yes
Trace backends    log
spice support     no
rbd support       no
xfsctl support    no
smartcard support no
libusb            no
usb net redir     no
OpenGL support    no
OpenGL dmabufs    no
libiscsi support  no
libnfs support    no
build guest agent yes
QGA VSS support   no
QGA w32 disk info no
QGA MSI support   no
seccomp support   no
coroutine backend ucontext
coroutine pool    yes
debug stack usage no
mutex debugging   no
crypto afalg      no
GlusterFS support no
gcov              gcov
gcov enabled      no
TPM support       yes
libssh2 support   no
TPM passthrough   yes
TPM emulator      yes
QOM debugging     yes
Live block migration yes
lzo support       no
snappy support    no
bzip2 support     no
NUMA host support no
libxml2           no
tcmalloc support  no
jemalloc support  no
avx2 optimization yes
replication support yes
VxHS block device no
bochs support     yes
cloop support     yes
dmg support       yes
qcow v1 support   yes
vdi support       yes
vvfat support     yes
qed support       yes
parallels support yes
sheepdog support  yes
capstone          git
docker            no
libpmem support   no
libudev           no
make -C riscv-qemu
make[1]: Entering directory '/home/nisiyama/Keystone/keystone/riscv-qemu'
  GEN     riscv64-softmmu/config-devices.mak.tmp
  GEN     riscv64-softmmu/config-devices.mak
  GEN     riscv32-softmmu/config-devices.mak.tmp
  GEN     riscv32-softmmu/config-devices.mak
  GEN     config-all-devices.mak
  GEN     config-host.h
  GIT     ui/keycodemapdb tests/fp/berkeley-testfloat-3 tests/fp/berkeley-softfloat-3 dtc capstone
         DEP tests/dumptrees.c
         DEP tests/trees.S
         DEP tests/testutils.c
         DEP tests/value-labels.c
         DEP tests/asm_tree_dump.c
         DEP tests/truncated_memrsv.c
         DEP tests/truncated_string.c
         DEP tests/truncated_property.c
         DEP tests/check_full.c
         DEP tests/check_header.c
         DEP tests/check_path.c
         DEP tests/overlay_bad_fixup.c
         DEP tests/overlay.c
         DEP tests/subnode_iterate.c
         DEP tests/property_iterate.c
         DEP tests/integer-expressions.c
         DEP tests/utilfdt_test.c
         DEP tests/path_offset_aliases.c
         DEP tests/add_subnode_with_nops.c
         DEP tests/dtbs_equal_unordered.c
         DEP tests/dtb_reverse.c
         DEP tests/dtbs_equal_ordered.c
         DEP tests/extra-terminating-null.c
         DEP tests/incbin.c
         DEP tests/boot-cpuid.c
         DEP tests/phandle_format.c
         DEP tests/path-references.c
         DEP tests/references.c
         DEP tests/string_escapes.c
         DEP tests/propname_escapes.c
         DEP tests/appendprop2.c
         DEP tests/appendprop1.c
         DEP tests/del_node.c
         DEP tests/del_property.c
         DEP tests/setprop.c
         DEP tests/set_name.c
         DEP tests/rw_tree1.c
         DEP tests/open_pack.c
         DEP tests/nopulate.c
         DEP tests/mangle-layout.c
         DEP tests/move_and_save.c
         DEP tests/sw_states.c
         DEP tests/sw_tree1.c
         DEP tests/nop_node.c
         DEP tests/nop_property.c
         DEP tests/setprop_inplace.c
         DEP tests/stringlist.c
         DEP tests/addr_size_cells2.c
         DEP tests/addr_size_cells.c
         DEP tests/notfound.c
         DEP tests/sized_cells.c
         DEP tests/char_literal.c
         DEP tests/get_alias.c
         DEP tests/node_offset_by_compatible.c
         DEP tests/node_check_compatible.c
         DEP tests/node_offset_by_phandle.c
         DEP tests/node_offset_by_prop_value.c
         DEP tests/parent_offset.c
         DEP tests/supernode_atdepth_offset.c
         DEP tests/get_path.c
         DEP tests/get_phandle.c
         DEP tests/getprop.c
         DEP tests/get_name.c
         DEP tests/path_offset.c
         DEP tests/subnode_offset.c
         DEP tests/find_property.c
         DEP tests/root_node.c
         DEP tests/get_mem_rsv.c
         DEP libfdt/fdt_overlay.c
         DEP libfdt/fdt_addresses.c
         DEP libfdt/fdt_empty_tree.c
         DEP libfdt/fdt_strerror.c
         DEP libfdt/fdt_rw.c
         DEP libfdt/fdt_sw.c
         DEP libfdt/fdt_wip.c
         DEP libfdt/fdt_ro.c
         DEP libfdt/fdt.c
         DEP util.c
         DEP fdtoverlay.c
         DEP fdtput.c
         DEP fdtget.c
         DEP fdtdump.c
         LEX convert-dtsv0-lexer.lex.c
         DEP convert-dtsv0-lexer.lex.c
         DEP srcpos.c
         BISON dtc-parser.tab.c
         DEP dtc-parser.tab.c
         LEX dtc-lexer.lex.c
         DEP dtc-lexer.lex.c
         DEP treesource.c
         DEP livetree.c
         DEP fstree.c
         DEP flattree.c
         DEP dtc.c
         DEP data.c
         DEP checks.c
        CHK version_gen.h
        UPD version_gen.h
         DEP util.c
        CHK version_gen.h
         CC libfdt/fdt.o
         CC libfdt/fdt_ro.o
         CC libfdt/fdt_wip.o
         CC libfdt/fdt_sw.o
         CC libfdt/fdt_rw.o
         CC libfdt/fdt_strerror.o
         CC libfdt/fdt_empty_tree.o
         CC libfdt/fdt_addresses.o
         CC libfdt/fdt_overlay.o
         AR libfdt/libfdt.a
ar: creating libfdt/libfdt.a
a - libfdt/fdt.o
a - libfdt/fdt_ro.o
a - libfdt/fdt_wip.o
a - libfdt/fdt_sw.o
a - libfdt/fdt_rw.o
a - libfdt/fdt_strerror.o
a - libfdt/fdt_empty_tree.o
a - libfdt/fdt_addresses.o
a - libfdt/fdt_overlay.o
  CC      cs.o
  CC      utils.o
  CC      SStream.o
  CC      MCInstrDesc.o
  CC      MCRegisterInfo.o
  CC      arch/ARM/ARMDisassembler.o
  CC      arch/ARM/ARMInstPrinter.o
  CC      arch/ARM/ARMMapping.o
  CC      arch/ARM/ARMModule.o
  CC      arch/AArch64/AArch64BaseInfo.o
  CC      arch/AArch64/AArch64Disassembler.o
  CC      arch/AArch64/AArch64InstPrinter.o
  CC      arch/AArch64/AArch64Mapping.o
  CC      arch/AArch64/AArch64Module.o
  CC      arch/Mips/MipsDisassembler.o
  CC      arch/Mips/MipsInstPrinter.o
  CC      arch/Mips/MipsMapping.o
  CC      arch/Mips/MipsModule.o
  CC      arch/PowerPC/PPCDisassembler.o
  CC      arch/PowerPC/PPCInstPrinter.o
  CC      arch/PowerPC/PPCMapping.o
  CC      arch/PowerPC/PPCModule.o
  CC      arch/Sparc/SparcDisassembler.o
  CC      arch/Sparc/SparcInstPrinter.o
  CC      arch/Sparc/SparcMapping.o
  CC      arch/Sparc/SparcModule.o
  CC      arch/SystemZ/SystemZDisassembler.o
  CC      arch/SystemZ/SystemZInstPrinter.o
  CC      arch/SystemZ/SystemZMapping.o
  CC      arch/SystemZ/SystemZModule.o
  CC      arch/SystemZ/SystemZMCTargetDesc.o
  CC      arch/X86/X86DisassemblerDecoder.o
  CC      arch/X86/X86Disassembler.o
  CC      arch/X86/X86IntelInstPrinter.o
  CC      arch/X86/X86ATTInstPrinter.o
  CC      arch/X86/X86Mapping.o
  CC      arch/X86/X86Module.o
  CC      arch/XCore/XCoreDisassembler.o
  CC      arch/XCore/XCoreInstPrinter.o
  CC      arch/XCore/XCoreMapping.o
  CC      arch/XCore/XCoreModule.o
  CC      MCInst.o
  AR      libcapstone.a
ar: creating /home/nisiyama/Keystone/keystone/riscv-qemu/capstone/libcapstone.a
  GEN     qemu-options.def
  GEN     qapi-gen
  GEN     trace/generated-tcg-tracers.h
  GEN     trace/generated-helpers-wrappers.h
  GEN     trace/generated-helpers.h
  GEN     trace/generated-helpers.c
  GEN     module_block.h
  GEN     ui/input-keymap-atset1-to-qcode.c
  GEN     ui/input-keymap-linux-to-qcode.c
  GEN     ui/input-keymap-qcode-to-atset1.c
  GEN     ui/input-keymap-qcode-to-atset2.c
  GEN     ui/input-keymap-qcode-to-atset3.c
  GEN     ui/input-keymap-qcode-to-linux.c
  GEN     ui/input-keymap-qcode-to-qnum.c
  GEN     ui/input-keymap-qcode-to-sun.c
  GEN     ui/input-keymap-qnum-to-qcode.c
  GEN     ui/input-keymap-usb-to-qcode.c
  GEN     ui/input-keymap-win32-to-qcode.c
  GEN     ui/input-keymap-x11-to-qcode.c
  GEN     ui/input-keymap-xorgevdev-to-qcode.c
  GEN     ui/input-keymap-xorgkbd-to-qcode.c
  GEN     ui/input-keymap-xorgxquartz-to-qcode.c
  GEN     ui/input-keymap-xorgxwin-to-qcode.c
  GEN     ui/input-keymap-osx-to-qcode.c
  GEN     tests/test-qapi-gen
  GEN     trace-root.h
  GEN     accel/kvm/trace.h
  GEN     accel/tcg/trace.h
  GEN     audio/trace.h
  GEN     block/trace.h
  GEN     chardev/trace.h
  GEN     crypto/trace.h
  GEN     hw/9pfs/trace.h
  GEN     hw/acpi/trace.h
  GEN     hw/alpha/trace.h
  GEN     hw/arm/trace.h
  GEN     hw/audio/trace.h
  GEN     hw/block/trace.h
  GEN     hw/block/dataplane/trace.h
  GEN     hw/char/trace.h
  GEN     hw/display/trace.h
  GEN     hw/dma/trace.h
  GEN     hw/hppa/trace.h
  GEN     hw/i2c/trace.h
  GEN     hw/i386/trace.h
  GEN     hw/i386/xen/trace.h
  GEN     hw/ide/trace.h
  GEN     hw/input/trace.h
  GEN     hw/intc/trace.h
  GEN     hw/isa/trace.h
  GEN     hw/mem/trace.h
  GEN     hw/misc/trace.h
  GEN     hw/misc/macio/trace.h
  GEN     hw/net/trace.h
  GEN     hw/nvram/trace.h
  GEN     hw/pci/trace.h
  GEN     hw/pci-host/trace.h
  GEN     hw/ppc/trace.h
  GEN     hw/riscv/trace.h
  GEN     hw/rdma/trace.h
  GEN     hw/rdma/vmw/trace.h
  GEN     hw/s390x/trace.h
  GEN     hw/scsi/trace.h
  GEN     hw/sd/trace.h
  GEN     hw/sparc/trace.h
  GEN     hw/sparc64/trace.h
  GEN     hw/timer/trace.h
  GEN     hw/tpm/trace.h
  GEN     hw/usb/trace.h
  GEN     hw/vfio/trace.h
  GEN     hw/virtio/trace.h
  GEN     hw/watchdog/trace.h
  GEN     hw/xen/trace.h
  GEN     io/trace.h
  GEN     linux-user/trace.h
  GEN     migration/trace.h
  GEN     nbd/trace.h
  GEN     net/trace.h
  GEN     qapi/trace.h
  GEN     qom/trace.h
  GEN     scsi/trace.h
  GEN     target/arm/trace.h
  GEN     target/i386/trace.h
  GEN     target/mips/trace.h
  GEN     target/ppc/trace.h
  GEN     target/riscv/trace.h
  GEN     target/s390x/trace.h
  GEN     target/sparc/trace.h
  GEN     ui/trace.h
  GEN     util/trace.h
  GEN     trace-root.c
  GEN     accel/kvm/trace.c
  GEN     accel/tcg/trace.c
  GEN     audio/trace.c
  GEN     block/trace.c
  GEN     chardev/trace.c
  GEN     crypto/trace.c
  GEN     hw/9pfs/trace.c
  GEN     hw/acpi/trace.c
  GEN     hw/alpha/trace.c
  GEN     hw/arm/trace.c
  GEN     hw/audio/trace.c
  GEN     hw/block/trace.c
  GEN     hw/block/dataplane/trace.c
  GEN     hw/char/trace.c
  GEN     hw/display/trace.c
  GEN     hw/dma/trace.c
  GEN     hw/hppa/trace.c
  GEN     hw/i2c/trace.c
  GEN     hw/i386/trace.c
  GEN     hw/i386/xen/trace.c
  GEN     hw/ide/trace.c
  GEN     hw/input/trace.c
  GEN     hw/intc/trace.c
  GEN     hw/isa/trace.c
  GEN     hw/mem/trace.c
  GEN     hw/misc/trace.c
  GEN     hw/misc/macio/trace.c
  GEN     hw/net/trace.c
  GEN     hw/nvram/trace.c
  GEN     hw/pci/trace.c
  GEN     hw/pci-host/trace.c
  GEN     hw/ppc/trace.c
  GEN     hw/riscv/trace.c
  GEN     hw/rdma/trace.c
  GEN     hw/rdma/vmw/trace.c
  GEN     hw/s390x/trace.c
  GEN     hw/scsi/trace.c
  GEN     hw/sd/trace.c
  GEN     hw/sparc/trace.c
  GEN     hw/sparc64/trace.c
  GEN     hw/timer/trace.c
  GEN     hw/tpm/trace.c
  GEN     hw/usb/trace.c
  GEN     hw/vfio/trace.c
  GEN     hw/virtio/trace.c
  GEN     hw/watchdog/trace.c
  GEN     hw/xen/trace.c
  GEN     io/trace.c
  GEN     linux-user/trace.c
  GEN     migration/trace.c
  GEN     nbd/trace.c
  GEN     net/trace.c
  GEN     qapi/trace.c
  GEN     qom/trace.c
  GEN     scsi/trace.c
  GEN     target/arm/trace.c
  GEN     target/i386/trace.c
  GEN     target/mips/trace.c
  GEN     target/ppc/trace.c
  GEN     target/riscv/trace.c
  GEN     target/s390x/trace.c
  GEN     target/sparc/trace.c
  GEN     ui/trace.c
  GEN     util/trace.c
        CHK version_gen.h
  CC      tests/qemu-iotests/socket_scm_helper.o
  LINK    tests/qemu-iotests/socket_scm_helper
  GEN     docs/version.texi
  GEN     qemu-options.texi
  GEN     qemu-monitor.texi
  GEN     qemu-img-cmds.texi
  GEN     qemu-monitor-info.texi
  GEN     qemu-doc.html
  GEN     qemu-doc.txt
  GEN     qemu.1
  GEN     qemu-img.1
  GEN     qemu-nbd.8
  GEN     qemu-ga.8
  GEN     docs/interop/qemu-qmp-ref.html
  GEN     docs/interop/qemu-qmp-ref.txt
  GEN     docs/interop/qemu-qmp-ref.7
  GEN     qga/qapi-generated/qapi-gen
  GEN     docs/interop/qemu-ga-ref.html
  GEN     docs/interop/qemu-ga-ref.txt
  GEN     docs/interop/qemu-ga-ref.7
  GEN     docs/qemu-block-drivers.7
  GEN     docs/qemu-cpu-models.7
  CC      qga/commands.o
  CC      qga/guest-agent-command-state.o
  CC      qga/main.o
  CC      qga/commands-posix.o
  CC      qga/channel-posix.o
  CC      qga/qapi-generated/qga-qapi-types.o
  CC      qga/qapi-generated/qga-qapi-visit.o
  CC      qga/qapi-generated/qga-qapi-commands.o
  CC      qapi/qapi-builtin-types.o
  CC      qapi/qapi-types.o
  CC      qapi/qapi-types-block-core.o
  CC      qapi/qapi-types-block.o
  CC      qapi/qapi-types-char.o
  CC      qapi/qapi-types-common.o
  CC      qapi/qapi-types-crypto.o
  CC      qapi/qapi-types-introspect.o
  CC      qapi/qapi-types-job.o
  CC      qapi/qapi-types-migration.o
  CC      qapi/qapi-types-misc.o
  CC      qapi/qapi-types-net.o
  CC      qapi/qapi-types-rocker.o
  CC      qapi/qapi-types-run-state.o
  CC      qapi/qapi-types-sockets.o
  CC      qapi/qapi-types-tpm.o
  CC      qapi/qapi-types-trace.o
  CC      qapi/qapi-types-transaction.o
  CC      qapi/qapi-types-ui.o
  CC      qapi/qapi-builtin-visit.o
  CC      qapi/qapi-visit.o
  CC      qapi/qapi-visit-block-core.o
  CC      qapi/qapi-visit-block.o
  CC      qapi/qapi-visit-char.o
  CC      qapi/qapi-visit-common.o
  CC      qapi/qapi-visit-crypto.o
  CC      qapi/qapi-visit-introspect.o
  CC      qapi/qapi-visit-job.o
  CC      qapi/qapi-visit-migration.o
  CC      qapi/qapi-visit-misc.o
  CC      qapi/qapi-visit-net.o
  CC      qapi/qapi-visit-rocker.o
  CC      qapi/qapi-visit-run-state.o
  CC      qapi/qapi-visit-sockets.o
  CC      qapi/qapi-visit-tpm.o
  CC      qapi/qapi-visit-trace.o
  CC      qapi/qapi-visit-transaction.o
  CC      qapi/qapi-visit-ui.o
  CC      qapi/qapi-events.o
  CC      qapi/qapi-events-block-core.o
  CC      qapi/qapi-events-block.o
  CC      qapi/qapi-events-char.o
  CC      qapi/qapi-events-common.o
  CC      qapi/qapi-events-crypto.o
  CC      qapi/qapi-events-introspect.o
  CC      qapi/qapi-events-job.o
  CC      qapi/qapi-events-migration.o
  CC      qapi/qapi-events-misc.o
  CC      qapi/qapi-events-net.o
  CC      qapi/qapi-events-rocker.o
  CC      qapi/qapi-events-run-state.o
  CC      qapi/qapi-events-sockets.o
  CC      qapi/qapi-events-tpm.o
  CC      qapi/qapi-events-trace.o
  CC      qapi/qapi-events-transaction.o
  CC      qapi/qapi-events-ui.o
  CC      qapi/qapi-introspect.o
  CC      qapi/qapi-visit-core.o
  CC      qapi/qapi-dealloc-visitor.o
  CC      qapi/qobject-input-visitor.o
  CC      qapi/qobject-output-visitor.o
  CC      qapi/qmp-registry.o
  CC      qapi/qmp-dispatch.o
  CC      qapi/string-input-visitor.o
  CC      qapi/string-output-visitor.o
  CC      qapi/opts-visitor.o
  CC      qapi/qapi-clone-visitor.o
  CC      qapi/qmp-event.o
  CC      qapi/qapi-util.o
  CC      qobject/qnull.o
  CC      qobject/qnum.o
  CC      qobject/qstring.o
  CC      qobject/qdict.o
  CC      qobject/qlist.o
  CC      qobject/qbool.o
  CC      qobject/qlit.o
  CC      qobject/qjson.o
  CC      qobject/qobject.o
  CC      qobject/json-lexer.o
  CC      qobject/json-streamer.o
  CC      qobject/json-parser.o
  CC      qobject/block-qdict.o
  CC      trace/control.o
  CC      trace/qmp.o
  CC      util/osdep.o
  CC      util/cutils.o
  CC      util/unicode.o
  CC      util/qemu-timer-common.o
  CC      util/bufferiszero.o
  CC      util/lockcnt.o
  CC      util/aiocb.o
  CC      util/async.o
  CC      util/aio-wait.o
  CC      util/thread-pool.o
  CC      util/qemu-timer.o
  CC      util/main-loop.o
  CC      util/iohandler.o
  CC      util/aio-posix.o
  CC      util/compatfd.o
  CC      util/event_notifier-posix.o
  CC      util/mmap-alloc.o
  CC      util/oslib-posix.o
  CC      util/qemu-openpty.o
  CC      util/qemu-thread-posix.o
  CC      util/memfd.o
  CC      util/envlist.o
  CC      util/path.o
  CC      util/module.o
  CC      util/host-utils.o
  CC      util/bitmap.o
  CC      util/bitops.o
  CC      util/hbitmap.o
  CC      util/fifo8.o
  CC      util/acl.o
  CC      util/cacheinfo.o
  CC      util/error.o
  CC      util/qemu-error.o
  CC      util/id.o
  CC      util/iov.o
  CC      util/qemu-config.o
  CC      util/qemu-sockets.o
  CC      util/uri.o
  CC      util/notify.o
  CC      util/qemu-option.o
  CC      util/qemu-progress.o
  CC      util/keyval.o
  CC      util/hexdump.o
  CC      util/crc32c.o
  CC      util/uuid.o
  CC      util/throttle.o
  CC      util/getauxval.o
  CC      util/readline.o
  CC      util/rcu.o
  CC      util/qemu-coroutine.o
  CC      util/qemu-coroutine-lock.o
  CC      util/qemu-coroutine-io.o
  CC      util/qemu-coroutine-sleep.o
  CC      util/coroutine-ucontext.o
  CC      util/buffer.o
  CC      util/timed-average.o
  CC      util/base64.o
  CC      util/log.o
  CC      util/pagesize.o
  CC      util/qdist.o
  CC      util/qht.o
  CC      util/qsp.o
  CC      util/range.o
  CC      util/stats64.o
  CC      util/systemd.o
  CC      util/iova-tree.o
  CC      util/vfio-helpers.o
  CC      trace-root.o
  CC      accel/kvm/trace.o
  CC      accel/tcg/trace.o
  CC      audio/trace.o
  CC      block/trace.o
  CC      chardev/trace.o
  CC      crypto/trace.o
  CC      hw/9pfs/trace.o
  CC      hw/acpi/trace.o
  CC      hw/alpha/trace.o
  CC      hw/arm/trace.o
  CC      hw/audio/trace.o
  CC      hw/block/trace.o
  CC      hw/block/dataplane/trace.o
  CC      hw/char/trace.o
  CC      hw/display/trace.o
  CC      hw/dma/trace.o
  CC      hw/hppa/trace.o
  CC      hw/i2c/trace.o
  CC      hw/i386/trace.o
  CC      hw/i386/xen/trace.o
  CC      hw/ide/trace.o
  CC      hw/input/trace.o
  CC      hw/intc/trace.o
  CC      hw/isa/trace.o
  CC      hw/mem/trace.o
  CC      hw/misc/trace.o
  CC      hw/misc/macio/trace.o
  CC      hw/net/trace.o
  CC      hw/nvram/trace.o
  CC      hw/pci/trace.o
  CC      hw/pci-host/trace.o
  CC      hw/ppc/trace.o
  CC      hw/riscv/trace.o
  CC      hw/rdma/trace.o
  CC      hw/rdma/vmw/trace.o
  CC      hw/s390x/trace.o
  CC      hw/scsi/trace.o
  CC      hw/sd/trace.o
  CC      hw/sparc/trace.o
  CC      hw/sparc64/trace.o
  CC      hw/timer/trace.o
  CC      hw/tpm/trace.o
  CC      hw/usb/trace.o
  CC      hw/vfio/trace.o
  CC      hw/virtio/trace.o
  CC      hw/watchdog/trace.o
  CC      hw/xen/trace.o
  CC      io/trace.o
  CC      linux-user/trace.o
  CC      migration/trace.o
  CC      nbd/trace.o
  CC      net/trace.o
  CC      qapi/trace.o
  CC      qom/trace.o
  CC      scsi/trace.o
  CC      target/arm/trace.o
  CC      target/i386/trace.o
  CC      target/mips/trace.o
  CC      target/ppc/trace.o
  CC      target/riscv/trace.o
  CC      target/s390x/trace.o
  CC      target/sparc/trace.o
  CC      ui/trace.o
  CC      util/trace.o
  CC      crypto/pbkdf-stub.o
  CC      stubs/arch-query-cpu-def.o
  CC      stubs/arch-query-cpu-model-expansion.o
  CC      stubs/arch-query-cpu-model-comparison.o
  CC      stubs/arch-query-cpu-model-baseline.o
  CC      stubs/bdrv-next-monitor-owned.o
  CC      stubs/blk-commit-all.o
  CC      stubs/blockdev-close-all-bdrv-states.o
  CC      stubs/clock-warp.o
  CC      stubs/cpu-get-clock.o
  CC      stubs/cpu-get-icount.o
  CC      stubs/dump.o
  CC      stubs/error-printf.o
  CC      stubs/fdset.o
  CC      stubs/gdbstub.o
  CC      stubs/get-vm-name.o
  CC      stubs/iothread.o
  CC      stubs/iothread-lock.o
  CC      stubs/is-daemonized.o
  CC      stubs/machine-init-done.o
  CC      stubs/migr-blocker.o
  CC      stubs/change-state-handler.o
  CC      stubs/monitor.o
  CC      stubs/notify-event.o
  CC      stubs/qtest.o
  CC      stubs/replay.o
  CC      stubs/runstate-check.o
  CC      stubs/set-fd-handler.o
  CC      stubs/slirp.o
  CC      stubs/sysbus.o
  CC      stubs/tpm.o
  CC      stubs/trace-control.o
  CC      stubs/uuid.o
  CC      stubs/vm-stop.o
  CC      stubs/vmstate.o
  CC      stubs/qmp_memory_device.o
  CC      stubs/target-monitor-defs.o
  CC      stubs/target-get-monitor-def.o
  CC      stubs/pc_madt_cpu_entry.o
  CC      stubs/vmgenid.o
  CC      stubs/xen-common.o
  CC      stubs/xen-hvm.o
  CC      stubs/pci-host-piix.o
  CC      stubs/ram-block.o
  CC      stubs/ramfb.o
  AR      libqemuutil.a
  LINK    qemu-ga
  CC      contrib/ivshmem-client/ivshmem-client.o
  CC      contrib/ivshmem-client/main.o
  LINK    ivshmem-client
  CC      contrib/ivshmem-server/ivshmem-server.o
  CC      contrib/ivshmem-server/main.o
  LINK    ivshmem-server
  CC      qemu-nbd.o
  CC      block.o
  CC      blockjob.o
  CC      job.o
  CC      qemu-io-cmds.o
  CC      replication.o
  CC      block/raw-format.o
  CC      block/vmdk.o
  CC      block/vpc.o
  CC      block/qcow.o
  CC      block/vdi.o
  CC      block/cloop.o
  CC      block/bochs.o
  CC      block/vvfat.o
  CC      block/dmg.o
  CC      block/qcow2.o
  CC      block/qcow2-refcount.o
  CC      block/qcow2-cluster.o
  CC      block/qcow2-snapshot.o
  CC      block/qcow2-cache.o
  CC      block/qcow2-bitmap.o
  CC      block/qed.o
  CC      block/qed-l2-cache.o
  CC      block/qed-table.o
  CC      block/qed-cluster.o
  CC      block/qed-check.o
  CC      block/vhdx.o
  CC      block/vhdx-endian.o
  CC      block/vhdx-log.o
  CC      block/quorum.o
  CC      block/blkdebug.o
  CC      block/blkverify.o
  CC      block/blkreplay.o
  CC      block/parallels.o
  CC      block/blklogwrites.o
  CC      block/block-backend.o
  CC      block/snapshot.o
  CC      block/qapi.o
  CC      block/file-posix.o
  CC      block/null.o
  CC      block/mirror.o
  CC      block/commit.o
  CC      block/io.o
  CC      block/create.o
  CC      block/throttle-groups.o
  CC      block/nvme.o
  CC      block/nbd.o
  CC      block/nbd-client.o
  CC      block/sheepdog.o
  CC      block/accounting.o
  CC      block/dirty-bitmap.o
  CC      block/write-threshold.o
  CC      block/backup.o
  CC      block/replication.o
  CC      block/throttle.o
  CC      block/copy-on-read.o
  CC      block/crypto.o
  CC      nbd/server.o
  CC      nbd/client.o
  CC      nbd/common.o
  CC      scsi/utils.o
  CC      scsi/pr-manager.o
  CC      scsi/pr-manager-helper.o
  CC      crypto/init.o
  CC      crypto/hash.o
  CC      crypto/hash-glib.o
  CC      crypto/hmac.o
  CC      crypto/hmac-glib.o
  CC      crypto/aes.o
  CC      crypto/desrfb.o
  CC      crypto/cipher.o
  CC      crypto/tlscreds.o
  CC      crypto/tlscredsanon.o
  CC      crypto/tlscredspsk.o
  CC      crypto/tlscredsx509.o
  CC      crypto/tlssession.o
  CC      crypto/secret.o
  CC      crypto/random-platform.o
  CC      crypto/pbkdf.o
  CC      crypto/ivgen.o
  CC      crypto/ivgen-essiv.o
  CC      crypto/ivgen-plain.o
  CC      crypto/ivgen-plain64.o
  CC      crypto/afsplit.o
  CC      crypto/xts.o
  CC      crypto/block.o
  CC      crypto/block-qcow.o
  CC      crypto/block-luks.o
  CC      io/channel.o
  CC      io/channel-buffer.o
  CC      io/channel-command.o
  CC      io/channel-file.o
  CC      io/channel-socket.o
  CC      io/channel-tls.o
  CC      io/channel-watch.o
  CC      io/channel-websock.o
  CC      io/channel-util.o
  CC      io/dns-resolver.o
  CC      io/net-listener.o
  CC      io/task.o
  CC      qom/object.o
  CC      qom/container.o
  CC      qom/qom-qobject.o
  CC      qom/object_interfaces.o
  LINK    qemu-nbd
  GEN     qemu-img-cmds.h
  CC      qemu-img.o
  LINK    qemu-img
  CC      qemu-io.o
  LINK    qemu-io
  CC      qemu-edid.o
  CC      hw/display/edid-generate.o
  LINK    qemu-edid
  CC      scsi/qemu-pr-helper.o
  LINK    scsi/qemu-pr-helper
  CC      qemu-bridge-helper.o
  LINK    qemu-bridge-helper
  CC      blockdev.o
  CC      blockdev-nbd.o
  CC      bootdevice.o
  CC      iothread.o
  CC      job-qmp.o
  CC      qdev-monitor.o
  CC      device-hotplug.o
  CC      os-posix.o
  CC      bt-host.o
  CC      bt-vhci.o
  CC      dma-helpers.o
  CC      vl.o
  CC      tpm.o
  CC      device_tree.o
  CC      qapi/qapi-commands.o
  CC      qapi/qapi-commands-block-core.o
  CC      qapi/qapi-commands-block.o
  CC      qapi/qapi-commands-char.o
  CC      qapi/qapi-commands-common.o
  CC      qapi/qapi-commands-crypto.o
  CC      qapi/qapi-commands-introspect.o
  CC      qapi/qapi-commands-job.o
  CC      qapi/qapi-commands-migration.o
  CC      qapi/qapi-commands-misc.o
  CC      qapi/qapi-commands-net.o
  CC      qapi/qapi-commands-rocker.o
  CC      qapi/qapi-commands-run-state.o
  CC      qapi/qapi-commands-sockets.o
  CC      qapi/qapi-commands-tpm.o
  CC      qapi/qapi-commands-trace.o
  CC      qapi/qapi-commands-transaction.o
  CC      qapi/qapi-commands-ui.o
  CC      qmp.o
  CC      hmp.o
  CC      cpus-common.o
  CC      audio/audio.o
  CC      audio/noaudio.o
  CC      audio/wavaudio.o
  CC      audio/mixeng.o
  CC      audio/wavcapture.o
  CC      backends/rng.o
  CC      backends/rng-egd.o
  CC      backends/rng-random.o
  CC      backends/tpm.o
  CC      backends/hostmem.o
  CC      backends/hostmem-ram.o
  CC      backends/hostmem-file.o
  CC      backends/cryptodev.o
  CC      backends/cryptodev-builtin.o
  CC      backends/cryptodev-vhost.o
  CC      backends/cryptodev-vhost-user.o
  CC      backends/hostmem-memfd.o
  CC      block/stream.o
  CC      chardev/msmouse.o
  CC      chardev/wctablet.o
  CC      chardev/testdev.o
  CC      disas/i386.o
  CC      disas/riscv.o
  CC      fsdev/qemu-fsdev-dummy.o
  CC      fsdev/qemu-fsdev-opts.o
  CC      fsdev/qemu-fsdev-throttle.o
  CC      hw/acpi/acpi-stub.o
  CC      hw/acpi/ipmi-stub.o
  CC      hw/audio/soundhw.o
  CC      hw/block/block.o
  CC      hw/block/cdrom.o
  CC      hw/block/hd-geometry.o
  CC      hw/bt/core.o
  CC      hw/bt/l2cap.o
  CC      hw/bt/sdp.o
  CC      hw/bt/hci.o
  CC      hw/bt/hid.o
  CC      hw/bt/hci-csr.o
  CC      hw/char/serial.o
  CC      hw/char/virtio-console.o
  CC      hw/char/cadence_uart.o
  CC      hw/core/qdev.o
  CC      hw/core/qdev-properties.o
  CC      hw/core/bus.o
  CC      hw/core/reset.o
  CC      hw/core/qdev-fw.o
  CC      hw/core/fw-path-provider.o
  CC      hw/core/irq.o
  CC      hw/core/hotplug.o
  CC      hw/core/nmi.o
  CC      hw/core/sysbus.o
  CC      hw/core/machine.o
  CC      hw/core/loader.o
  CC      hw/core/qdev-properties-system.o
  CC      hw/core/register.o
  CC      hw/core/or-irq.o
  CC      hw/core/split-irq.o
  CC      hw/core/generic-loader.o
  CC      hw/core/null-machine.o
  CC      hw/cpu/core.o
  CC      hw/input/hid.o
  CC      hw/input/ps2.o
  CC      hw/input/virtio-input.o
  CC      hw/input/virtio-input-hid.o
  CC      hw/input/virtio-input-host.o
  CC      hw/intc/intc.o
  CC      hw/misc/unimp.o
  CC      hw/net/cadence_gem.o
  CC      hw/nvram/eeprom93xx.o
  CC      hw/nvram/fw_cfg.o
  CC      hw/nvram/chrp_nvram.o
  CC      hw/pci/pci-stub.o
  CC      hw/pcmcia/pcmcia.o
  CC      hw/scsi/scsi-disk.o
  CC      hw/scsi/emulation.o
  CC      hw/scsi/scsi-generic.o
  CC      hw/scsi/scsi-bus.o
  CC      hw/smbios/smbios-stub.o
  CC      hw/smbios/smbios_type_38-stub.o
  CC      hw/timer/cadence_ttc.o
  CC      hw/tpm/tpm_util.o
  CC      hw/tpm/tpm_passthrough.o
  CC      hw/tpm/tpm_emulator.o
  CC      hw/usb/core.o
  CC      hw/usb/combined-packet.o
  CC      hw/usb/bus.o
  CC      hw/usb/libhw.o
  CC      hw/usb/host-stub.o
  CC      hw/virtio/virtio-bus.o
  CC      hw/virtio/virtio-rng.o
  CC      hw/virtio/virtio-mmio.o
  CC      hw/virtio/vhost-stub.o
  CC      hw/watchdog/watchdog.o
  CC      migration/migration.o
  CC      migration/socket.o
  CC      migration/fd.o
  CC      migration/exec.o
  CC      migration/tls.o
  CC      migration/channel.o
  CC      migration/savevm.o
  CC      migration/colo.o
  CC      migration/colo-failover.o
  CC      migration/vmstate.o
  CC      migration/vmstate-types.o
  CC      migration/page_cache.o
  CC      migration/qemu-file.o
  CC      migration/global_state.o
  CC      migration/qemu-file-channel.o
  CC      migration/xbzrle.o
  CC      migration/postcopy-ram.o
  CC      migration/qjson.o
  CC      migration/block-dirty-bitmap.o
  CC      migration/block.o
  CC      net/net.o
  CC      net/queue.o
  CC      net/checksum.o
  CC      net/util.o
  CC      net/hub.o
  CC      net/socket.o
  CC      net/dump.o
  CC      net/eth.o
  CC      net/l2tpv3.o
  CC      net/vhost-user.o
  CC      net/slirp.o
  CC      net/filter.o
  CC      net/filter-buffer.o
  CC      net/filter-mirror.o
  CC      net/colo-compare.o
  CC      net/colo.o
  CC      net/filter-rewriter.o
  CC      net/filter-replay.o
  CC      net/tap.o
  CC      net/tap-linux.o
  CC      qom/cpu.o
  CC      replay/replay.o
  CC      replay/replay-internal.o
  CC      replay/replay-events.o
  CC      replay/replay-time.o
  CC      replay/replay-input.o
  CC      replay/replay-char.o
  CC      replay/replay-snapshot.o
  CC      replay/replay-net.o
  CC      replay/replay-audio.o
  CC      slirp/cksum.o
  CC      slirp/if.o
  CC      slirp/ip_icmp.o
  CC      slirp/ip6_icmp.o
  CC      slirp/ip6_input.o
  CC      slirp/ip6_output.o
  CC      slirp/ip_input.o
  CC      slirp/ip_output.o
  CC      slirp/dnssearch.o
  CC      slirp/dhcpv6.o
  CC      slirp/slirp.o
  CC      slirp/mbuf.o
  CC      slirp/misc.o
  CC      slirp/sbuf.o
  CC      slirp/socket.o
  CC      slirp/tcp_input.o
  CC      slirp/tcp_output.o
  CC      slirp/tcp_subr.o
  CC      slirp/tcp_timer.o
  CC      slirp/udp.o
  CC      slirp/udp6.o
  CC      slirp/bootp.o
  CC      slirp/tftp.o
  CC      slirp/arp_table.o
  CC      slirp/ndp_table.o
  CC      slirp/ncsi.o
  CC      ui/keymaps.o
  CC      ui/console.o
  CC      ui/cursor.o
  CC      ui/qemu-pixman.o
  CC      ui/input.o
  CC      ui/input-keymap.o
  CC      ui/input-legacy.o
  CC      ui/input-linux.o
  CC      ui/vnc.o
  CC      ui/vnc-enc-zlib.o
  CC      ui/vnc-enc-hextile.o
  CC      ui/vnc-enc-tight.o
  CC      ui/vnc-palette.o
  CC      ui/vnc-enc-zrle.o
  CC      ui/vnc-auth-vencrypt.o
  CC      ui/vnc-ws.o
  CC      ui/vnc-jobs.o
  CC      audio/ossaudio.o
  CC      chardev/char.o
  CC      chardev/char-fd.o
  CC      chardev/char-fe.o
  CC      chardev/char-file.o
  CC      chardev/char-io.o
  CC      chardev/char-mux.o
  CC      chardev/char-null.o
  CC      chardev/char-parallel.o
  CC      chardev/char-pipe.o
  CC      chardev/char-pty.o
  CC      chardev/char-ringbuf.o
  CC      chardev/char-serial.o
  CC      chardev/char-socket.o
  CC      chardev/char-stdio.o
  CC      chardev/char-udp.o
  GEN     riscv64-softmmu/hmp-commands.h
  GEN     riscv64-softmmu/hmp-commands-info.h
  GEN     riscv64-softmmu/config-target.h
  CC      riscv64-softmmu/exec.o
  CC      riscv64-softmmu/tcg/tcg.o
  CC      riscv64-softmmu/tcg/tcg-op.o
  CC      riscv64-softmmu/tcg/tcg-op-vec.o
  CC      riscv64-softmmu/tcg/tcg-op-gvec.o
  CC      riscv64-softmmu/tcg/tcg-common.o
  CC      riscv64-softmmu/tcg/optimize.o
  CC      riscv64-softmmu/fpu/softfloat.o
  CC      riscv64-softmmu/disas.o
  GEN     riscv64-softmmu/gdbstub-xml.c
  CC      riscv64-softmmu/gdbstub-xml.o
  CC      riscv64-softmmu/arch_init.o
  CC      riscv64-softmmu/cpus.o
  CC      riscv64-softmmu/monitor.o
  CC      riscv64-softmmu/gdbstub.o
  CC      riscv64-softmmu/balloon.o
  CC      riscv64-softmmu/ioport.o
  CC      riscv64-softmmu/numa.o
  CC      riscv64-softmmu/qtest.o
  CC      riscv64-softmmu/memory.o
  CC      riscv64-softmmu/memory_mapping.o
  CC      riscv64-softmmu/dump.o
  CC      riscv64-softmmu/migration/ram.o
  CC      riscv64-softmmu/accel/accel.o
  CC      riscv64-softmmu/accel/stubs/hax-stub.o
  CC      riscv64-softmmu/accel/stubs/hvf-stub.o
  CC      riscv64-softmmu/accel/stubs/whpx-stub.o
  CC      riscv64-softmmu/accel/stubs/kvm-stub.o
  CC      riscv64-softmmu/accel/tcg/tcg-all.o
  CC      riscv64-softmmu/accel/tcg/cputlb.o
  CC      riscv64-softmmu/accel/tcg/tcg-runtime.o
  CC      riscv64-softmmu/accel/tcg/tcg-runtime-gvec.o
  CC      riscv64-softmmu/accel/tcg/cpu-exec.o
  CC      riscv64-softmmu/accel/tcg/cpu-exec-common.o
  CC      riscv64-softmmu/accel/tcg/translate-all.o
  CC      riscv64-softmmu/accel/tcg/translator.o
  CC      riscv64-softmmu/hw/block/virtio-blk.o
  CC      riscv64-softmmu/hw/block/vhost-user-blk.o
  CC      riscv64-softmmu/hw/block/dataplane/virtio-blk.o
  CC      riscv64-softmmu/hw/char/virtio-serial-bus.o
  CC      riscv64-softmmu/hw/display/virtio-gpu.o
  CC      riscv64-softmmu/hw/display/virtio-gpu-3d.o
  CC      riscv64-softmmu/hw/net/virtio-net.o
  CC      riscv64-softmmu/hw/net/vhost_net.o
  CC      riscv64-softmmu/hw/net/rocker/qmp-norocker.o
  CC      riscv64-softmmu/hw/scsi/virtio-scsi.o
  CC      riscv64-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      riscv64-softmmu/hw/scsi/vhost-scsi-common.o
  CC      riscv64-softmmu/hw/scsi/vhost-scsi.o
  CC      riscv64-softmmu/hw/scsi/vhost-user-scsi.o
  CC      riscv64-softmmu/hw/vfio/common.o
  CC      riscv64-softmmu/hw/vfio/platform.o
  CC      riscv64-softmmu/hw/vfio/spapr.o
  CC      riscv64-softmmu/hw/virtio/virtio.o
  CC      riscv64-softmmu/hw/virtio/virtio-balloon.o
  CC      riscv64-softmmu/hw/virtio/virtio-crypto.o
  CC      riscv64-softmmu/hw/virtio/vhost.o
  CC      riscv64-softmmu/hw/virtio/vhost-backend.o
  CC      riscv64-softmmu/hw/virtio/vhost-user.o
  CC      riscv64-softmmu/hw/virtio/vhost-vsock.o
  CC      riscv64-softmmu/hw/riscv/boot.o
  CC      riscv64-softmmu/hw/riscv/riscv_htif.o
  CC      riscv64-softmmu/hw/riscv/riscv_hart.o
  CC      riscv64-softmmu/hw/riscv/sifive_e.o
  CC      riscv64-softmmu/hw/riscv/sifive_clic.o
  CC      riscv64-softmmu/hw/riscv/sifive_clint.o
  CC      riscv64-softmmu/hw/riscv/sifive_prci.o
  CC      riscv64-softmmu/hw/riscv/sifive_plic.o
  CC      riscv64-softmmu/hw/riscv/sifive_test.o
  CC      riscv64-softmmu/hw/riscv/sifive_u.o
  CC      riscv64-softmmu/hw/riscv/sifive_uart.o
  CC      riscv64-softmmu/hw/riscv/spike.o
  CC      riscv64-softmmu/hw/riscv/virt.o
  CC      riscv64-softmmu/target/riscv/translate.o
  CC      riscv64-softmmu/target/riscv/op_helper.o
  CC      riscv64-softmmu/target/riscv/cpu_helper.o
  CC      riscv64-softmmu/target/riscv/cpu.o
  CC      riscv64-softmmu/target/riscv/csr.o
  CC      riscv64-softmmu/target/riscv/fpu_helper.o
  CC      riscv64-softmmu/target/riscv/gdbstub.o
  CC      riscv64-softmmu/target/riscv/pmp.o
  GEN     trace/generated-helpers.c
  CC      riscv64-softmmu/trace/generated-helpers.o
  CC      riscv64-softmmu/trace/control-target.o
  LINK    riscv64-softmmu/qemu-system-riscv64
  GEN     riscv32-softmmu/hmp-commands.h
  GEN     riscv32-softmmu/hmp-commands-info.h
  GEN     riscv32-softmmu/config-target.h
  CC      riscv32-softmmu/exec.o
  CC      riscv32-softmmu/tcg/tcg.o
  CC      riscv32-softmmu/tcg/tcg-op.o
  CC      riscv32-softmmu/tcg/tcg-op-vec.o
  CC      riscv32-softmmu/tcg/tcg-op-gvec.o
  CC      riscv32-softmmu/tcg/tcg-common.o
  CC      riscv32-softmmu/tcg/optimize.o
  CC      riscv32-softmmu/fpu/softfloat.o
  CC      riscv32-softmmu/disas.o
  GEN     riscv32-softmmu/gdbstub-xml.c
  CC      riscv32-softmmu/gdbstub-xml.o
  CC      riscv32-softmmu/arch_init.o
  CC      riscv32-softmmu/cpus.o
  CC      riscv32-softmmu/monitor.o
  CC      riscv32-softmmu/gdbstub.o
  CC      riscv32-softmmu/balloon.o
  CC      riscv32-softmmu/ioport.o
  CC      riscv32-softmmu/numa.o
  CC      riscv32-softmmu/qtest.o
  CC      riscv32-softmmu/memory.o
  CC      riscv32-softmmu/memory_mapping.o
  CC      riscv32-softmmu/dump.o
  CC      riscv32-softmmu/migration/ram.o
  CC      riscv32-softmmu/accel/accel.o
  CC      riscv32-softmmu/accel/stubs/hax-stub.o
  CC      riscv32-softmmu/accel/stubs/hvf-stub.o
  CC      riscv32-softmmu/accel/stubs/whpx-stub.o
  CC      riscv32-softmmu/accel/stubs/kvm-stub.o
  CC      riscv32-softmmu/accel/tcg/tcg-all.o
  CC      riscv32-softmmu/accel/tcg/cputlb.o
  CC      riscv32-softmmu/accel/tcg/tcg-runtime.o
  CC      riscv32-softmmu/accel/tcg/tcg-runtime-gvec.o
  CC      riscv32-softmmu/accel/tcg/cpu-exec.o
  CC      riscv32-softmmu/accel/tcg/cpu-exec-common.o
  CC      riscv32-softmmu/accel/tcg/translate-all.o
  CC      riscv32-softmmu/accel/tcg/translator.o
  CC      riscv32-softmmu/hw/block/virtio-blk.o
  CC      riscv32-softmmu/hw/block/vhost-user-blk.o
  CC      riscv32-softmmu/hw/block/dataplane/virtio-blk.o
  CC      riscv32-softmmu/hw/char/virtio-serial-bus.o
  CC      riscv32-softmmu/hw/display/virtio-gpu.o
  CC      riscv32-softmmu/hw/display/virtio-gpu-3d.o
  CC      riscv32-softmmu/hw/net/virtio-net.o
  CC      riscv32-softmmu/hw/net/vhost_net.o
  CC      riscv32-softmmu/hw/net/rocker/qmp-norocker.o
  CC      riscv32-softmmu/hw/scsi/virtio-scsi.o
  CC      riscv32-softmmu/hw/scsi/virtio-scsi-dataplane.o
  CC      riscv32-softmmu/hw/scsi/vhost-scsi-common.o
  CC      riscv32-softmmu/hw/scsi/vhost-scsi.o
  CC      riscv32-softmmu/hw/scsi/vhost-user-scsi.o
  CC      riscv32-softmmu/hw/vfio/common.o
  CC      riscv32-softmmu/hw/vfio/platform.o
  CC      riscv32-softmmu/hw/vfio/spapr.o
  CC      riscv32-softmmu/hw/virtio/virtio.o
  CC      riscv32-softmmu/hw/virtio/virtio-balloon.o
  CC      riscv32-softmmu/hw/virtio/virtio-crypto.o
  CC      riscv32-softmmu/hw/virtio/vhost.o
  CC      riscv32-softmmu/hw/virtio/vhost-backend.o
  CC      riscv32-softmmu/hw/virtio/vhost-user.o
  CC      riscv32-softmmu/hw/virtio/vhost-vsock.o
  CC      riscv32-softmmu/hw/riscv/boot.o
  CC      riscv32-softmmu/hw/riscv/riscv_htif.o
  CC      riscv32-softmmu/hw/riscv/riscv_hart.o
  CC      riscv32-softmmu/hw/riscv/sifive_e.o
  CC      riscv32-softmmu/hw/riscv/sifive_clic.o
  CC      riscv32-softmmu/hw/riscv/sifive_clint.o
  CC      riscv32-softmmu/hw/riscv/sifive_prci.o
  CC      riscv32-softmmu/hw/riscv/sifive_plic.o
  CC      riscv32-softmmu/hw/riscv/sifive_test.o
  CC      riscv32-softmmu/hw/riscv/sifive_u.o
  CC      riscv32-softmmu/hw/riscv/sifive_uart.o
  CC      riscv32-softmmu/hw/riscv/spike.o
  CC      riscv32-softmmu/hw/riscv/virt.o
  CC      riscv32-softmmu/target/riscv/translate.o
  CC      riscv32-softmmu/target/riscv/op_helper.o
  CC      riscv32-softmmu/target/riscv/cpu_helper.o
  CC      riscv32-softmmu/target/riscv/cpu.o
  CC      riscv32-softmmu/target/riscv/csr.o
  CC      riscv32-softmmu/target/riscv/fpu_helper.o
  CC      riscv32-softmmu/target/riscv/gdbstub.o
  CC      riscv32-softmmu/target/riscv/pmp.o
  GEN     trace/generated-helpers.c
  CC      riscv32-softmmu/trace/generated-helpers.o
  CC      riscv32-softmmu/trace/control-target.o
  LINK    riscv32-softmmu/qemu-system-riscv32
  AS      optionrom/multiboot.o
  BUILD   optionrom/multiboot.img
  BUILD   optionrom/multiboot.raw
  SIGN    optionrom/multiboot.bin
  AS      optionrom/linuxboot.o
  BUILD   optionrom/linuxboot.img
  BUILD   optionrom/linuxboot.raw
  SIGN    optionrom/linuxboot.bin
  CC      optionrom/linuxboot_dma.o
  BUILD   optionrom/linuxboot_dma.img
  BUILD   optionrom/linuxboot_dma.raw
  SIGN    optionrom/linuxboot_dma.bin
  AS      optionrom/kvmvapic.o
  BUILD   optionrom/kvmvapic.img
  BUILD   optionrom/kvmvapic.raw
  SIGN    optionrom/kvmvapic.bin
make[1]: Leaving directory '/home/nisiyama/Keystone/keystone/riscv-qemu'
cd bootrom; make; cd ..
make[1]: Entering directory '/home/nisiyama/Keystone/keystone/bootrom'
riscv64-unknown-elf-gcc -march=rv64imafdc -mcmodel=medany -mabi=lp64 -nostdlib -nostartfiles -fno-common -std=gnu11 -static -fPIC -O2 -Wall  -I./ -L . -T bootloader.lds -o bootrom.elf ./bootloader.S ./bootloader.c ./ed25519/*.c ./sha3/*.c
./bootloader.c: In function 'random_byte':
./bootloader.c:44:2: warning: #warning Bootloader does not have entropy source, keys are for TESTING ONLY [-Wcpp]
 #warning Bootloader does not have entropy source, keys are for TESTING ONLY
  ^~~~~~~
In file included from ./use_test_keys.h:1:0,
                 from ./bootloader.c:76:
./test_dev_key.h: In function 'bootloader':
./test_dev_key.h:3:2: warning: #warning Using TEST device root key. No integrity guarantee. [-Wcpp]
 #warning Using TEST device root key. No integrity guarantee.
  ^~~~~~~
make[1]: Leaving directory '/home/nisiyama/Keystone/keystone/bootrom'
make -f hifive.mk
make[1]: Entering directory '/home/nisiyama/Keystone/keystone'
mkdir -p /home/nisiyama/Keystone/keystone/hifive-work/hifive-linux/
cp -p /home/nisiyama/Keystone/keystone/hifive-conf/linux_cma_conf /home/nisiyama/Keystone/keystone/hifive-work/hifive-linux/.config
make -C /home/nisiyama/Keystone/keystone/riscv-linux O=/home/nisiyama/Keystone/keystone/hifive-work/hifive-linux ARCH=riscv olddefconfig
make[2]: Entering directory '/home/nisiyama/Keystone/keystone/riscv-linux'
make[3]: Entering directory '/home/nisiyama/Keystone/keystone/hifive-work/hifive-linux'
  HOSTCC  scripts/basic/fixdep
  GEN     ./Makefile
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --olddefconfig Kconfig
#
# configuration written to .config
#
make[3]: Leaving directory '/home/nisiyama/Keystone/keystone/hifive-work/hifive-linux'
make[2]: Leaving directory '/home/nisiyama/Keystone/keystone/riscv-linux'
echo rv64imafdc
rv64imafdc
echo

rm -rf /home/nisiyama/Keystone/keystone/hifive-work/buildroot_initramfs/
mkdir -p /home/nisiyama/Keystone/keystone/hifive-work/buildroot_initramfs/
cp /home/nisiyama/Keystone/keystone/hifive-conf/buildroot_initramfs_config /home/nisiyama/Keystone/keystone/hifive-work/buildroot_initramfs/.config
make -s -C /home/nisiyama/Keystone/keystone/buildroot RISCV=/home/nisiyama/Keystone/keystone/riscv PATH=/home/nisiyama/Keystone/keystone/riscv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_1804.2019.521.0_x64__79rhkp1fndgsc:/mnt/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/bin:/mnt/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/libnvvp:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/nodejs:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Users/Nisiy/AppData/Local/Programs/Python/Python37/Scripts:/mnt/c/Users/Nisiy/AppData/Local/Programs/Python/Python37:/mnt/c/Users/Nisiy/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/Nisiy/AppData/Local/atom/bin:/mnt/c/MinGW/bin:/mnt/c/texlive/2018/bin/win32:/mnt/c/Users/Nisiy/AppData/Roaming/npm:/mnt/c/Program Files/Java/jdk-12.0.1/bin:/mnt/d/apache-ant-1.10.5/bin:/mnt/c/Users/Nisiy/AppData/Local/Microsoft/WindowsApps:/snap/bin:/home/nisiyama/Keystone/keystone/riscv/bin O=/home/nisiyama/Keystone/keystone/hifive-work/buildroot_initramfs olddefconfig CROSS_COMPILE=riscv64-unknown-linux-gnu-
/bin/sh: 1: Syntax error: "(" unexpected
hifive.mk:69: recipe for target '/home/nisiyama/Keystone/keystone/hifive-work/buildroot_initramfs/.config' failed
make[1]: *** [/home/nisiyama/Keystone/keystone/hifive-work/buildroot_initramfs/.config] Error 2
make[1]: Leaving directory '/home/nisiyama/Keystone/keystone'
Makefile:19: recipe for target 'hifive' failed
make: *** [hifive] Error 2

Fixing sm hash calculation

I temporary pushed it to my repo, since the keystone changes are not merged to the sifive/freedom-u540-c000-bootloader at the moment.
Do you mind merging this to your repo?

mcd500/keystone-freedom-u540-c000-bootloader@bcc8b84

With the commit keystone-enclave/freedom-u540-c000-bootloader@3fe4313 which is fixing
the starting address of the payload, then it was calculating the hash crossing the boundary of sm area and payload area.
Fixing the length accordingly to prevent having different hash values for just loading different kernel.

We are currently porting zsbl and fsbl on fpga to make them build and run keystone on both fpgas and sifive Unleashed. Please give us some time to cleaning and testing them in the bellow link to be ready for pull requests.
https://github.com/mcd500/freedom/tree/vc707-zsbl-try

Orphan enclaves are not destroyed

When the host dies (e.g., due to ctrl+C), the driver must destroy the enclave and clean up the resource.
There are bugs in the SM/driver which make an orphan enclave remain undestroyed after keystone_release.

Wrong security monitor size on secure bootstrapping

The security monitor spans (0x80000000-0x80200000)
and the last page (0x801ff000) is for secure bootstrapping parameters (e.g., attestation key, device pubkey, etc).
Currently, the last page is hard-coded as 0x802ff000 which is not protected by the PMP.

This is a mistake, and should be fixed as soon.

Package builds of keystone-demo

We need to package the build process of keystone-demo so that people can run one or two scripts to run demo in QEMU.

  • update the documentation as well

p.s. I found that you can refer to this issue in the commit by "#" and if you say "resolves #", the issue is automatically closed when the commit is merged! smart GitHub

Fix for build issue with OpenSSL 1.1.0

I was having trouble building the dev branch on Ubuntu 18.04. It seems like the problem is that Ubuntu 18.04 uses OpenSSL version 1.1.0 and this version of OpenSSL has removed some functions from their API, which causes the compilation of riscv-linux/scripts/extract-cert.c to fail.

The fix is pretty straightforward, a couple of initialization calls need to removed for OpenSSL version 1.1.0. (I got this information from the OpenSSL wiki: https://wiki.openssl.org/index.php/Library_Initialization.)

Here is the patch. I didn't submit a pull request because I wasn't sure where to submit it as riscv/riscv-linux is no longer maintained.

diff --git a/scripts/extract-cert.c b/scripts/extract-cert.c
index b071bf476fea..407ba4ad6352 100644
--- a/scripts/extract-cert.c
+++ b/scripts/extract-cert.c
@@ -91,8 +91,10 @@ int main(int argc, char **argv)
 {
        char *cert_src;
 
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
        OpenSSL_add_all_algorithms();
        ERR_load_crypto_strings();
+#endif
        ERR_clear_error();
 
        kbuild_verbose = atoi(getenv("KBUILD_VERBOSE")?:"0");

I thought I'd create an issue so that you guys can either apply the patch or document the issue somewhere.

Package build process

We need to package all the builds into single script (e.g., build.sh) instead of executing each of the commands by hand.

Adding a function definition breaks the tutorial code

Describe the bug
The second tutorial, "hello_native", runs into a runtime exception when the following code is inserted to the eapp. The function inserted is not being called anywhere in the code.

#define __function_primitive_ocall 1001
int primitive_ocall(int arg1, int arg2) {
	char __argument_space[8];
	char __return_space[4];
	*((int *) (__argument_space + 0)) = arg1;
	*((int *) (__argument_space + 4)) = arg2;
	ocall (__function_primitive_ocall, __argument_space, 8, __return_space, 4);
	return *((int *) __return_space);
}

The runtime exception looks like below:

[runtime] non-handlable interrupt/exception at 0xffffffffc0000010 on 0xffffffffc0000010 (scause: 0xc)
the runtime could not handle exception 12
medeleg: 0x000000000000b109 (expected? 4096)

Build Failure

git submodule status
 0d574e05ffc0555bf54ba9fa523b0dcb0d40cfe4 buildroot (2017.08-7602-g0d574e05ff)
 43f0fd2e4508d4141c9303a40e3a401802192662 linux-keystone-driver (heads/master)
 1b80cbe97d2c29212398d3b74ddc54718ad32e23 riscv-gnu-toolchain ((null))
 65e929792fb9b632c20be118fa0795b26cc89fe4 riscv-linux (v4.15-60-g65e929792fb9)
 7804d7ee89a5d1a0fb352929984b8f6fdd2667c4 riscv-pk (archive-1.9.1-222-g7804d7e)
 3cc4afdb712638ffee307eeb672047f91597386e riscv-qemu (riscv-for-master-3.1-rc2-203-g3cc4afdb71)
+06d180873dd18e6860f60896a5f16f3e8785eb4a sdk (remotes/origin/HEAD)

It is on Ubuntu with dev branch.

[High Priority] Try to Bump Upstream QEMU, Linux, and GNU Tools

It's been a while since QEMU, Linux and GNU tools have been upstreamed.
A LOT of new changes in the upstream will be required for some of our TODOs.

(1) RV32 support for the driver--> already been upstream Linux v5.0~
(2) QEMU bugs --> could have been fixed in the upstream QEMU. Also check if the distribution contains RISC-V. then, we don't even need to build our own QEMU
(3) Toolchain --> this has been always a headache for setting up the dev environment. Check if there is a distributed package.

File corruption

Firesim-riscv-tools-prebuilt  was damaged when I unzipped it.
Thank you!

SM DoS Protection mechanism against broken enclaves

The SM currently have no DoS protection against enclaves.
This means that the enclave can break or hang the system by turning into an invalid status.
For example, the runtime can set invalid sepc, which will cause M-mode seg faults.
The runtime can also send some IPIs to other cores (e.g., TLB flush, etc).

This sounds scary, but in fact, a fix is pretty straightforward: the SM can just identify the source of each trap, and if it's from enclave, soft-exit it if SM cannot handle the trap.
"traps" also include SBI calls (mcall), which makes it very relevant to the following issue:
keystone-enclave/riscv-pk#25

I don't have much time for this right now, but this has pretty high priority regarding security.

Travis script fails due to system lack of memory.

I was trying to run the travis tests to validate the install and it was erroring without giving the real reason (just my suspicion that it did not launch qemu for some reason). I dug around and found out it was because I allocated my system with too little memory. Do you think we can add a check to give a proper error message about that or forward the error message to the travis script so that users can realize that they may need to allocate more memory for qemu to properly boot?

No access rights

I clone the source, and do "git submodule init", "git submodule update" :

[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

ncurses 6.1 Configuring failed:configure: error: C compiler cannot create executables

whch@whch:~/keystone$ make
mkdir -p buildroot/dl
make -f hifive.mk
make[1]: Entering directory '/home/whch/keystone'
make -s -C /home/whch/keystone/buildroot RISCV=/home/whch/keystone/riscv-gnu-toolchain/riscv PATH=/home/whch/keystone/riscv-gnu-toolchain/riscv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/whch/keystone/riscv-gnu-toolchain/riscv/bin O=/home/whch/keystone/hifive-work/buildroot_initramfs
make[2]: Entering directory '/home/whch/keystone/buildroot'

ncurses 6.1 Configuring
configure: error: C compiler cannot create executables
make[2]: *** [package/pkg-generic.mk:231: /home/whch/keystone/hifive-work/buildroot_initramfs/build/ncurses-6.1/.stamp_configured] Error 77
make[2]: Leaving directory '/home/whch/keystone/buildroot'
make[1]: *** [hifive.mk:62: /home/whch/keystone/hifive-work/buildroot_initramfs/images/rootfs.tar] Error 2
make[1]: Leaving directory '/home/whch/keystone'
make: *** [Makefile:18: hifive] Error 2

Thank you for answer,may be it's not a bug.

Separate enclave_create ioctl into three (create/add_page/finalize)

Currently, enclave initialization is mostly done by the Linux driver by create_enclave IOCTL.
We need to move ELF loading code into SDK for several reasons.

(1) Enclave must be measurable without the driver.
(2) ELF loading must be extensible, thus the driver is not a good place to live.

Weird QEMU assertion failure when the driver fails to allocate memory

Whenever the driver fails to allocate enclave memory, it falls back and destroys the enclave.
Somehow, the QEMU dies with this assertion failure

ERROR:/home/ubuntu/keystone/riscv-qemu/cpus.c:1848:qemu_mutex_lock_iothread_impl:  assertion failed: (!qemu_mutex_iothread_locked())

This is not reproducible in HiFive Unleashed, which implies that there could be a bug in QEMU.
We're not going to handle this at this moment, because probably it is not Keystone.

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.