in src/bpf/pid_iter.skel.rs [3327:3363]
fn load(self) -> libbpf_rs::Result<PidIterSkel<'obj>> {
let skel_ptr = self.skel_config.as_libbpf_object().as_ptr();
let ret = unsafe { libbpf_sys::bpf_object__load_skeleton(skel_ptr) };
if ret != 0 {
return Err(libbpf_rs::Error::from_raw_os_error(-ret));
}
let obj_ref = self.obj.take();
let open_obj = std::mem::replace(obj_ref, std::mem::MaybeUninit::uninit());
// SAFETY: `open_obj` is guaranteed to be properly
// initialized as it came from an `OwnedRef`.
let obj_ptr = unsafe { open_obj.assume_init().take_ptr() };
// SAFETY: `obj_ptr` points to a loaded object after
// skeleton load.
let obj = unsafe { libbpf_rs::Object::from_ptr(obj_ptr) };
// SAFETY: `OpenObject` and `Object` are guaranteed to
// have the same memory layout.
let obj_ref = unsafe {
std::mem::transmute::<
&'obj mut std::mem::MaybeUninit<libbpf_rs::OpenObject>,
&'obj mut std::mem::MaybeUninit<libbpf_rs::Object>,
>(obj_ref)
};
let _obj = obj_ref.write(obj);
// SAFETY: We just wrote initialized data to `obj_ref`.
let mut obj_ref = unsafe { OwnedRef::new(obj_ref) };
Ok(PidIterSkel {
maps: unsafe { PidIterMaps::new(&self.skel_config, obj_ref.as_mut())? },
progs: PidIterProgs::new(self.progs),
obj: obj_ref,
struct_ops: self.struct_ops,
skel_config: self.skel_config,
links: PidIterLinks::default(),
})
}