Summary:
If we're going to print a trace message when we inject the syscall, we might as well show the raw args.
The specific use case I used this for was making sure when I am changing args between the Detcore and reverie layers, that they are changing in the expected way. Detcore already prints log messages for the syscalls and arguments it receives from the guest. This lets us see the actual arguments that are passed to the kernel.
Reviewed By: jasonwhite
Differential Revision: D35804814
fbshipit-source-id: 2fc5a1b526326b554d4f015bfd0cb41d0dfc4ab2
Summary:
The Ubuntu VM that GitHub Actions uses doesn't seem to have permissions
to access the PMU. This exits the test successfully if it's not available.
Pull Request resolved: https://github.com/facebookexperimental/reverie/pull/12
Reviewed By: andronat
Differential Revision: D35838916
Pulled By: jasonwhite
fbshipit-source-id: 0e6cba4c170e3c7e293300e031ee41333c399040
Summary:
In case the child dies, no error code is reported. Here is an example:
```
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ()', hermetic_infra/reverie/reverie-process/src/container.rs:850:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
With this diff, we at least have some more info shown:
```
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { errno: EINVAL, context: Mount }', hermetic_infra/reverie/reverie-process/src/container.rs:834:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
Reviewed By: jasonwhite
Differential Revision: D35615348
fbshipit-source-id: ad540645a1bb06f275ab43994b1b1f4e9a4fdb1f
Summary:
Upgrades to platform010.
1. This will let us use the new `core::arch::asm` macro and get rid of `llvm_asm`.
2. All of fbcode should be upgrading to platform010. See [this post](https://fb.workplace.com/groups/fbcode.fyi/permalink/4768582506510846/) for more information.
Reviewed By: johnhurt
Differential Revision: D34939437
fbshipit-source-id: 2f8a6249c09c74d4e07dbca41994b17a708bf333
Summary:
Add NanosleepFamily of syscalls, namely `nanosleep` and `clock_nanosleep`.
`nanosleep` can be transformed into `clock_nanosleep` by using clockid `CLOCK_REALTIME` and flags 0 (i.e., *not* `TIMER_ABSTIME`).
Reviewed By: johnhurt
Differential Revision: D35577747
fbshipit-source-id: 5925b083b4a49cdbfdff11117156d6366947d706
Summary: `libunwind` seems to be failing to look up the symbols. Need to debug this further.
Reviewed By: andronat
Differential Revision: D35569071
fbshipit-source-id: 38dc3925a277bb655ca476f97791754a736fb6aa
Summary: `clock_getres` is a vdso function in recent versions of glibc.
Reviewed By: andronat
Differential Revision: D35570102
fbshipit-source-id: d09850b4d1bec002af749452f80228e1542fafaa
Summary: 0.3.10 adds a new EnvFilter builder that I would like to use. :)
Reviewed By: wqfish
Differential Revision: D35473723
fbshipit-source-id: df31dad09c8f8fc9c27a43c85b5d6ac8f97d69a3
Summary: Expose the child TID arg passed to clone family syscalls. For fork and vfork this will be 0 as child TID is not an arg, for clone and clone3 this is read from the args.
Reviewed By: jasonwhite
Differential Revision: D35370069
fbshipit-source-id: 32821152adaadd17c66f334f286f5410fabd4b97
Summary:
The changes from the old "rustfmt 2.x" branch, which we upgraded to in D23569308, have since been merged into the master branch of rustfmt under the flag `version = "Two"`. Fixes like needed for https://fb.workplace.com/groups/learningrust/posts/545143730235002 now only land to master; there is no separate 2.x branch in development. This diff pulls in the newest version of rustfmt so that we can handle any new syntax and pick up fixes to rustfmt issues that we report or contribute.
The tools/third-party/rustfmt changes in this diff are generated by:
```
$ echo nightly-2022-03-28 > tools/third-party/rustfmt/.rustfmt-version
$ tools/third-party/rustfmt/rustfmt-upgrade
```
Reviewed By: zertosh
Differential Revision: D35234535
fbshipit-source-id: c79454fa918cf052312418dd271404e85bf872b2
Summary:
Context: I am upgrading rustfmt in D35234535.
---
This diff contains all the formatting changes which are idempotent between the old and the new version of rustfmt. It's generated by formatting with the new rustfmt, then formatting immediately again with the old rustfmt. If there are any big changes in here, that's code that old rustfmt used to crash on but new rustfmt handles correctly.
Separating out this part of the changes prior to flipping the rustfmt version switch globally allows the amount of code that needs to be landed atomically to be smaller, since this diff is independent and can land at any point before the rest of the stack.
---
Reviewed By: zertosh
Differential Revision: D35234529
fbshipit-source-id: 77e102f5d6f4b7f05df8d5d6bd9294cc9f3b15e6
Summary: This is useful when wrapping a preexisting `Command` with another program.
Reviewed By: johnhurt
Differential Revision: D35164471
fbshipit-source-id: 39f861de9cf41c1ba438c497c885d5d367ada5ce
Summary:
Adds the ability to receive seccomp notify events from a process asynchronously.
NOTE: Getting the file descriptor out of the `seccomp()` return value in the child process is very akward. Because of this, there is currently a possibility of deadlock if using `seccomp_notify` and a process fails to spawn. In this case, an error will be sent through a pipe to the parent process, but the parent process will never be able to read it because it will be spinning in a loop trying to read the file descriptor from the child.
Reviewed By: johnhurt
Differential Revision: D35138101
fbshipit-source-id: 2df0ddb39a6ed7e594d04df188a2143833f082c0
Summary:
This results in no formatting changes for the Rust code that's in fbcode today, but it does affect the configuration of the Rust parser that `rustfmt` parses its input with.
There are some language changes between 2018 edition and 2021 edition: for example the macro input in `m!(s"")` is 2 tokens in 2018 edition and 1 token in 2021 edition. Thus even absent any formatting differences, it's possible that different error messages would be produced on a particular input by `rustfmt --edition 2018` vs `rustfmt --edition 2021`, so it's best for us to keep the rustfmt edition in sync with the edition that Buck runs rustc with, which is:
https://www.internalfb.com/code/fbsource/[b25775c8103c84ae602d9bcf297595b56f932f5a]/tools/buckconfigs/fbsource-common.bcfg?lines=324-325
Reviewed By: zertosh
Differential Revision: D35234518
fbshipit-source-id: c1b9ab47f4e592b7fd1530d39af878775cf1dc18
Summary:
This diff does the following:
- Updates the tracing crates to the latest versions available. Changes include:
- Experimental support for [Valuable](https://tokio.rs/blog/2021-05-valuable), which makes recording values much more like how serde does. Valuable also makes it easier to write a tracing-slog crate due to some implementation details of slog where buffering of values is necessary.
- Combinators for combining filters in tracing-subscriber.
- A `MakeWriter` implementation for `RollingFileAppender` in `tracing_appender`, which allows the `RollingFileAppender` without a background thread to being spun up.
- Reduced the disabled span drop overhead by 50-70%—this might be most apparent in tests that don't set a subscriber.
- Move the tokio-console off git dependencies and to published versions on crates.io.
This diff also updates the following, non-exhaustive list of crates:
- parking_lot
- prost
- thread_local
- tonic
- hyper
- httparse
- h2
allow-large-files
Reviewed By: jsgf, fanzeyi
Differential Revision: D34801437
fbshipit-source-id: 2409de9194c8e00647ac5e4c514325fd2e23d247
Summary:
The `llvm_asm` nightly feature was removed in Rust 1.59 and `asm!()` was simultaneously stabilized, so we need to make the switch so things continue compiling.
This retains the `llvm_asm` code so that it can continue compiling on old llvm versions. This will be removed when that is updated.
Reviewed By: johnhurt
Differential Revision: D34561246
fbshipit-source-id: 42cd2c7e83cea9a5c21bd5871463bb1a42be139d
Summary: The `count` wasn't getting initialized properly, so it was possible in theory that the check could have been failing. I noticed this while attempting to convert this chunk of `llvm_asm!()` to the new `asm!()` syntax. Also added documentation explaining what this code is doing because it's not easy to read.
Reviewed By: johnhurt
Differential Revision: D34542806
fbshipit-source-id: 0f79b9d36757756a1cf76e98830f9cc76f06336c
Summary: Quick fix to make remove the postential for warning messages to cause false determinism failures
Reviewed By: andronat
Differential Revision: D34243592
fbshipit-source-id: 30c025ad8c4921e9c15f72956937166bfaf5d598
Summary:
Adds a way to fetch the command provided to `TracerBuilder`.
We're running into a situation where we're constructing a TracerBuilder and using it much later, but we want to debug and print the command that we're tracing when we execute the traced program.
You can alternatively avoid this by storing the necessary info alongside in an adjacent struct, but it feels a little silly to have to carry around a separate struct just for debugging.
Reviewed By: jasonwhite
Differential Revision: D34231169
fbshipit-source-id: ef40cb396f5530ee1f4324694ce5d9122dfe281f
Summary: Something appears to be causing timer marker events to randomly be sent early or possibly multiple times. This commit adds some sanity check and retry handling to ensure that early wakeups do not impact the implementing tool or at least long runs of single steps (and thus the timeouts that originally sparked this investigation)
Reviewed By: jasonwhite
Differential Revision: D33828008
fbshipit-source-id: 008bf1793964053405643640155269603c4e6bcc
Summary:
This is called when creating a slave from a master pty and returns a file descriptor.
Usage example:
```
async fn handle_ioctl<G: Guest<Self>>(
&self,
guest: &mut G,
syscall: Ioctl,
) -> Result<i64, Errno> {
use reverie::syscalls::ioctl;
match syscall.request() {
ioctl::Request::TIOCGPTPEER(flags) => {
let fd = guest.inject(syscall).await?;
// Do something with the flags and fd ...
Ok(fd)
}
_ => Ok(guest.inject(syscall).await?)
}
}
```
Reviewed By: wangbj, igorsugak
Differential Revision: D33961825
fbshipit-source-id: 0e6d4a0ed984a4b96b2501095dd44a978030788e
Summary: Adds support for the `clone3` syscall, which is now used by `pthread_create`. This also introduces `CloneFamily`, which abstracts `fork`, `vfork`, `clone`, and `clone3`.
Reviewed By: johnhurt
Differential Revision: D33865362
fbshipit-source-id: 8b91225c63ff6a8aa9c283877a30f58aa4cd9bb2
Summary: Forgot to do this in the previous diff.
Reviewed By: rrnewton
Differential Revision: D33801337
fbshipit-source-id: 68afdd162412c5b5636f87990d543f4f93a8939b
Summary:
Adds file and line number resolution to backtraces. This also adds a 1GB limit on the amount of in-memory symbols at any given time. If the internal symbol cache exceeds this, the oldest entries will be discarded until we're under that limit again. We may need to tweak this and make it more configurable in the future.
Follow-up: Auxiliary debug files, such as `.debug` files, are not supported. This should be easy to support by reading the `gnu_debuglink` section and finding the `.debug` file.
Reviewed By: johnhurt
Differential Revision: D33086623
fbshipit-source-id: 43112e3bdd135a1a43ca75c10756cc8ec101c9b8
Summary: Mozilla-rr has a set of tests that it runs to determine if the host system's perf timers can be trusted. This diff transcribes that functionality (as close as possible) into reverie
Reviewed By: jasonwhite
Differential Revision: D33644553
fbshipit-source-id: 8ecd505bf339ceb4c8b2b8fea86a1f23b14a9b73
Summary: This hasn't been necessary for quite a while now.
Reviewed By: wangbj
Differential Revision: D33411662
fbshipit-source-id: e6f88834521809b59323aa9d14796ff31571e7b6