| 
9 | 9 | // except according to those terms.  | 
10 | 10 | 
 
  | 
11 | 11 | use io;  | 
12 |  | -use io::prelude::*;  | 
 | 12 | +use intrinsics;  | 
 | 13 | +use ffi::CStr;  | 
13 | 14 | use libc;  | 
 | 15 | +use sys::backtrace::BacktraceContext;  | 
 | 16 | +use sys_common::backtrace::Frame;  | 
14 | 17 | 
 
  | 
15 |  | -pub fn print(w: &mut Write, idx: isize, addr: *mut libc::c_void,  | 
16 |  | -             _symaddr: *mut libc::c_void) -> io::Result<()> {  | 
17 |  | -    use sys_common::backtrace::{output};  | 
18 |  | -    use intrinsics;  | 
19 |  | -    use ffi::CStr;  | 
20 |  | - | 
21 |  | -    #[repr(C)]  | 
22 |  | -    struct Dl_info {  | 
23 |  | -        dli_fname: *const libc::c_char,  | 
24 |  | -        dli_fbase: *mut libc::c_void,  | 
25 |  | -        dli_sname: *const libc::c_char,  | 
26 |  | -        dli_saddr: *mut libc::c_void,  | 
27 |  | -    }  | 
28 |  | -    extern {  | 
29 |  | -        fn dladdr(addr: *const libc::c_void,  | 
30 |  | -                  info: *mut Dl_info) -> libc::c_int;  | 
 | 18 | +pub fn resolve_symname<F>(frame: Frame,  | 
 | 19 | +                          callback: F,  | 
 | 20 | +                          _: &BacktraceContext) -> io::Result<()>  | 
 | 21 | +    where F: FnOnce(Option<&str>) -> io::Result<()>  | 
 | 22 | +{  | 
 | 23 | +    unsafe {  | 
 | 24 | +        let mut info: Dl_info = intrinsics::init();  | 
 | 25 | +        let symname = if dladdr(frame.exact_position, &mut info) == 0 {  | 
 | 26 | +            None  | 
 | 27 | +        } else {  | 
 | 28 | +            CStr::from_ptr(info.dli_sname).to_str().ok()  | 
 | 29 | +        };  | 
 | 30 | +        callback(symname)  | 
31 | 31 |     }  | 
 | 32 | +}  | 
32 | 33 | 
 
  | 
33 |  | -    let mut info: Dl_info = unsafe { intrinsics::init() };  | 
34 |  | -    if unsafe { dladdr(addr, &mut info) == 0 } {  | 
35 |  | -        output(w, idx,addr, None)  | 
36 |  | -    } else {  | 
37 |  | -        output(w, idx, addr, Some(unsafe {  | 
38 |  | -            CStr::from_ptr(info.dli_sname).to_bytes()  | 
39 |  | -        }))  | 
40 |  | -    }  | 
 | 34 | +pub fn foreach_symbol_fileline<F>(_symbol_addr: Frame,  | 
 | 35 | +                                  _f: F,  | 
 | 36 | +                                  _: &BacktraceContext) -> io::Result<bool>  | 
 | 37 | +    where F: FnMut(&[u8], libc::c_int) -> io::Result<()>  | 
 | 38 | +{  | 
 | 39 | +    Ok(false)  | 
 | 40 | +}  | 
 | 41 | + | 
 | 42 | +#[repr(C)]  | 
 | 43 | +struct Dl_info {  | 
 | 44 | +    dli_fname: *const libc::c_char,  | 
 | 45 | +    dli_fbase: *mut libc::c_void,  | 
 | 46 | +    dli_sname: *const libc::c_char,  | 
 | 47 | +    dli_saddr: *mut libc::c_void,  | 
 | 48 | +}  | 
 | 49 | + | 
 | 50 | +extern {  | 
 | 51 | +    fn dladdr(addr: *const libc::c_void,  | 
 | 52 | +              info: *mut Dl_info) -> libc::c_int;  | 
41 | 53 | }  | 
0 commit comments