///
/// 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.
///
// 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()? {
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
}
}
}
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
}
}
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
}
}
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)]
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);