Commit Graph

1992 Commits

Author SHA1 Message Date
Oliver Scherer
90a8f2f6a3 Make the non-halting diagnostic scheme independent of InterpError 2020-01-08 13:02:55 +01:00
Oliver Scherer
c0a7fd5602 Remove debugging hint until we can actuall use note: 2020-01-08 12:50:15 +01:00
Oliver Scherer
aec175e0de Process delayed errors on every step 2020-01-08 12:49:46 +01:00
Oliver Scherer
bb58e42da2 Tell the user about stacked borrow debugging flags 2020-01-08 12:37:25 +01:00
Oliver Scherer
96d6efdf32 Emit errors without halting interpretation 2020-01-08 12:37:25 +01:00
Oliver Scherer
4411903cca Add a scheme for registering and obtaining errors even without access to an InterpCx 2020-01-08 12:37:25 +01:00
Oliver Scherer
4de031b3da Move error reporting to its own module 2020-01-08 12:37:25 +01:00
Oliver Scherer
2673ba99fd Trailing return 2020-01-08 12:37:25 +01:00
Oliver Scherer
b9f6b9721a Split error reporting from main eval function 2020-01-08 12:37:25 +01:00
Christian Poveda
91cf68fac5
Add lstat shim for macos 2020-01-07 12:26:23 -05:00
Christian Poveda
4a1dbc77dc
Add shim for symbolic link creation 2020-01-06 16:30:17 -05:00
Yuki Okushi
86ee705cd5 Rustup 2020-01-07 05:13:18 +09:00
Yuki Okushi
3607dafd9b More rustup 2020-01-05 21:24:28 -08:00
Yuki Okushi
ebacb8ae4e Rustup 2020-01-05 15:55:15 -08:00
Adam Perry
0a3f460d69 Update panic machinery to match #[track_caller] changes.
This gets miri's tests passing again with https://github.com/rust-lang/rust/pull/67137.
2020-01-04 16:28:32 -08:00
bors
39146c44bd Auto merge of #1130 - christianpoveda:ignore-close-read-only, r=RalfJung
Ignore close errors in read-only files.

this fixes https://github.com/rust-lang/miri/issues/999

r? @RalfJung
2019-12-31 11:00:08 +00:00
Christian Poveda
a40a99d849
avoid double negation 2019-12-30 17:26:17 -05:00
bors
9f79aa9bb4 Auto merge of #1131 - JOE1994:alloc_os_str_as_c_str, r=RalfJung
Add helper 'alloc_os_str_as_c_str' and use it in env_var emulation

First part of the plan laid out in #707 (comment).

Re-submitting a pull-request for work from  #1098 (manual rebasing..)

r? @RalfJung
2019-12-30 19:15:53 +00:00
Christian Poveda
ce4e1f9fe7
add comments 2019-12-29 22:51:48 -05:00
Christian Poveda
b7e6135d7b
Use Scalar::to_u16 2019-12-28 08:38:31 -05:00
JOE1994
a4bd68a45f Add helper 'alloc_os_str_as_c_str' and use it in env_var emulation 2019-12-27 20:32:20 -05:00
Christian Poveda
f00fd3990b
avoid excluding TERM env var 2019-12-27 08:37:52 -05:00
Christian Poveda
dc4b8ac2e6
close file silently if the file is read only 2019-12-27 08:34:35 -05:00
Oliver Scherer
4aef81eb85 Remove to_ptr uses 2019-12-27 14:26:05 +01:00
Christian Poveda
c8190e8de7
rename metadata struct 2019-12-26 19:31:59 -05:00
Christian Poveda
2151e958ce
minor fixes and updated docs 2019-12-26 12:12:27 -05:00
Christian Poveda
bbbb50a09a
set mask for statx correctly 2019-12-25 22:24:18 -05:00
Christian Poveda
1bc3629084
do padding correctly 2019-12-25 18:22:33 -05:00
Christian Poveda
d176259002
deduplicate shared code between stat and statx 2019-12-25 18:17:20 -05:00
Christian Poveda
515c119359
Add padding on 64-bits only 2019-12-25 13:10:50 -05:00
Christian Poveda
6d88a4704a
restrict stat shim to macos only 2019-12-25 12:38:35 -05:00
Christian Poveda
75f7a118e6
remove restrictions due to stat unavailability 2019-12-25 12:38:34 -05:00
Christian Poveda
dbc118919a
add padding to immediates 2019-12-25 11:08:27 -05:00
Christian Poveda
0184e10f2f
fix size for file mode 2019-12-25 08:27:50 -05:00
Christian Poveda
b2c4ff2aee
add remanining fields to stat stuct 2019-12-25 08:27:50 -05:00
Christian Poveda
6177e6df7e
provide correct name for shim 2019-12-25 08:27:50 -05:00
Christian Poveda
d9ecd77ada
add dummy stat shim 2019-12-25 08:27:49 -05:00
Ralf Jung
cd12f47af6 make bytes conversion functions private inside read/write functions 2019-12-24 11:46:02 +01:00
Ralf Jung
2db6a3c04d use new try_from methods 2019-12-24 11:43:42 +01:00
Oliver Scherer
bac261573f Rustup to rustc 1.42.0-nightly (005cf38f7 2019-12-22) 2019-12-23 23:02:36 +01:00
bors
02bba3f531 Auto merge of #1124 - RalfJung:sysroot-check, r=oli-obk
disable sysroot checks for distributed binaries

This should help with https://github.com/mozilla/nixpkgs-mozilla/issues/198.
2019-12-23 17:14:48 +00:00
Ralf Jung
e325ad24f2 support main functions with Result return type 2019-12-23 17:45:23 +01:00
Oliver Scherer
7ead530841 Rustfmt all the things 2019-12-23 12:56:23 +01:00
Ralf Jung
bc715cb646 disable sysroot checks for distributed binaries 2019-12-22 18:13:13 +01:00
bors
a3ea1cb458 Auto merge of #1101 - christianpoveda:stat-shim, r=RalfJung
Add statx shim for linux target

This is an attempt to fix: https://github.com/rust-lang/miri/issues/999 (for linux only)

Currently there is one problem that I haven't been able to solve. `std::fs::metadata` fails because the creation time is not available even though it is provided in the shim code.

In order to inform the caller that the field was provided, the `stx_flag` field must have the bits of `STATX_BTIME` set (which they are). The creation time is in the `stx_btime` field of the `statx` struct (see [1]). The relevant code in `libstd` is here (probably?): https://github.com/rust-lang/rust/blob/master/src/libstd/sys/unix/fs.rs#L322

Another important point is that we are just providing the fields that are available in "all" platforms (this is, without using any platform specific traits or so). This can be improved later.

References:
[1] Man page: http://man7.org/linux/man-pages/man2/statx.2.html
[2] libc `statx` struct: https://docs.rs/libc/0.2.63/libc/struct.statx.html

Edit: The problem is that my filesystem is not providing it and I thought all filesystems could provide it. I changed the code so it only provides those dates if they are available. now we are ready to go.

r? @RalfJung @oli-obk
2019-12-22 17:01:53 +00:00
Christian Poveda
b0c7625dd1
add statx shim for linux 2019-12-22 11:46:02 -05:00
Oliver Scherer
817f4159a2 Use the machine stop error instead of abusing other error kinds 2019-12-09 14:29:28 +01:00
Oliver Scherer
eab2538317 Rename track-id to track-pointer-tag 2019-12-08 12:20:51 +01:00
Oliver Scherer
67417945d4 Detect all variants of stack removals 2019-12-08 12:20:51 +01:00
Oliver Scherer
d363a47fcb Add a scheme to find the place where an id was destroyed 2019-12-08 12:20:51 +01:00
Ralf Jung
67151a712d rustup 2019-12-08 10:32:50 +01:00
Ralf Jung
0a63637e66 fix all-targets build 2019-12-07 19:04:05 +01:00
Ralf Jung
e92d16d9cd add flag to ignore memory leaks 2019-12-07 13:44:48 +01:00
Ralf Jung
edac086f1c rustup for find_fn rename 2019-12-04 23:31:39 +01:00
Ralf Jung
94732aaf7b rename helper methods a bit 2019-12-04 10:43:36 +01:00
Ralf Jung
01f060b6da avoid allocation in read_os_string_from_c_string 2019-12-04 10:16:08 +01:00
Ralf Jung
808ac8f4b9 use write_os_str_to_c_string for unix arg passing 2019-12-04 09:58:10 +01:00
Ralf Jung
ab000997db use throw_machine_stop macro 2019-12-03 23:31:44 +01:00
Aaron Hill
a418fe9826
Rustup for BodyCache changes 2019-12-02 20:21:03 -05:00
Ralf Jung
8e3c3eccc4 panic errors are actually still possible 2019-12-02 16:04:31 +01:00
Ralf Jung
d43e394c46 fix init_allocation_extra 2019-12-02 16:04:31 +01:00
Ralf Jung
e77258322c some error classes should be impossible 2019-12-02 16:04:31 +01:00
Ralf Jung
1b3434c67d adjust for init_allocation_extra 2019-12-02 16:04:31 +01:00
Ralf Jung
b2cddd27bd better span for functions whose frame we push 'manually' 2019-12-02 16:04:31 +01:00
Ralf Jung
b91383b068 implement proper panicking for other MIR assertions
Requires generalizing the call_function helper to arbitrary Immediate arguments
2019-12-02 16:04:31 +01:00
Ralf Jung
8a36d12d36 implement proper panicking for failed index check 2019-12-02 16:04:31 +01:00
Ralf Jung
dcdd68b936 also indicate abort via new MachineStop variant 2019-12-02 09:13:58 +01:00
Ralf Jung
f3c00a447c use new MachineStop error variant 2019-12-02 09:05:35 +01:00
Ralf Jung
a971b8a2ae fix for GlobalCtxt changes 2019-11-30 12:05:35 +01:00
Ralf Jung
4a4886c0f0 avoid injected_panic_runtime which is going away 2019-11-29 21:37:59 +01:00
Ralf Jung
e5a81c6a2d fix comment 2019-11-29 11:08:27 +01:00
Ralf Jung
fe76d33506 Add and use helper function for calling a machine function and passing it some arguments 2019-11-29 09:23:29 +01:00
Ralf Jung
a04620eb69 only run leak test on clean platforms 2019-11-27 09:13:37 +01:00
Ralf Jung
824328c6d5 adjust for goto_block refactoring 2019-11-27 08:34:15 +01:00
Ralf Jung
5339d541ef cargo-miri: also find Rust sources when being run in a locally built, linked toolchain 2019-11-23 10:33:49 +01:00
Aaron Hill
a328683c4a
Add acos, asin, and atan foreign functions
I copied the tests from the docs pages
2019-11-21 17:33:30 -05:00
Aaron Hill
2176bf6cf0
Fix nits
Co-Authored-By: Ralf Jung <post@ralfj.de>
2019-11-20 13:52:04 -05:00
Aaron Hill
3102129316
Improve return code propagation.
Don't explicitly exit if we reported an evaluation error
2019-11-20 12:43:10 -05:00
Aaron Hill
2532b86a3b
Propagate the return code from the start lang item
Fixes #1064

This ensures that we set the error code properly when a panic unwinds
past `main`.

I'm not sure what the best way to write a test for this is
2019-11-19 17:25:09 -05:00
Aaron Hill
2750f60d4f
Update panic runtime comment 2019-11-19 15:33:14 -05:00
Aaron Hill
e02dc4af4b
Re-add comment 2019-11-19 15:31:37 -05:00
Aaron Hill
8936d67e7f
Delegate to the actual panic runtime crate 2019-11-19 10:11:25 -05:00
Ralf Jung
82374ad9bd comments and slight refactoring 2019-11-19 14:51:08 +01:00
Aaron Hill
08d3fbc76b
Support unwinding after a panic
Fixes #658

This commit adds support for unwinding after a panic. It requires a
companion rustc PR to be merged, in order for the necessary hooks to
work properly.

Currently implemented:
* Selecting between unwind/abort mode based on the rustc Session
* Properly popping off stack frames, unwinding back the caller
* Running 'unwind' blocks in Mir terminators

Not yet implemented:
* 'Abort' terminators

This PR was getting fairly large, so I decided to open it for review without
implementing 'Abort' terminator support. This could either be added on
to this PR, or merged separately.
2019-11-17 08:34:25 -05:00
Ralf Jung
5345636f37 use new isize_max method in FS accesses; also check full buffers for validity 2019-11-17 09:54:09 +01:00
bors
9f1aec34e1 Auto merge of #1055 - RalfJung:panic-stub, r=RalfJung
minimal rustup for panic changes

Main patch by @Aaron1011
2019-11-17 08:21:42 +00:00
Ralf Jung
f2c0c44a09 remove some leftovers from the miri-control-attribute days 2019-11-17 09:20:50 +01:00
bors
2bdf163d69 Auto merge of #1053 - RalfJung:clean, r=RalfJung
remove no-longer-needed zero checks
2019-11-14 10:16:51 +00:00
Ralf Jung
c790317eb9 remove no-longer-needed zero checks 2019-11-14 10:30:00 +01:00
Ralf Jung
64244e9a18 do full deref-check before reborrowing 2019-11-14 10:24:02 +01:00
bors
09b0a8a813 Auto merge of #1022 - christianpoveda:fix-fd-access, r=RalfJung
Fix unchecked memory access for files

This PR takes care of two problems:

- It uses `Memory::(read|write)_bytes` to guarantee that memory accesses are checked (Fixes: https://github.com/rust-lang/miri/issues/1007)
- It removes the `(get|remove)_handle_and` methods which were a little bit cumbersome to use. In particular `remove_handle_and`, because we were using it to avoid borrowing issues before the `Evaluator::memory` field was public.

@RalfJung @oli-obk
2019-11-13 22:58:24 +00:00
Christian Poveda
4baef7120a Fix maximum isize value for target 2019-11-13 14:45:00 -05:00
Christian Poveda
edd0157069 Cap count twice 2019-11-13 11:57:20 -05:00
Steven Gu
ca983f5f80 Implments intrinsics::copysignf32 and intrinsics::copysignf64. 2019-11-13 17:41:09 +08:00
Aaron Hill
cf5b53e52f
Rustup for panic changes
This gets Miri working again, but doesn't actually implement unwinding
2019-11-12 19:52:15 -05:00
Ralf Jung
2c55a508e9 rustup 2019-11-11 21:25:57 +01:00
Christian Poveda
6e37f2f3e1 Cap count 2019-11-09 15:15:52 +01:00
Christian Poveda
10b93730d3 Fix merge conflicts 2019-11-09 10:42:45 +01:00
Ralf Jung
37b1190def rustup 2019-11-08 22:07:52 +01:00
Ralf Jung
9ca277f2e9 bump minimal xargo version so that it honors the lockfile 2019-11-08 16:36:57 +01:00
Christian Poveda
4bbaa72dc9 Use TryFrom instead 2019-11-07 20:50:16 +01:00
bors
0740a2040f Auto merge of #1037 - JOE1994:master, r=RalfJung
error code E0080 is no longer printed with MIRI error message

Thanks to help from @bjorn3, @RalfJung, and @oli-obk on issue #1035 , I fixed the miri code so that error code **E0080** is no longer printed out for MIRI evaluation errors. I tested my code in my Linux machine as below.
![image](https://user-images.githubusercontent.com/10286488/68264744-e71e6c80-0017-11ea-9028-f83e19164ea2.png)

Remaining concern is whether the variable name `new_tcx` which I used is misleading or not.

Fixes https://github.com/rust-lang/miri/issues/1035
2019-11-06 13:39:22 +00:00
YOUNGSUK KIM
e5675ab0fc follow-up to review 2019-11-06 08:25:00 -05:00
Ralf Jung
8b0c14f9f6 ptr_offset: handle negative offsets 2019-11-06 10:51:06 +01:00
Ralf Jung
4b9a7d8cff fix error message details 2019-11-06 09:24:26 +01:00
Ralf Jung
9eb4e00f6f refactor ptr_offset_inbounds: it can be reduced to check_ptr_access, after all! 2019-11-06 09:24:26 +01:00
YOUNGSUK KIM
2661295cdf error code E0080 is no longer printed with MIRI error message 2019-11-05 21:56:18 -05:00
Christian Poveda
f910ea135c Avoid using as cast 2019-11-05 16:47:24 -05:00
Christian Poveda
56c5e53553 Handle host's usize correctly 2019-11-04 09:38:21 -05:00
Christian Poveda
d0b4407b25 Fix casts for count check 2019-11-03 10:04:00 -06:00
Ralf Jung
955a26fb08 calling panic_if_uninhabited is not actually UB 2019-11-03 15:39:03 +01:00
bors
4f7171585f Auto merge of #961 - rust-lang:exact_div_reuse, r=RalfJung
Use the upstream `exact_div` implementation

introduced in https://github.com/rust-lang/rust/pull/63810
2019-11-03 09:16:55 +00:00
Ralf Jung
5a5fa15382 style 2019-11-03 10:03:30 +01:00
Oliver Scherer
7a39460e24 Use the upstream exact_div implementation 2019-11-03 09:34:48 +01:00
Ralf Jung
ddb1fc9205 store scalars where appropriate 2019-11-02 11:50:21 +01:00
Ralf Jung
1e0b398cb6 Windows cmdline: avoid accessing allocations directly 2019-11-02 11:48:28 +01:00
Ralf Jung
90634121b3 fix typo 2019-10-30 15:05:44 +01:00
Ralf Jung
15ae234a42 rustup for span in intrinsic emulation 2019-10-30 10:16:58 +01:00
Christian Poveda
06ef77bfef Check for usize to i64 overflows 2019-10-28 16:44:18 -05:00
Christian Poveda
122549fd09 Simplify read logic 2019-10-26 09:03:45 -05:00
Christian Poveda
d7967f6b05 Drop files explicitly when closing them 2019-10-26 08:54:02 -05:00
Ralf Jung
d8a3a1f09c rustup for projection interning 2019-10-26 09:33:24 +02:00
Christian Poveda
260b463bb0 Clean file handling functions 2019-10-24 09:34:48 -05:00
Ralf Jung
c87f106cac update comments and some tweaks 2019-10-24 10:27:14 +02:00
Ralf Jung
cf9340113e rustup: more flexible write_bytes avoids allocations and removes itertools dependency 2019-10-24 10:15:30 +02:00
bors
a05f2aa3ab Auto merge of #993 - christianpoveda:os_string_helper, r=RalfJung
Add OsString from/to bytes helper functions

Related issue: https://github.com/rust-lang/miri/issues/989

r? @RalfJung
2019-10-23 16:52:52 +00:00
Ralf Jung
354de02c24 rustup; fix debugging 2019-10-23 16:33:54 +02:00
Christian Poveda
de12cbcb32 Fix documentation 2019-10-23 08:58:25 -05:00
Christian Poveda
fb4cb5bf4a Make size error distinguishable from other errors 2019-10-22 16:57:07 -05:00
Christian Poveda
be415dbeda Use new write_bytes method 2019-10-22 11:44:49 -05:00
Ralf Jung
db949af8ed fix field index 2019-10-22 10:43:16 +02:00
Ralf Jung
2690f5948a rustup: fix for write_bytes and new union rules 2019-10-22 10:13:11 +02:00
Christian Poveda
72bd25de83 Fix merge conflicts 2019-10-21 08:49:49 -05:00
Ralf Jung
d9aa20fb31 add some missing trailing full stops that slipped through review 2019-10-21 13:24:56 +02:00
bors
af3923bebc Auto merge of #991 - christianpoveda:errno-place, r=RalfJung
Change the last OS error location to a place

r? @RalfJung
2019-10-21 09:15:51 +00:00
bors
f912a8b054 Auto merge of #1010 - RalfJung:xargo, r=RalfJung
when xargo is manually specified, don't try to upgrade it
2019-10-21 08:45:54 +00:00
Ralf Jung
ebdb6d4df7 when xargo is manually specified, don't try to upgrade it 2019-10-21 10:25:47 +02:00
Christian Poveda
283a130dda Add docs for the new helper functions 2019-10-20 17:40:21 -05:00
Christian Poveda
9d50c5e758 Small corrections to docs 2019-10-20 07:55:26 -05:00
Christian Poveda
8a8fa53a5d Transform the last error place to an immediate instead 2019-10-20 07:55:26 -05:00
Christian Poveda
619ccf3834 Rename set_last_error_from_io_result 2019-10-20 07:55:25 -05:00
Christian Poveda
5c3c738c4b Make transformation to OS error explicit 2019-10-20 07:53:56 -05:00
Christian Poveda
338e51aa48 Rename consume_result 2019-10-20 07:53:55 -05:00
Christian Poveda
ed776f67ba Change last_error to a place 2019-10-20 07:42:59 -05:00
Christian Poveda
4232939319 Move last error functions to helpers 2019-10-20 07:42:59 -05:00
Ralf Jung
88c88530ec use expect_none and unwrap_none where it makes sense 2019-10-20 12:20:48 +02:00
Christian Poveda
f7c6e0efbe Do additional bounds checks 2019-10-19 15:49:00 -05:00
Christian Poveda
ab059671cb Change comparison order for clarity 2019-10-19 14:13:49 -05:00
Ralf Jung
324fed316f print sysroot without any escaping 2019-10-19 16:38:37 +02:00
Ralf Jung
e574c77aa2 audit our bounds checks 2019-10-19 12:39:02 +02:00