Add direct accessors for memory addresses in Machine (for Miri) by Strophox · Pull Request #126787 · rust-lang/rust (original) (raw)

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Conversation3 Commits1 Checks6 Files changed

Conversation

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})

Strophox

The purpose of this PR is to enable direct (immutable) access to memory addresses in Machine, which will be needed for further extension of Miri.

This is done by adding (/completing missings pairs of) accessor functions, with the relevant signatures as follows:

/* rust/compiler/rustc_middle/src/mir/interpret/allocation.rs */

pub trait AllocBytes { // ..

fn as_ptr(&self) -> *const u8; /*fn as_mut_ptr(&mut self) -> mut u8; -- Already in the compiler/ }

impl<Prov: Provenance, Extra, Bytes: AllocBytes> Allocation<Prov, Extra, Bytes> { // ..

pub fn get_bytes_unchecked_raw(&self) -> *const u8; /*pub fn get_bytes_unchecked_raw_mut(&mut self) -> mut u8; -- Already in the compiler/ }

/* rust/compiler/rustc_const_eval/src/interpret/memory.rs */

impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> { // ..

pub fn get_alloc_bytes_unchecked_raw(&self, id: AllocId) -> InterpResult<'tcx, *const u8>; pub fn get_alloc_bytes_unchecked_raw_mut(&mut self, id: AllocId) -> InterpResult<'tcx, *mut u8>; }

r? @RalfJung

@Strophox

…hecked_raw in allocation.rs; add pub fn get_alloc_bytes_unchecked_raw[_mut] in memory.rs

@rustbot rustbot added S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

T-compiler

Relevant to the compiler team, which will review and decide on the PR/issue.

labels

Jun 21, 2024

@rustbot

The Miri subtree was changed

cc @rust-lang/miri

Some changes occurred to the CTFE / Miri engine

cc @rust-lang/miri

Some changes occurred to the CTFE / Miri engine

cc @rust-lang/miri

@RalfJung

Looks good, thanks!
@bors r+ rollup

@bors

📌 Commit b512bf6 has been approved by RalfJung

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

labels

Jun 21, 2024

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request

Jun 22, 2024

@matthiaskrgr

Add direct accessors for memory addresses in Machine (for Miri)

The purpose of this PR is to enable direct (immutable) access to memory addresses in Machine, which will be needed for further extension of Miri.

This is done by adding (/completing missings pairs of) accessor functions, with the relevant signatures as follows:

/* rust/compiler/rustc_middle/src/mir/interpret/allocation.rs */

pub trait AllocBytes {
  // ..

  fn as_ptr(&self) -> *const u8;
/*fn as_mut_ptr(&mut self) -> *mut u8; -- Already in the compiler*/
}

impl<Prov: Provenance, Extra, Bytes: AllocBytes> Allocation<Prov, Extra, Bytes> {
  // ..

  pub fn get_bytes_unchecked_raw(&self) -> *const u8;
/*pub fn get_bytes_unchecked_raw_mut(&mut self) -> *mut u8; -- Already in the compiler*/
}
/* rust/compiler/rustc_const_eval/src/interpret/memory.rs */

impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
  // ..

  pub fn get_alloc_bytes_unchecked_raw(&self, id: AllocId) -> InterpResult<'tcx, *const u8>;
  pub fn get_alloc_bytes_unchecked_raw_mut(&mut self, id: AllocId) -> InterpResult<'tcx, *mut u8>;
}

r? @RalfJung

bors added a commit to rust-lang-ci/rust that referenced this pull request

Jun 22, 2024

@bors

…iaskrgr

Rollup of 6 pull requests

Successful merges:

r? @ghost @rustbot modify labels: rollup

bors added a commit to rust-lang-ci/rust that referenced this pull request

Jun 22, 2024

@bors

Rollup of 6 pull requests

Successful merges:

r? @ghost @rustbot modify labels: rollup

try-job: test-various

bors added a commit to rust-lang-ci/rust that referenced this pull request

Jun 22, 2024

@bors

…kingjubilee

Rollup of 7 pull requests

Successful merges:

r? @ghost @rustbot modify labels: rollup

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Jun 22, 2024

@rust-timer

Rollup merge of rust-lang#126787 - Strophox:get-bytes, r=RalfJung

Add direct accessors for memory addresses in Machine (for Miri)

The purpose of this PR is to enable direct (immutable) access to memory addresses in Machine, which will be needed for further extension of Miri.

This is done by adding (/completing missings pairs of) accessor functions, with the relevant signatures as follows:

/* rust/compiler/rustc_middle/src/mir/interpret/allocation.rs */

pub trait AllocBytes {
  // ..

  fn as_ptr(&self) -> *const u8;
/*fn as_mut_ptr(&mut self) -> *mut u8; -- Already in the compiler*/
}

impl<Prov: Provenance, Extra, Bytes: AllocBytes> Allocation<Prov, Extra, Bytes> {
  // ..

  pub fn get_bytes_unchecked_raw(&self) -> *const u8;
/*pub fn get_bytes_unchecked_raw_mut(&mut self) -> *mut u8; -- Already in the compiler*/
}
/* rust/compiler/rustc_const_eval/src/interpret/memory.rs */

impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
  // ..

  pub fn get_alloc_bytes_unchecked_raw(&self, id: AllocId) -> InterpResult<'tcx, *const u8>;
  pub fn get_alloc_bytes_unchecked_raw_mut(&mut self, id: AllocId) -> InterpResult<'tcx, *mut u8>;
}

r? @RalfJung

jaisnan pushed a commit to jaisnan/rust-dev that referenced this pull request

Jul 29, 2024

@github-actions @celinval

Update Rust toolchain from nightly-2024-06-22 to nightly-2024-06-23 without any other source changes. This is an automatically generated pull request. If any of the CI checks fail, manual intervention is required. In such a case, review the changes at https://github.com/rust-lang/rust from rust-lang@c1b336c up to rust-lang@3cb521a. The log for this commit range is: rust-lang@3cb521a434 Auto merge of rust-lang#126761 - GuillaumeGomez:unsafe_extern_blocks, r=spastorino rust-lang@a0f01c3c10 Auto merge of rust-lang#126838 - matthiaskrgr:rollup-qkop22o, r=matthiaskrgr rust-lang@dc9a08f535 Rollup merge of rust-lang#126552 - fee1-dead-contrib:rmfx, r=compiler-errors rust-lang@162120b4fa Rollup merge of rust-lang#126318 - Kobzol:bootstrap-perf, r=onur-ozkan rust-lang@f3ced9d540 Rollup merge of rust-lang#126140 - eduardosm:stabilize-fs_try_exists, r=Amanieu rust-lang@f944afe380 Auto merge of rust-lang#116113 - kpreid:arcmut, r=dtolnay rust-lang@88c3db57e4 Generalize {Rc,Arc}::make_mut() to unsized types. rust-lang@a9a4830d25 Replace WriteCloneIntoRaw with CloneToUninit. rust-lang@ec201b8650 Add core::clone::CloneToUninit. rust-lang@81da6a6d40 Make effects an incomplete feature rust-lang@ac47dbad50 Auto merge of rust-lang#126824 - GuillaumeGomez:rollup-sybv8o7, r=GuillaumeGomez rust-lang@d265538016 Rollup merge of rust-lang#126823 - GuillaumeGomez:migrate-run-make-inline-always-many-cgu, r=Kobzol rust-lang@25bcc7d130 Rollup merge of rust-lang#126731 - Kobzol:bootstrap-cmd-refactor, r=onur-ozkan rust-lang@399c5cabdd Rollup merge of rust-lang#126723 - estebank:dot-dot-dot, r=Nadrieril rust-lang@3ed2cd74b5 Rollup merge of rust-lang#126686 - fmease:dump-preds-n-item-bounds, r=compiler-errors rust-lang@07e8b3ac01 Rollup merge of rust-lang#126555 - beetrees:f16-inline-asm-arm, r=Amanieu rust-lang@d03d6c0fea Auto merge of rust-lang#126750 - scottmcm:less-unlikely, r=jhpratt rust-lang@e7dfd4a913 Migrate run-make/inline-always-many-cgu to rmake.rs rust-lang@d9962bb4d8 Make read_dir method take a mutable callback rust-lang@f1b0d54ca9 Auto merge of rust-lang#126816 - weihanglo:update-cargo, r=weihanglo rust-lang@0bd58d8122 Apply review comments. rust-lang@250586cb2e Wrap std Output in CommandOutput rust-lang@f0aceed540 Auto merge of rust-lang#126817 - workingjubilee:rollup-0rg0k55, r=workingjubilee rust-lang@38bd7a0fcb Add #[rustc_dump_{predicates,item_bounds}] rust-lang@1916b3d57f Rollup merge of rust-lang#126811 - compiler-errors:tidy-ftl, r=estebank rust-lang@539090e5cd Rollup merge of rust-lang#126809 - estebank:wording-tweak, r=oli-obk rust-lang@b9ab6c3501 Rollup merge of rust-lang#126798 - miguelfrde:master, r=tmandry rust-lang@9498d5cf2f Rollup merge of rust-lang#126787 - Strophox:get-bytes, r=RalfJung rust-lang@1f9793f1aa Rollup merge of rust-lang#126722 - adwinwhite:ptr_fn_abi, r=celinval rust-lang@84b0922565 Rollup merge of rust-lang#126712 - Oneirical:bootest-constestllation, r=jieyouxu rust-lang@e7956cd994 Rollup merge of rust-lang#126530 - beetrees:f16-inline-asm-riscv, r=Amanieu rust-lang@10e1f5d212 Auto merge of rust-lang#124101 - the8472:pidfd-methods, r=cuviper rust-lang@2c65a24b8c Update cargo rust-lang@fcae62649e Auto merge of rust-lang#126758 - spastorino:avoid-safe-outside-unsafe-blocks, r=compiler-errors rust-lang@ffd72b1700 Fix remaining cases rust-lang@ea681ef281 Add a tidy rule to make sure that diagnostics don't end in periods rust-lang@8abf149bde to extract a pidfd we must consume the child rust-lang@0787c7308c Add PidFd::{kill, wait, try_wait} rust-lang@5d5892e966 Remove stray . from error message rust-lang@d94a40516e [fuchsia-test-runner] Remove usage of kw_only rust-lang@771e44ebd3 Add f16 inline ASM support for RISC-V rust-lang@753fb070bb Add f16 inline ASM support for 32-bit ARM rust-lang@22831ed117 Do not allow safe usafe on static and fn items rust-lang@a6a83d3d4e bless tests rust-lang@b512bf6f77 add as_ptr to trait AllocBytes, fix 2 impls; add pub fn get_bytes_unchecked_raw in allocation.rs; add pub fn get_alloc_bytes_unchecked_raw[_mut] in memory.rs rust-lang@02aaea1803 update intrinsic const param counting rust-lang@3b14b756d8 Remove feature(effects) from the standard library rust-lang@a314f7363a Stop using unlikely in strict_* methods rust-lang@225796a2df Add method to get FnAbi of function pointer rust-lang@630c3adb14 Add regression test for unsafe_extern_blocks rust-lang@bb9a3ef90c Implement unsafe_extern_blocks feature in rustdoc rust-lang@3c0a4bc915 rewrite crate-name-priority to rmake rust-lang@bc12972bcd Slightly refactor the dumping of HIR analysis data rust-lang@3fe4d134dd Appease clippy rust-lang@c15293407f Remove unused import rust-lang@5c4318d02c Implement run_cmd in terms of run_tracked rust-lang@0de7b92cc6 Remove run_delaying_failure rust-lang@e933cfb13c Remove run_quiet_delaying_failure rust-lang@949e667d3f Remove run_quiet rust-lang@a12f541a18 Implement new command execution logic rust-lang@9fd7784b97 Fix ... in multline code-skips in suggestions rust-lang@f22b5afa6a rewrite error-writing-dependencies to rmake rust-lang@75ee1d74a9 rewrite relocation-model to rmake rust-lang@87d2e61428 Add x perf command for profiling the compiler using rustc-perf rust-lang@fd44aca2aa Copy rustc-fake binary when building the rustc-perf tool rust-lang@9e0b76201b Add RustcPerf bootstrap tool rust-lang@9ec178df0b Add cargo_args to ToolBuild rust-lang@6a04dfe78c Rename std::fs::try_exists to std::fs::exists and stabilize fs_try_exists

Co-authored-by: celinval 35149715+celinval@users.noreply.github.com

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request

Aug 31, 2024

@matthiaskrgr

… r=RalfJung

Enable Miri to pass pointers through FFI

Following rust-lang#126787, the purpose of this PR is to now enable Miri to execute native calls that make use of pointers.

Simple example
extern "C" {
    fn ptr_printer(ptr: *mut i32);
}

fn main() {
    let ptr = &mut 42 as *mut i32;
    unsafe {
        ptr_printer(ptr);
    }
}
void ptr_printer(int *ptr) {
  printf("printing pointer dereference from C: %d\n", *ptr);
}

should now show printing pointer dereference from C: 42.

Note that this PR does not yet implement any logic involved in updating Miri's "analysis" state (byte initialization, provenance) upon such a native call.

r? @RalfJung

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request

Aug 31, 2024

@matthiaskrgr

… r=RalfJung

Enable Miri to pass pointers through FFI

Following rust-lang#126787, the purpose of this PR is to now enable Miri to execute native calls that make use of pointers.

Simple example
extern "C" {
    fn ptr_printer(ptr: *mut i32);
}

fn main() {
    let ptr = &mut 42 as *mut i32;
    unsafe {
        ptr_printer(ptr);
    }
}
void ptr_printer(int *ptr) {
  printf("printing pointer dereference from C: %d\n", *ptr);
}

should now show printing pointer dereference from C: 42.

Note that this PR does not yet implement any logic involved in updating Miri's "analysis" state (byte initialization, provenance) upon such a native call.

r? @RalfJung

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Aug 31, 2024

@rust-timer

Rollup merge of rust-lang#129684 - Strophox:miri-pass-pointer-to-ffi, r=RalfJung

Enable Miri to pass pointers through FFI

Following rust-lang#126787, the purpose of this PR is to now enable Miri to execute native calls that make use of pointers.

Simple example
extern "C" {
    fn ptr_printer(ptr: *mut i32);
}

fn main() {
    let ptr = &mut 42 as *mut i32;
    unsafe {
        ptr_printer(ptr);
    }
}
void ptr_printer(int *ptr) {
  printf("printing pointer dereference from C: %d\n", *ptr);
}

should now show printing pointer dereference from C: 42.

Note that this PR does not yet implement any logic involved in updating Miri's "analysis" state (byte initialization, provenance) upon such a native call.

r? @RalfJung

github-actions bot pushed a commit to rust-lang/miri that referenced this pull request

Sep 1, 2024

@matthiaskrgr

Enable Miri to pass pointers through FFI

Following rust-lang/rust#126787, the purpose of this PR is to now enable Miri to execute native calls that make use of pointers.

Simple example
extern "C" {
    fn ptr_printer(ptr: *mut i32);
}

fn main() {
    let ptr = &mut 42 as *mut i32;
    unsafe {
        ptr_printer(ptr);
    }
}
void ptr_printer(int *ptr) {
  printf("printing pointer dereference from C: %d\n", *ptr);
}

should now show printing pointer dereference from C: 42.

Note that this PR does not yet implement any logic involved in updating Miri's "analysis" state (byte initialization, provenance) upon such a native call.

r? @RalfJung

Labels

S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

T-compiler

Relevant to the compiler team, which will review and decide on the PR/issue.