Format code
This commit is contained in:
parent
1ceb2e1607
commit
5558fa427b
@ -1,8 +1,9 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
gdt, println, qemu_exit, virtual_memory::{ASpaceMutex, AddressSpace, PagingError, KERNEL_SPACE}
|
gdt, println, qemu_exit,
|
||||||
|
virtual_memory::{ASpaceMutex, AddressSpace, PagingError, KERNEL_SPACE},
|
||||||
};
|
};
|
||||||
use alloc::{borrow::ToOwned, boxed::Box, collections::VecDeque, ffi::CString, vec::Vec};
|
use alloc::{borrow::ToOwned, boxed::Box, collections::VecDeque, ffi::CString, vec::Vec};
|
||||||
use core::{alloc::Layout, arch::asm, ptr::addr_of, ffi::CStr};
|
use core::{alloc::Layout, arch::asm, ffi::CStr, ptr::addr_of};
|
||||||
use crossbeam_queue::SegQueue;
|
use crossbeam_queue::SegQueue;
|
||||||
use slab::Slab;
|
use slab::Slab;
|
||||||
use spin::{Lazy, Mutex};
|
use spin::{Lazy, Mutex};
|
||||||
@ -147,22 +148,31 @@ impl Tasking {
|
|||||||
PageTableFlags::USER_ACCESSIBLE,
|
PageTableFlags::USER_ACCESSIBLE,
|
||||||
)?;
|
)?;
|
||||||
let arguments = arguments.iter().map(|arg| (*arg).to_owned()).collect::<Vec<CString>>();
|
let arguments = arguments.iter().map(|arg| (*arg).to_owned()).collect::<Vec<CString>>();
|
||||||
#[expect(clippy::unwrap_used, reason = "This fails if the byte size of the array exceeds isize::MAX, which with 48-bit virtual addresses cannot happen")]
|
#[expect(
|
||||||
|
clippy::unwrap_used,
|
||||||
|
reason = "This fails if the byte size of the array exceeds isize::MAX, which with 48-bit virtual addresses cannot happen"
|
||||||
|
)]
|
||||||
let mut args_layout = Layout::array::<*const u8>(arguments.len()).unwrap();
|
let mut args_layout = Layout::array::<*const u8>(arguments.len()).unwrap();
|
||||||
let mut arg_offsets = Vec::new();
|
let mut arg_offsets = Vec::new();
|
||||||
for argument in &arguments {
|
for argument in &arguments {
|
||||||
#[expect(clippy::unwrap_used, reason = "This fails if the total size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen")]
|
#[expect(
|
||||||
|
clippy::unwrap_used,
|
||||||
|
reason = "This fails if the total size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen"
|
||||||
|
)]
|
||||||
let (new_layout, offset) =
|
let (new_layout, offset) =
|
||||||
args_layout.extend(Layout::for_value(argument.to_bytes_with_nul())).unwrap();
|
args_layout.extend(Layout::for_value(argument.to_bytes_with_nul())).unwrap();
|
||||||
args_layout = new_layout;
|
args_layout = new_layout;
|
||||||
arg_offsets.push(offset);
|
arg_offsets.push(offset);
|
||||||
}
|
}
|
||||||
args_layout = {
|
args_layout = {
|
||||||
#[expect(clippy::unwrap_used, reason = "This fails if the aligned size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen")]
|
#[expect(
|
||||||
|
clippy::unwrap_used,
|
||||||
|
reason = "This fails if the aligned size of the layout exceeds isize::MAX, which with 48-bit virtual addresses cannot happen"
|
||||||
|
)]
|
||||||
args_layout.align_to(4096).unwrap().pad_to_align()
|
args_layout.align_to(4096).unwrap().pad_to_align()
|
||||||
};
|
};
|
||||||
let user_arg_mem = address_space
|
let user_arg_mem =
|
||||||
.map_free(args_layout.size() / 4096, PageTableFlags::USER_ACCESSIBLE)?;
|
address_space.map_free(args_layout.size() / 4096, PageTableFlags::USER_ACCESSIBLE)?;
|
||||||
address_space.run(|| unsafe {
|
address_space.run(|| unsafe {
|
||||||
let mut ptr_ptr: *mut *const u8 = user_arg_mem.cast();
|
let mut ptr_ptr: *mut *const u8 = user_arg_mem.cast();
|
||||||
for (&offset, argument) in arg_offsets.iter().zip(arguments.iter()) {
|
for (&offset, argument) in arg_offsets.iter().zip(arguments.iter()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user