Use a 'flags' parameter instead of 'version'

This commit is contained in:
Aaron Hill 2020-09-24 14:18:47 -04:00
parent ae18659d52
commit ef43c5a614
No known key found for this signature in database
GPG Key ID: B4087E510E98B164
6 changed files with 13 additions and 13 deletions

@ -290,7 +290,7 @@ extern "Rust" {
///
/// The fields must be declared in exactly the same order as they appear in `MiriFrame` above.
/// This function can be called on any thread (not just the one which obtained `frame`)
fn miri_resolve_frame(version: u8, frame: *mut ()) -> MiriFrame;
fn miri_resolve_frame(frame: *mut (), flags: u64) -> MiriFrame;
/// Miri-provided extern function to begin unwinding with the given payload.
///

@ -251,11 +251,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
// Resolves a Miri backtrace frame. See the README for details.
"miri_resolve_frame" => {
let tcx = this.tcx;
let &[version, ptr] = check_arg_count(args)?;
let &[ptr, flags] = check_arg_count(args)?;
let version = this.read_scalar(version)?.to_u8()?;
if version != 0 {
throw_ub_format!("Unknown `miri_resolve_frame` version {}", version);
let flags = this.read_scalar(flags)?.to_u64()?;
if flags != 0 {
throw_ub_format!("Unknown `miri_resolve_frame` flags {}", flags);
}
let ptr = match this.read_scalar(ptr)?.check_init()? {

@ -1,13 +1,13 @@
extern "Rust" {
fn miri_get_backtrace() -> Box<[*mut ()]>;
fn miri_resolve_frame(version: u8, ptr: *mut ());
fn miri_resolve_frame(ptr: *mut (), flags: u64);
}
fn main() {
let frames = unsafe { miri_get_backtrace() };
for frame in frames.into_iter() {
unsafe {
miri_resolve_frame(0, *frame); //~ ERROR Undefined Behavior: Bad declaration of miri_resolve_frame - should return a struct with 4 fields
miri_resolve_frame(*frame, 0); //~ ERROR Undefined Behavior: Bad declaration of miri_resolve_frame - should return a struct with 4 fields
}
}
}

@ -1,9 +1,9 @@
extern "Rust" {
fn miri_resolve_frame(version: u8, ptr: *mut ());
fn miri_resolve_frame(ptr: *mut (), flags: u64);
}
fn main() {
unsafe {
miri_resolve_frame(0, 0 as *mut _); //~ ERROR Undefined Behavior: Expected a pointer
miri_resolve_frame(0 as *mut _, 0); //~ ERROR Undefined Behavior: Expected a pointer
}
}

@ -1,9 +1,9 @@
extern "Rust" {
fn miri_resolve_frame(version: u8, ptr: *mut ());
fn miri_resolve_frame(ptr: *mut (), flags: u64);
}
fn main() {
unsafe {
miri_resolve_frame(1, 0 as *mut _); //~ ERROR Undefined Behavior: Unknown `miri_resolve_frame` version 1
miri_resolve_frame(0 as *mut _, 1); //~ ERROR Undefined Behavior: Unknown `miri_resolve_frame` flags 1
}
}

@ -3,7 +3,7 @@
extern "Rust" {
fn miri_get_backtrace() -> Box<[*mut ()]>;
fn miri_resolve_frame(version: u8, ptr: *mut ()) -> MiriFrame;
fn miri_resolve_frame(ptr: *mut (), flags: u64) -> MiriFrame;
}
#[derive(Debug)]
@ -17,7 +17,7 @@ struct MiriFrame {
fn main() {
let frames = unsafe { miri_get_backtrace() };
for frame in frames.into_iter() {
let miri_frame = unsafe { miri_resolve_frame(0, *frame) };
let miri_frame = unsafe { miri_resolve_frame(*frame, 0) };
let name = String::from_utf8(miri_frame.name.into()).unwrap();
let filename = String::from_utf8(miri_frame.filename.into()).unwrap();
eprintln!("{}:{}:{} ({})", filename, miri_frame.lineno, miri_frame.colno, name);