Use a 'flags' parameter instead of 'version'
This commit is contained in:
parent
ae18659d52
commit
ef43c5a614
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user