implement elf loader

This commit is contained in:
Alex Zenla
2024-01-09 22:39:32 -08:00
parent 35f3346858
commit 19b797f1a2
11 changed files with 383 additions and 25 deletions

View File

@ -1,13 +1,16 @@
pub mod domctl;
pub mod sys;
use crate::sys::Hypercall;
use crate::sys::{
Hypercall, Mmap, XenCapabilitiesInfo, HYPERVISOR_XEN_VERSION, XENVER_CAPABILITIES,
};
use nix::errno::Errno;
use std::error::Error;
use std::ffi::{c_long, c_ulong};
use std::fmt::{Display, Formatter};
use std::fs::{File, OpenOptions};
use std::os::fd::AsRawFd;
use std::ptr::addr_of;
pub struct XenCall {
pub handle: File,
@ -116,4 +119,24 @@ impl XenCall {
) -> Result<c_long, XenCallError> {
self.hypercall(op, [arg1, arg2, arg3, arg4, arg5])
}
pub fn mmap(&mut self, mmap: Mmap) -> Result<c_long, XenCallError> {
unsafe {
let mut mmap = mmap.clone();
let result = sys::mmap(self.handle.as_raw_fd(), &mut mmap)?;
Ok(result as c_long)
}
}
pub fn get_version_capabilities(&mut self) -> Result<XenCapabilitiesInfo, XenCallError> {
let info = XenCapabilitiesInfo {
capabilities: [0; 1024],
};
self.hypercall2(
HYPERVISOR_XEN_VERSION,
XENVER_CAPABILITIES,
addr_of!(info) as c_ulong,
)?;
Ok(info)
}
}