Commit graph

113 commits

Author SHA1 Message Date
David Tolnay
e1a36ac27f Update tracing-subscriber from 0.3.16 to 0.3.17
Reviewed By: zertosh

Differential Revision: D45286804

fbshipit-source-id: bb49b1b850f150a865577411de6bb5a0d91b7a20
2023-04-25 15:59:50 -07:00
Sergey Anpilov
547ac07600 Update procfs version 0.9 to 0.10.1
Reviewed By: Imxset21

Differential Revision: D45231077

fbshipit-source-id: 9ff577c5a13e685793056bd782ac0be19f61f74b
2023-04-25 12:27:38 -07:00
Thomas Orozco
999c1698cf (reland) rust/third-party: update to futures 0.3.28
Summary:
Note: this is a re-land of D44623815, which was was reverted because of a land race with D44626072

In particular this fixes `FlattenUnordered` having a nasty deadlock, but also
some other  bugs:

```
# 0.3.28 - 2023-03-30

* Update to syn 2. This raises MSRV of utility crates to 1.56. (#2730, #2733)
* Fix bug in `FlattenUnordered` (#2726, #2728)

# 0.3.27 - 2023-03-11

* Add `TryFlattenUnordered` (#2577, #2590, #2606, #2607)
* Add `AbortHandle::is_aborted` (#2710)
* Add `AbortRegistration::handle` (#2712)
* Make `BiLock` strict-provenance compatible (#2716)

# 0.3.26 - 2023-01-30

* Add `Either::as_pin_mut` and `Either::as_pin_ref` (#2691)
* Add `Shared::ptr_eq` and `Shared::ptr_hash` (#2691)
* Implement `FusedStream` for `Buffered` (#2676)
* Implement `FusedStream` for all streams in `ReadyChunks` (#2693)
* Fix bug in `FuturesOrdered::push_front` (#2664)
* Remove `Fut::Output: Clone` bounds from some `Shared` methods (#2662)
* Remove `T: Debug` bounds from `Debug` implementations of `mpsc` and `oneshot` types (#2666, #2667)

# 0.3.25 - 2022-10-20

* Fix soundness issue in `join!` and `try_join!` macros (#2649)
* Implement `Clone` for `sink::Drain` (#2650)

# 0.3.24 - 2022-08-29

* Fix incorrect termination of `select_with_strategy` streams (#2635)

# 0.3.23 - 2022-08-14

* Work around MSRV increase due to a cargo bug.
```

Reviewed By: zertosh

Differential Revision: D44632588

fbshipit-source-id: bdd87cb02b3aef63a65b1f9b852579225adfedbd
2023-04-04 10:14:43 -07:00
Mark Isaacson
b2db0b2202 Revert D44623815: rust/third-party: update to futures 0.3.28
Differential Revision:
D44623815

Original commit changeset: 343ddb9277e1

Original Phabricator Diff: D44623815

fbshipit-source-id: 2d99e8d24fd9b13343dfeb082788b0a6258fbe8c
2023-04-03 09:25:13 -07:00
Thomas Orozco
ec3b8f6cc1 rust/third-party: update to futures 0.3.28
Summary:
In particular this fixes `FlattenUnordered` having a nasty deadlock, but also
some other  bugs:

```
# 0.3.28 - 2023-03-30

* Update to syn 2. This raises MSRV of utility crates to 1.56. (#2730, #2733)
* Fix bug in `FlattenUnordered` (#2726, #2728)

# 0.3.27 - 2023-03-11

* Add `TryFlattenUnordered` (#2577, #2590, #2606, #2607)
* Add `AbortHandle::is_aborted` (#2710)
* Add `AbortRegistration::handle` (#2712)
* Make `BiLock` strict-provenance compatible (#2716)

# 0.3.26 - 2023-01-30

* Add `Either::as_pin_mut` and `Either::as_pin_ref` (#2691)
* Add `Shared::ptr_eq` and `Shared::ptr_hash` (#2691)
* Implement `FusedStream` for `Buffered` (#2676)
* Implement `FusedStream` for all streams in `ReadyChunks` (#2693)
* Fix bug in `FuturesOrdered::push_front` (#2664)
* Remove `Fut::Output: Clone` bounds from some `Shared` methods (#2662)
* Remove `T: Debug` bounds from `Debug` implementations of `mpsc` and `oneshot` types (#2666, #2667)

# 0.3.25 - 2022-10-20

* Fix soundness issue in `join!` and `try_join!` macros (#2649)
* Implement `Clone` for `sink::Drain` (#2650)

# 0.3.24 - 2022-08-29

* Fix incorrect termination of `select_with_strategy` streams (#2635)

# 0.3.23 - 2022-08-14

* Work around MSRV increase due to a cargo bug.
```

Reviewed By: zertosh

Differential Revision: D44623815

fbshipit-source-id: 343ddb9277e1703104e516d07fe0610b5020930a
2023-04-03 08:30:49 -07:00
Jason White
f1d651f422 Fix broken test perf::trace_other_thread
Summary:
Rust recently changed the default channel implementation, so maybe that's what triggered this failure.

This is a pretty brittle test. :/

Reviewed By: VladimirMakaev

Differential Revision: D44389514

fbshipit-source-id: 65ecc07edcab1aef99eb31dea2343d6ff4a92aa2
2023-03-25 16:12:24 -07:00
Jason White
531faf7a34 Prepare safeptrace to be published as a crate
Summary:
* Adds a `README.md` file.
 * Adds optional features to enable memory access and the async API.

`safeptrace` depends on `reverie-process` and `reverie-memory`, so those will need to be published as crates too.

Reviewed By: VladimirMakaev

Differential Revision: D44386559

fbshipit-source-id: e74c55d5d26239aa09aedac130dca880eb5f1206
2023-03-25 16:12:24 -07:00
Thomas Orozco
e7cdd0db8d third-party/rust: vendor a fork of perf-event
Summary:
For https://github.com/jimblandy/perf-event/pull/29 which sets CLOEXEC by
default.

Reviewed By: edward-shen

Differential Revision:
D43983384

Privacy Context Container: L1123788

fbshipit-source-id: 478c0e11bd815e916094b48ce7763b4dfc3e5f79
2023-03-15 10:34:47 -07:00
Arun Thulasi
d51b9e8a1c Update libc-0.2.137 to libc-0.2.139
Reviewed By: zertosh

Differential Revision: D43203556

fbshipit-source-id: 460f339f603fec97f367967a20a4c6e7a81ad027
2023-02-12 16:30:00 -08:00
Andres Suarez
4dd84a499d Update tokio-1.21.2 to tokio-1.25.0
Reviewed By: diliop

Differential Revision: D42837228

fbshipit-source-id: 5e891cf1ff8ab1beff6e3c845b913144655778ea
2023-01-30 14:49:36 -08:00
Jason White
9515dfe3c2 Only compile for Linux
Summary:
Everything in Reverie is super Linux-specific, so we should just skip compilation if we're not targetting Linux.

This is helpful for consumers of the library when it gets published to crates.io. With this, they don't need to have a special case for this in the `[dependencies]` section of `Cargo.toml`.

Reviewed By: VladimirMakaev

Differential Revision: D41824410

fbshipit-source-id: be1e0a887e35ed151cfad27af8107246df30c2e5
2022-12-07 18:05:11 -08:00
Jason White
bcce15d17d safeptrace: Remove unnecessary copying of registers
Summary: Might lead to a minor speed up, but probably not due to the magic of compiler optimizations. I noticed this a while back and meant to fix it before publishing the `safeptrace` crate (so this won't be a breaking change later).

Reviewed By: VladimirMakaev

Differential Revision: D41699769

fbshipit-source-id: ef3e5f24468ddb4b69b8628e28b1da8cfdcbce7b
2022-12-07 07:38:13 -08:00
Jason White
487f7b6d8b Add Guest::has_cpuid_interception
Summary: This is useful for knowing if we're able to intercept CPUID or not.

Reviewed By: rrnewton

Differential Revision: D41599743

fbshipit-source-id: 56b1ca16f028ad070ecdf4e8489b6e318e386e65
2022-11-30 11:14:39 -08:00
Jason White
0037ec860d Remove usage of 'never_type' nightly feature
Summary: It doesn't look like the never type is going to be stabilized anytime soon, so lets just use the `never-say-never` crate instead.

Reviewed By: dtolnay

Differential Revision: D41459064

fbshipit-source-id: 6bc82377242b31171251b2393a534f76c7f3d97a
2022-11-29 12:40:44 -08:00
Jason White
42a87f915e Add retries to early syscall injection
Summary: Our early injected syscalls could get interrupted by a signal (like `SIGWINCH`), so we should always be sure to retry them.

Reviewed By: rrnewton

Differential Revision: D41568242

fbshipit-source-id: e3026bd162619795e776198b7bf05d3e33753c05
2022-11-29 08:26:39 -08:00
Jason White
ab518fb892 Handle CPUID faulting failures gracefully
Summary: We inject a call to `arch_prctl(ARCH_SET_CPUID, 0)` to enable faulting on CPUID. This isn't supported on virtual machines, so we should gracefully handle any errors.

Reviewed By: rrnewton

Differential Revision: D41567919

fbshipit-source-id: 9623f2852d9b2e8cad0de447214c798c5b9dcb0b
2022-11-29 04:04:22 -08:00
Jason White
5478e47a25 Fix VDSO patching of small entries
Summary:
On Ubuntu 22.04, this is the disassembly of `gettimeofday` and `clock_gettime`:
```
0000000000000bd0 <__vdso_gettimeofday@LINUX_2.6>:
 bd0:   e9 4b fe ff ff          jmp    a20 <LINUX_2.6@LINUX_2.6+0xa20>
 bd5:   66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
 bdc:   00 00 00 00

0000000000000c10 <__vdso_clock_gettime@LINUX_2.6>:
 c10:   e9 9b fb ff ff          jmp    7b0 <LINUX_2.6@LINUX_2.6+0x7b0>
 c15:   66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
 c1c:   00 00 00 00
```

These implementations just `jmp` to another internal function. The dynamic symbol table reports that these functions are 5 bytes in size, but we can see that they are aligned up to 16 bytes and they are still safe to patch. Thus, our patcher should take this padding and alignment into account.

Fixes https://github.com/facebookexperimental/hermit/issues/16.

Differential Revision: D41565913

fbshipit-source-id: 164aca876abf92642e7ebf4ce96d0860b276647b
2022-11-28 16:28:02 -08:00
Jason White
c448d10586 Reduce size of getcpu vdso
Summary: The `getcpu` VDSO was just returning 0 unconditionally. This was an old hack to determinize the getcpu syscall, but we don't need this anymore because we just intercept it and determinize it instead. Reducing the size of this vdso function will make it more compatible with various VDSO implementations.

Reviewed By: wkhughes

Differential Revision: D41506684

fbshipit-source-id: 3dacad93971ecc7969d725f8b7e984a189a0ebb4
2022-11-23 13:55:56 -08:00
Jason White
debce82715 Remove unnecessary padding on vdso replacements
Summary: If the VDSO replacements are too large, they will overwrite too much memory if the real VDSO functions are smaller than the replacement. This fixes https://github.com/facebookexperimental/hermit/issues/16.

Reviewed By: wkhughes

Differential Revision: D41506686

fbshipit-source-id: 7c33e68ae9cccb440b820245e4d37184e156d03b
2022-11-23 13:55:56 -08:00
Jason White
58bc1cce8b Remove unused bench_black_box unstable feature
Summary: Removes usage of the `bench_black_box` unstable feature. This brings us one step closer to removing all usage of unstable nightly features, which will allow publishing a crate on https://crates.io.

Reviewed By: rrnewton

Differential Revision: D41387686

fbshipit-source-id: 98bfcf053cd320137dbf62f4ef24beb835e1f0df
2022-11-18 12:36:51 -08:00
Jason White
0f5f62c1dd Remove need for map_first_last unstable feature
Summary: Removes usage of the `map_first_last` unstable feature. This brings us one step closer to removing all usage of unstable nightly features, which will allow publishing a crate on https://crates.io.

Reviewed By: rrnewton

Differential Revision: D41387687

fbshipit-source-id: 05184220a6d6cd5ec03339845741b46e9557ca83
2022-11-18 12:36:51 -08:00
Jason White
ee616643a4 Remove need for async_closure unstable feature
Summary: Removes usage of the `async_closure` unstable feature. This brings us one step closer to removing all usage of unstable nightly features, which will allow publishing a crate on https://crates.io.

Reviewed By: rrnewton

Differential Revision: D41387688

fbshipit-source-id: 136c5c8d19876e732d18dca195e87e3bc2ab7661
2022-11-18 12:36:51 -08:00
generatedunixname89002005287564
c462336e3d Daily common/rust/cargo_from_buck/bin/autocargo
Reviewed By: krallin

Differential Revision: D41368646

fbshipit-source-id: 5f15114f141028c7dcd38c96cd853f29dfe91696
2022-11-17 00:26:13 -08:00
Vladimir Makaev
4820afb142 implement set_timer_precise(rbc, instr)
Summary: We want to allow precise timers with an instruction offset. While single stepping we have target and current value of the counter and once we match branches we only increment instructions

Reviewed By: jasonwhite

Differential Revision: D41269879

fbshipit-source-id: 46b3307249663de10607513dc59d8436ca907f78
2022-11-16 14:01:41 -08:00
Jason White
69367b5408 Partially fix symbol resolution
Summary: `libunwind` isn't able to resolve symbols from the symbol table. There seems to be a regression preventing this from working. This partially fixes symbol lookup for stack frames by using the `object` crate for looking up symbols in the symbol table. This is a partial fix because symbol lookup does not seem to work yet for executables (only shared libraries).

Reviewed By: VladimirMakaev

Differential Revision: D41290099

fbshipit-source-id: 5d4ad1173f6ab1ca6c2995369c2dedb4a9f30e86
2022-11-15 09:58:51 -08:00
Vladimir Makaev
0a023a3945 oss release: update hermit licence to BSD
Summary:
We're open sourcing Hermit under BSD licence. This diff updates the linter configuration and a linter code was executed under /hermetic_infra directory

```
arc lint --apply-patches --take LICENSELINT --paths-cmd 'hg files .'
```

Reviewed By: rrnewton

Differential Revision: D41120862

fbshipit-source-id: 099ddff7d35e928178bebd50a1d1d4a44b4d792d
2022-11-08 06:45:54 -08:00
Vladimir Makaev
0c8136b22e decode & trace instructions while single-stepping
Summary:
This adds an ability to decode an instruction on top of the safeptrace::Stopped task and enables debug! tracing when single-stepping.

Note that performance overhead should not be present when higher tracing level  is requested

Reviewed By: jasonwhite

Differential Revision: D40895393

fbshipit-source-id: 867f237a0517304314f4ac43313c1f26cee3f646
2022-11-08 04:39:12 -08:00
Vladimir Makaev
c93d2024e7 add common code to display libc::user_regs_struct
Summary: this adds more compact and reusable way to display libc::user_regs_struct

Reviewed By: jasonwhite

Differential Revision: D40895319

fbshipit-source-id: fde83d834cc4179bfc6a6aa8d77a4de5f6598e1b
2022-11-08 04:39:12 -08:00
Jason White
0a4791711c Remove old and unused llvm_asm!() assembly blocks
Summary:
This was from the *before times* when `core::arch::asm` wasn't yet stable. `llvm_asm!()` has been removed from recent versions of rustc, so this stuff won't even compile anymore.

Note that this also removes a rather large block of `llvm_asm` (`check_for_xen_pmi_bug`) that hasn't yet been migrated over to the new asm syntax. This seems like a lot of work for little benefit, so I'm just deleting it for now.

Differential Revision: D40957341

fbshipit-source-id: 2b9bf97e93eaa9462295b9060907530dd797e288
2022-11-03 12:53:11 -07:00
Jason White
71551a592c Remove unnecessary allocations in vdso patching
Reviewed By: VladimirMakaev

Differential Revision: D40872276

fbshipit-source-id: cd4b25b437ad2f4bb7929f33477af866da80dc3c
2022-11-01 10:11:35 -07:00
Jason White
90e39abc59 Fix skip_seccomp_syscall
Summary: Fixes `skip_seccomp_syscall` on aarch64 to *actually* skip the syscall. I plan on cleaning this up a bit more in a later diff because we are calling `getregs` and `setregs` more than necessary on a per-interception basis.

Reviewed By: VladimirMakaev

Differential Revision: D40867423

fbshipit-source-id: d72b4998b5c1c44f426a9129eccb205ccfc320fa
2022-11-01 10:11:35 -07:00
Jason White
76adc9174f Fix initial syscall injection
Summary: This fixes the initial syscall injection on aarch64. This also does slight simplification of the instructions that get plopped down at the current instruction pointer so that we can fit the instructions into a single word. That is, instead of injecting `INT3; SYSCALL; INT3`, we inject `SYSCALL; INT3`.

Reviewed By: VladimirMakaev

Differential Revision: D40867427

fbshipit-source-id: 2afa96f2270e16284523a17b09da00529893c20e
2022-11-01 10:11:35 -07:00
Jason White
10b3d0df9f Disable some perf tests on aarch64
Summary: See comment for an explanation of why this is needed. These tests should eventually be updated to work on aarch64.

Reviewed By: VladimirMakaev

Differential Revision: D40867431

fbshipit-source-id: 089e8bd61bec21556bdebc8b1f89dd4d18aa0910
2022-11-01 10:11:35 -07:00
Jason White
aef4d4d2e6 Fix do_branches
Summary: Change the `sub` instruction to `subs` as the latter is needed to update the condition code that `be.n` relies on.

Reviewed By: VladimirMakaev

Differential Revision: D40867430

fbshipit-source-id: b45987b5ccd4af784988f14fe0d6b3ac97b5ad80
2022-11-01 10:11:35 -07:00
Jason White
f467cfa03c Add vdso patches for aarch64
Summary: This adds VDSO stubs for aarch64 so that we can intercept VDSO calls. See the comments in the code for more details.

Reviewed By: VladimirMakaev

Differential Revision: D40867428

fbshipit-source-id: 136818d9dbf52f4297dd4dae041e3e6dfe0764ae
2022-11-01 10:11:35 -07:00
David Tolnay
a3ed18f93a Update libc to 0.2.137
Summary: Update from 0.2.135 to 0.2.137, the latest version on crates.io, in preparation for backporting a PR in the diff after this one.

Reviewed By: zertosh

Differential Revision: D40874274

fbshipit-source-id: debf9dae82ecc20201470e634f10904a2b308e51
2022-11-01 02:16:19 -07:00
Jason White
21f7f9a8a6 Fix rustc warnings
Reviewed By: VladimirMakaev

Differential Revision: D40701835

fbshipit-source-id: d74560c4c6b360f89ff6b8d37bc33890bf633947
2022-10-27 10:56:09 -07:00
Jason White
a16d576831 Fix perf timer related things on aarch64
Summary: To do proper feature detection on the CPU to know if we can get perf events, there is more work to do here. See the comment on `get_rcb_perf_config` for more info.

Reviewed By: VladimirMakaev

Differential Revision: D40701837

fbshipit-source-id: 4c7a7c00be0ab14e4fe9f4be09c8094567d5d031
2022-10-27 10:56:09 -07:00
Jason White
caf0f12131 Add generalized stack pointer access
Reviewed By: VladimirMakaev

Differential Revision: D40701834

fbshipit-source-id: 6cad4cedc0d22488117d3d991ae9a80b643ee037
2022-10-27 10:56:09 -07:00
Jason White
4f9ce11c70 Add aarch64 registers to gdbstub
Reviewed By: VladimirMakaev

Differential Revision: D40701836

fbshipit-source-id: 42c47be166d892bc208b68938d4c41746857b38c
2022-10-27 10:56:09 -07:00
Jason White
f200e9a8cf Rename Amd64CoreRegs -> CoreRegs
Summary: This is a more architecture-independent name.

Reviewed By: VladimirMakaev

Differential Revision: D40701833

fbshipit-source-id: 66b77c6f62886ecd776a3efbc0b71248f875914e
2022-10-27 10:56:09 -07:00
Jason White
4b8517a067 Move gdbstub regs definitions to arch-specific file
Summary: These definitions are x86_64-specific, so they should be defined in their own file. Later, we'll add definitions for aarch64.

Reviewed By: VladimirMakaev

Differential Revision: D40701840

fbshipit-source-id: 0c52334dc7eb9bb60020c45c3f2ef58077c20322
2022-10-27 10:56:09 -07:00
Jason White
e5fa5f367c Clean up gdbstub regs definitions
Reviewed By: VladimirMakaev

Differential Revision: D40701832

fbshipit-source-id: 8d5c95c624ae28313cecad3522078ccde4b4d75d
2022-10-27 10:56:09 -07:00
Jason White
5949b4023f Fix more things for aarch64
Summary: fixallthethings

Reviewed By: VladimirMakaev

Differential Revision: D40577286

fbshipit-source-id: 0fb2d83843886be12c46ec199ab0303d2087597d
2022-10-27 10:56:09 -07:00
Vladimir Makaev
03cbd6044d update hermetic_infra/** files with correct license header - 1/x
Summary:
Followed guide here https://www.internalfb.com/intern/wiki/Linting/License_Lint/ to add fbcode/hermetic_infra/** code to license linter. As we have parts of our code shipped as Open Source it's important to get this automated

This diff is updating existing file's licenses to not get conflict after lint rule enablement

Reviewed By: jasonwhite

Differential Revision: D40674080

fbshipit-source-id: da6ecac036f8964619cf7912058f3a911558e7b1
2022-10-26 12:18:14 -07:00
Jason White
8862833da4 Replace direct register accesses with abstraction
Reviewed By: wangbj

Differential Revision: D40577287

fbshipit-source-id: 8fe94d172ffb0f1d7c2e177ec6314b1b77f4e5c1
2022-10-21 12:09:36 -07:00
Jason White
6ad5309bb1 Add abstraction over register access
Summary:
This abstracts the set of general purpose registers so that we can more easily access special registers in an architecture-independent way.

The rest of the code will be refactored to use this new interface in a later change.

Reviewed By: wangbj

Differential Revision: D40577289

fbshipit-source-id: 313a3ab3863f09a506b6e61fb67093fc49eeae3e
2022-10-21 12:09:36 -07:00
David Tolnay
eb92a00594 Update to async-trait 0.1.58
Summary: This release makes async trait methods work better with rust-analyzer's "go to definition" and other IDE functionality.

Reviewed By: zertosh

Differential Revision: D40532047

fbshipit-source-id: 1871d1819ebe1aab0846b0135f051c45e6e8821b
2022-10-19 17:35:20 -07:00
Ryan Newton
4b910a9e2b bump the SKID_MARGIN from 50 to 60
Summary:
On devvm5443.atn0.facebook.com (Intel Xeon Processor (Skylake)), I observed a slippage a bit past the skid of 50:

    ✉ Timeout: hermetic_infra/hermit/tests:hermit_run_strict__sh_par_work - main (300.011)
    Test output:
    > from_execution_error::timeout::LocalExecutor::Timeout
    :: Run1...
    thread 'main' panicked at 'Clock perf counter exceeds target value at start of attempted single-step: 23417931 > 23417927. Consider increasing SKID_MARGIN_RCBS.', hermetic_infra/reverie/reverie-ptrace/src/timer.rs:562:9

Therefore I'm bumping it to 60.

This is unfortunate, because it directly slows down our chaos mode preemptions (until we eventually get an emulator), but I'm therefore bumping the skid margin.
We could also potentially set it differently for devvm and for bare metal.

Reviewed By: jasonwhite

Differential Revision: D40383171

fbshipit-source-id: 34bb8217a61fc2c77f1d45d23b8c28f91cae5efc
2022-10-18 12:27:28 -07:00
Andrey Buchinskiy
a24e92eea4 bump tokio version to 1.21.2
Reviewed By: zertosh

Differential Revision: D40199323

fbshipit-source-id: 32355e73ea669a180ac759ddb02760db10c8b02b
2022-10-14 15:24:20 -07:00