File tree 2 files changed +16
-21
lines changed
2 files changed +16
-21
lines changed Original file line number Diff line number Diff line change
1
+ use std:: boxed:: Box ;
1
2
use std:: ffi:: c_void;
2
3
use std:: string:: String ;
3
4
use std:: vec:: Vec ;
4
- use std:: boxed:: Box ;
5
5
6
6
extern "Rust" {
7
7
fn miri_get_backtrace ( flags : u64 ) -> Box < [ * mut ( ) ] > ;
@@ -10,7 +10,7 @@ extern "Rust" {
10
10
11
11
#[ derive( Debug ) ]
12
12
struct MiriData {
13
- frames : Vec < * mut c_void >
13
+ frames : Vec < * mut c_void > ,
14
14
}
15
15
16
16
#[ derive( Debug , Clone ) ]
@@ -24,7 +24,7 @@ pub struct MiriFrame {
24
24
#[ derive( Debug , Clone ) ]
25
25
pub struct Frame {
26
26
pub addr : * mut c_void ,
27
- pub inner : MiriFrame
27
+ pub inner : MiriFrame ,
28
28
}
29
29
30
30
// SAFETY: Miri guarantees that the returned pointer
@@ -56,21 +56,18 @@ pub fn trace<F: FnMut(&super::Frame) -> bool>(cb: F) {
56
56
unsafe { trace_unsynchronized ( cb) } ;
57
57
}
58
58
59
-
60
59
pub fn resolve_addr ( ptr : * mut c_void ) -> Frame {
61
60
let frame: MiriFrame = unsafe { miri_resolve_frame ( ptr as * mut ( ) , 0 ) } ;
62
61
Frame {
63
62
addr : ptr,
64
- inner : frame
63
+ inner : frame,
65
64
}
66
65
}
67
66
68
67
pub unsafe fn trace_unsynchronized < F : FnMut ( & super :: Frame ) -> bool > ( mut cb : F ) {
69
68
let frames = miri_get_backtrace ( 0 ) ;
70
69
for ptr in frames. iter ( ) {
71
70
let frame = resolve_addr ( * ptr as * mut c_void ) ;
72
- cb ( & super :: Frame {
73
- inner : frame
74
- } ) ;
71
+ cb ( & super :: Frame { inner : frame } ) ;
75
72
}
76
73
}
Original file line number Diff line number Diff line change 1
- use core:: marker:: PhantomData ;
2
1
use core:: ffi:: c_void;
2
+ use core:: marker:: PhantomData ;
3
3
4
- use crate :: symbolize:: { ResolveWhat , SymbolName } ;
5
4
use crate :: backtrace:: miri:: { resolve_addr, Frame } ;
5
+ use crate :: symbolize:: { ResolveWhat , SymbolName } ;
6
6
use crate :: types:: BytesOrWideString ;
7
7
8
-
9
8
pub unsafe fn resolve ( what : ResolveWhat , cb : & mut FnMut ( & super :: Symbol ) ) {
10
9
let sym = match what {
11
10
ResolveWhat :: Address ( addr) => Symbol {
12
11
inner : resolve_addr ( addr) ,
13
- _unused : PhantomData
12
+ _unused : PhantomData ,
13
+ } ,
14
+ ResolveWhat :: Frame ( frame) => Symbol {
15
+ inner : frame. inner . clone ( ) ,
16
+ _unused : PhantomData ,
14
17
} ,
15
- ResolveWhat :: Frame ( frame) => {
16
- Symbol {
17
- inner : frame. inner . clone ( ) ,
18
- _unused : PhantomData
19
- }
20
- }
21
18
} ;
22
19
cb ( & super :: Symbol { inner : sym } )
23
20
}
24
21
25
-
26
22
pub struct Symbol < ' a > {
27
23
inner : Frame ,
28
- _unused : PhantomData < & ' a ( ) >
24
+ _unused : PhantomData < & ' a ( ) > ,
29
25
}
30
26
31
27
impl < ' a > Symbol < ' a > {
@@ -51,6 +47,8 @@ impl<'a> Symbol<'a> {
51
47
52
48
pub fn filename ( & self ) -> Option < & :: std:: path:: Path > {
53
49
use std:: path:: Path ;
54
- Some ( Path :: new ( std:: str:: from_utf8 ( & self . inner . inner . filename ) . unwrap ( ) ) )
50
+ Some ( Path :: new (
51
+ std:: str:: from_utf8 ( & self . inner . inner . filename ) . unwrap ( ) ,
52
+ ) )
55
53
}
56
54
}
You can’t perform that action at this time.
0 commit comments