(
num_bytes: u64,
max_physaddr: u64
)
| 399 | } |
| 400 | |
| 401 | pub fn malloc( |
| 402 | num_bytes: u64, |
| 403 | max_physaddr: u64 |
| 404 | ) -> Result<(MemoryHandle, u64), SyscallError> { |
| 405 | |
| 406 | if num_bytes == 0 { |
| 407 | return Err(SYSCALL_ERROR_PARAM); |
| 408 | } |
| 409 | |
| 410 | let num_pages = (num_bytes >> 12) + |
| 411 | if (num_bytes & 4095) != 0 {1} else {0}; |
| 412 | |
| 413 | let error: u64; |
| 414 | let virtaddr: u64; |
| 415 | let physaddr: u64; |
| 416 | unsafe { |
| 417 | asm!("syscall", |
| 418 | in("rax") SYSCALL_MALLOC, |
| 419 | in("rdi") num_pages, // First argument |
| 420 | in("rsi") max_physaddr, // Second argument |
| 421 | lateout("rax") error, |
| 422 | lateout("rdi") virtaddr, |
| 423 | lateout("rsi") physaddr, |
| 424 | out("rcx") _, |
| 425 | out("r11") _); |
| 426 | } |
| 427 | if error == 0 { |
| 428 | Ok((MemoryHandle(virtaddr), physaddr)) |
| 429 | } else { |
| 430 | Err(SyscallError(error)) |
| 431 | } |
| 432 | } |
| 433 | |
| 434 | pub fn new_rendezvous() -> Result<(CommHandle, CommHandle), SyscallError> { |
| 435 | let error: u64; |
no test coverage detected