Commit Graph

2591 Commits

Author SHA1 Message Date
hyd-dev 34603e586f Add whitespace 2021-06-14 23:38:15 +08:00
hyd-dev d1e72d0854 Check argument count for CreateThread 2021-06-14 23:01:06 +08:00
hyd-dev 89c722ac32 Add some comments about check_shim 2021-06-14 22:53:17 +08:00
hyd-dev 49a8f002a0 let-bind exp_abi of "exit" | "ExitProcess" 2021-06-11 15:53:58 +08:00
hyd-dev e46aab5816 Use check_shim() for abort 2021-06-11 15:47:12 +08:00
hyd-dev c822ec59aa Implement cache for not found symbols 2021-06-11 15:24:51 +08:00
hyd-dev ce7040075a Disallow #[no_mangle]/#[export_name = ...] functions that have the same symbol name as built-in shims 2021-06-11 15:18:47 +08:00
bors e5c3af6f51 Auto merge of #1818 - landaire:feature/panic-on-unsupported-syscalls, r=RalfJung
Add support for panicking in the emulated application when unsupported functionality is encountered

This PR fixes #1807 and allows an optional flag to be specified to panic when an unsupported syscall is encountered. In essence, instead of bubbling up an error in the context of the Miri application Miri will panic within the context of the *emulated* application. This feature is desired to allow CI pipelines to determine if a Miri failure is unsupported functionality or actual UB. Please read [this comment](https://github.com/rust-lang/miri/issues/1807#issuecomment-845425076) for the rationale behind this change.

Note: this change does not cover all cases where unsupported functionality errors may be raised. If you search the repo for `throw_unsup_format!` there are many cases that I think are less likely to occur and may still be problematic for some folks.

TODO:

- [x] README documentation on this new flag
- [x] Add tests
2021-06-09 18:09:06 +00:00
Ralf Jung a38f02c44c isolated operations return EPERM; tweak isolation hint 2021-06-09 18:24:59 +02:00
Smit Soni ba64f485c8 Fix parameter of io error helper function
`set_last_error_from_io_error` works with only the error kind, and
discards the payload. Fix its signature to make it explicit.
2021-06-09 06:28:35 -07:00
Smit Soni 892f706ce5 Add a support to execute isolated op without halting
In user interface, added a new flag `-Zmiri-isolation-error` which
takes one of the four values -- hide, warn, warn-nobacktrace, and
abort. This option can be used to configure Miri to either abort or
return an error code upon executing isolated op. If not aborted, Miri
prints a warning, whose verbosity can be configured using this flag.

In implementation, added a new enum `IsolatedOp` to capture all the
settings related to ops requiring communication with the
host. Old `communicate` flag in both miri configs and machine
stats is replaced with a new helper function `communicate()` which
checks `isolated_op` internally.

Added a new helper function `reject_in_isolation` which can be called
by shims to reject ops according to the reject_with settings. Use miri
specific diagnostics function `report_msg` to print backtrace in the
warning. Update it to take an enum value instead of a bool, indicating
the level of diagnostics.

Updated shims related to current dir to use the new APIs. Added a new
test for current dir ops in isolation without halting machine.
2021-06-09 05:50:52 -07:00
Lander Brandt ae237098f8 Add support for panicking in the emulated application when unsupported syscalls are encountered 2021-06-07 15:21:53 -07:00
hyd-dev 3871c493b2 in_std -> frame_in_std 2021-06-06 11:21:20 +08:00
hyd-dev 545101040d Don't unwrap() in in_std() 2021-06-06 11:12:13 +08:00
hyd-dev 879000b133 Detect std by checking if the crate defines #[lang = "start"] rather than string comparison 2021-06-06 11:12:05 +08:00
bors 28717a0e90 Auto merge of #1776 - hyd-dev:1170, r=RalfJung
Implement calls to exported symbols (#1170)

Closes #1170.
2021-06-03 15:59:56 +00:00
Ralf Jung 57e4f1d285 fix typo 2021-06-03 17:47:34 +02:00
hyd-dev 647ee17b40 original_crate_name -> crate_name 2021-06-03 10:22:31 +08:00
Aaron Hill 73700bc01c Rustup for const_err changes 2021-05-31 10:50:25 -05:00
hyd-dev e026ad584d Use unwrap_or_else() 2021-05-31 11:57:15 +08:00
hyd-dev b054a19f94 We don't need to check SymbolExportLevel 2021-05-31 11:57:14 +08:00
hyd-dev 382295cd47 Move check_abi() into EvalContextExt 2021-05-31 11:15:31 +08:00
hyd-dev 41f33a64f8 Implement calls to exported symbols 2021-05-31 11:15:29 +08:00
hyd-dev 71f4140550 Add -Zmiri-disable-abi-check 2021-05-31 11:14:23 +08:00
Ralf Jung c89a5d62ee add comment to debug impl 2021-05-30 17:13:49 +02:00
Aaron Hill 0317e5bfd6 Address more review comments 2021-05-30 10:04:57 -05:00
Aaron Hill 20f1b2a969 Run fmt 2021-05-29 17:16:12 -05:00
Aaron Hill 16f469280e Address review comments 2021-05-29 17:10:54 -05:00
Aaron Hill 2166eaed90 Use active thread id 2021-05-29 17:01:54 -05:00
Aaron Hill 7e9da8d30e Add measureme integration for profiling the interpreted program
This PR uses the `measureme` crate to profile the call stack of the
program being interpreted by Miri. This is accomplished by starting a
measureme 'event' when we enter a function call, and ending the event
when we exit the call. The `measureme` tooling can be used to produce a
call stack from the generated profile data.

Limitations:
* We currently record every single entry/exit. This might generate very
  large profile outputs for programs with a large number of function
  calls. In follow-up work, we might want to explore sampling (e.g. only
  recording every N function calls).
* This does not integrate very well with Miri's concurrency support.
  Each event we record starts when we push a frame, and ends when we pop
  a frame. As a result, switching between virtual threads will cause
  events from different threads to be interleaved. Additionally, the
  recorded for a particular frame will include all of the work Miri does
  before that frame completes, including executing another thread.

The `measureme` integration is off by default, and must be enabled via
`-Zmiri-measureme=<output_name>`
2021-05-29 17:01:52 -05:00
hyd-dev 9b2d42587f unwind is no longer Option<BasicBlock> 2021-05-28 22:08:51 +08:00
Ralf Jung c60efa0c69 allocate backtrace strings mutably 2021-05-23 18:04:13 +02:00
Ralf Jung 9e0e9386a6 better approach to skip ZST reborrows 2021-05-23 18:04:13 +02:00
Ralf Jung e09c571eec avoid some borrow_mut calls in data_race 2021-05-23 18:04:13 +02:00
Ralf Jung 543777acbd avoid unnecessary RefCell calls in Stacked Borrows 2021-05-23 18:04:13 +02:00
Ralf Jung d77d95d0a8 rustup 2021-05-23 12:39:27 +02:00
Ralf Jung c73f8b1097 fmt 2021-05-22 14:55:33 +02:00
Ralf Jung 1bbd6e609c get rid of Rc in data_race 2021-05-22 14:47:14 +02:00
Ralf Jung ca7283d746 get rid of Rc in Stacked Borrows 2021-05-22 13:24:08 +02:00
Ralf Jung c151af5cf5 rustup 2021-05-20 13:32:18 +02:00
Ralf Jung aba96b82b4 fix write_os_str_to_wide_str 2021-05-19 16:34:14 +02:00
Ralf Jung e4a27150cb fmt 2021-05-19 16:10:28 +02:00
Ralf Jung 801a1744cd update for Memory API changes 2021-05-19 15:27:58 +02:00
Ralf Jung 1bfd9ac56c rustup 2021-05-18 00:11:05 +02:00
Ralf Jung 4f171d7fe3 stop relying on c_str/wide_str helpers in rustc 2021-05-17 14:31:59 +02:00
Ralf Jung 78f74c69e3 fix rustfmt fallout 2021-05-17 10:57:21 +02:00
Ralf Jung cf3376e541 rustup 2021-05-17 09:34:39 +02:00
Ralf Jung d6fdfaa047 hand-held formatting for remaining files 2021-05-16 11:51:39 +02:00
Ralf Jung 4e231bab5e format much of Miri 2021-05-16 11:48:28 +02:00
Andy Wang 0d2278c6c6 Prefer remapped filename in backtrace to match rustc behaviour 2021-05-12 15:49:33 +01:00