use std::cell::UnsafeCell;
use std::ptr;
use libc::c_char;
use libc::c_int;
use libc::c_void;
pub struct Callbacks(UnsafeCell<crate::dw_sys::Dwfl_Callbacks>);
unsafe impl Sync for Callbacks {}
unsafe impl Send for Callbacks {}
impl Callbacks {
pub fn new(find_elf: FindElf, find_debuginfo: FindDebuginfo) -> Callbacks {
Callbacks(UnsafeCell::new(crate::dw_sys::Dwfl_Callbacks {
find_elf: Some(find_elf.0),
find_debuginfo: Some(find_debuginfo.0),
section_address: None,
debuginfo_path: ptr::null_mut(),
}))
}
pub fn as_ptr(&self) -> *const crate::dw_sys::Dwfl_Callbacks {
self.0.get()
}
}
#[derive(Copy, Clone)]
pub struct FindElf(
unsafe extern "C" fn(
*mut crate::dw_sys::Dwfl_Module,
*mut *mut c_void,
*const c_char,
crate::dw_sys::Dwarf_Addr,
*mut *mut c_char,
*mut *mut crate::dw_sys::Elf,
) -> c_int,
);
impl FindElf {
pub const LINUX_PROC: FindElf = FindElf(crate::dw_sys::dwfl_linux_proc_find_elf);
pub const BUILD_ID: FindElf = FindElf(crate::dw_sys::dwfl_build_id_find_elf);
}
#[derive(Copy, Clone)]
pub struct FindDebuginfo(
unsafe extern "C" fn(
*mut crate::dw_sys::Dwfl_Module,
*mut *mut c_void,
*const c_char,
crate::dw_sys::Dwarf_Addr,
*const c_char,
*const c_char,
crate::dw_sys::GElf_Word,
*mut *mut c_char,
) -> c_int,
);
impl FindDebuginfo {
pub const STANDARD: FindDebuginfo = FindDebuginfo(crate::dw_sys::dwfl_standard_find_debuginfo);
}