Summary: If an RPC fails to send, there isn't much that can be done to handle it. In all call sites so far, they all just unwrap the error because it can't be handled properly. If an RPC fails, it is a programmer error (because the request/response failed to serialize/deserialize) and indicates a bug in our code.
Differential Revision: D37563857
fbshipit-source-id: 267072709f4230732a13989aaf74b50fd0908337
Summary: This makes merge conflicts much easier to handle.
Reviewed By: johnhurt
Differential Revision: D37564000
fbshipit-source-id: a7f1a2711ffbdbb23c93e2f479f47d0368a2dad9
Summary:
From the changelog:
- Added `SysnoSet` for constructing sets of syscalls. It uses a bitset under
the hood and provides constant-time lookup and insertion of `Sysno`s.
- Fixed `Sysno::len()` returning the wrong value for architectures with large
syscall offsets.
- Deprecated `Sysno::len()`. Use `Sysno::table_size()` instead. This will be
removed in the next major version.
Differential Revision: D37556871
fbshipit-source-id: a287f2146a0776e6f0459a08b43a1d5a92bb6176
Summary: Adds log output to the strace example tool. The real strace does this and so should we.
Reviewed By: johnhurt
Differential Revision: D37524309
fbshipit-source-id: e4f67a1e32b6ad4efedf84f570cb50cffad4fb3d
Summary:
This is a pretty in depth third party library being added. The main changes are...
**version bumping**:
dunce = "1.0.0" => "1.0.2"
once_cell = "1.8" => "1.12"
tracing = "0.1.32" => "0.1.35"
adding ethers-rs fork:
https://github.com/rlkelly/ethers-rs.git
this depends on forks of:
coins-bip32 = https://github.com/rlkelly/bitcoins-rs.git
coins-bip39 = https://github.com/rlkelly/bitcoins-rs.git
eth-keystore = https://github.com/rlkelly/eth-keystore-rs.git
this was necessary to remove the wasm target, which creates a cyclic dependency for "indexmap". This was ran into previously here:
https://fb.workplace.com/groups/rust.language/permalink/8603206789727860/
also, some fixups were created for a few packages to facilitate build. I'm not a fan of libraries creating a build step to generate documentation...
----
This still does not have the ethers-middleware crate or the ethers-solc crate because it has the external build dependency of solc, which would make this a bit more complex to add:
https://docs.soliditylang.org/en/latest/installing-solidity.html
adding the crates without solc makes the process of integrating this library much easier, but it would be beneficial in the future.
@public
update rust deps
Reviewed By: jsgf
Differential Revision: D37320246
fbshipit-source-id: 251bd1c3c0e51733347a534fa597dea33d1df74b
Summary: This is to enable development on my Alder Lake Fedora laptop.
Reviewed By: jasonwhite
Differential Revision: D37300482
fbshipit-source-id: cf881caa854ca4f8ab84b23454faa5dba0445e8a
Summary:
Right now we get a whole bunch of annoying messages from tokio that spam our test logs:
2022-06-10T15:09:59.751928Z TRACE runtime.spawn{kind=block_on task.name= loc.file="hermetic_infra/reverie/reverie-ptrace/src/testing.rs" loc.line=58 loc.col=8}:runtime.spawn{kind=local task.name= loc.file="third-party/rust/vendor/tokio-1.15.0/src/task/local.rs" loc.line=302 loc.col=22}: tokio::task::waker: op="waker.drop" task.id=26
This diff makes the filter more restrictive for reverie tests.
Reviewed By: johnhurt
Differential Revision: D37071398
fbshipit-source-id: fe93ec3cc0cf61938be10d40df6fe2f46979fbf9
Summary: The OSS license linter doesn't like the word "its".
Reviewed By: johnhurt
Differential Revision: D36856385
fbshipit-source-id: 909037d96de8976f08004497d28b77838f8c6870
Summary:
Changelog:
* Removed `build.rs` and switched to Rust's inline assembly syntax. This should enable better codegen, including the ability to have syscalls get inlined.
* **Breaking**: Architectures besides `arm`, `x86`, and `x86-64` now require nightly.
* **Breaking**: Removed top-level `SYS_` constants. Just use the `Sysno` enum instead.
Reviewed By: johnhurt
Differential Revision: D36606892
fbshipit-source-id: 9d20addfec65fa712b25d9449ec6e414187565ca
Summary:
See https://github.com/jasonwhite/syscalls/blob/master/CHANGELOG.md
The biggest change here is that the type of syscall registers and return values was changed from `u64` to `usize` (to support 32-bit architectures).
Reviewed By: zertosh
Differential Revision: D36157822
fbshipit-source-id: d8776b6809dd00df93b147ee34deb37df61a2675
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