diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml deleted file mode 100644 index 51c9c3f..0000000 --- a/.forgejo/workflows/ci.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Check - -on: - push: - branches: [main] - pull_request: - branches: [main] - -env: - # Should speed up builds. - CARGO_INCREMENTAL: 0 - # Should reduce the size of ./target to improve cache load/store. - CARGO_PROFILE_TEST_DEBUG: 0 - -jobs: - check: - name: Check Rust - runs-on: docker - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - - - name: Install Rust - uses: https://codeberg.org/wackbyte/rust-toolchain@trunk - with: - toolchain: stable - components: rustfmt, clippy - - name: Cache - uses: https://github.com/Swatinem/rust-cache@v2 - with: - # Don't cache ~/.cargo/bin since we restore the cache after we install things there - cache-bin: "false" - workspaces: "backend" - - name: "Check Format" - run: cargo fmt --check - working-directory: rust - - name: "Build" - run: | - cargo build --tests --locked - working-directory: rust - - name: "Lint" - run: | - rustup component add clippy - cargo clippy --locked -- -D warnings - working-directory: rust diff --git a/rust-toolchain.toml b/rust-toolchain.toml deleted file mode 100644 index 66768f4..0000000 --- a/rust-toolchain.toml +++ /dev/null @@ -1,3 +0,0 @@ -[toolchain] -channel = "nightly-2025-10-02" -components = ["rustfmt", "rust-analyzer"] diff --git a/rust/lib/fs/ext2/src/ext2_driver.rs b/rust/lib/fs/ext2/src/ext2_driver.rs index 0997b62..96bb858 100644 --- a/rust/lib/fs/ext2/src/ext2_driver.rs +++ b/rust/lib/fs/ext2/src/ext2_driver.rs @@ -94,7 +94,7 @@ impl Ext2Driver { /// Updates the cached inode tables to contain the inode table for /// a specific group. fn populate_inode_table_if_none(&mut self, block_group_num: usize) { - if self.inode_table_map[block_group_num].is_none() { + if let None = self.inode_table_map[block_group_num] { debug!( "Cache MISS on inode table for block_group {}", block_group_num @@ -148,15 +148,17 @@ impl Ext2Driver { let dbl_indr_block_mem = MemoryRegion::from_cap(self.reader.read(block_num, 1).unwrap()).unwrap(); - let dbl_indr_blocks: &[u32] = &dbl_indr_block_mem.slice()[0..num_dbl_indr]; + let dbl_indr_blocks: &[u32] = dbl_indr_block_mem.slice(); let mut blocks_to_read = Vec::new(); - for (i, dbl_indr_block) in dbl_indr_blocks.iter().enumerate() { + for i in 0..num_dbl_indr { let num_blocks_in_single = min(num_blocks - (256 * i), 256); blocks_to_read.append( - &mut self - .get_blocks_from_single_indirect(*dbl_indr_block as u64, num_blocks_in_single), + &mut self.get_blocks_from_single_indirect( + dbl_indr_blocks[i] as u64, + num_blocks_in_single, + ), ); } @@ -174,7 +176,7 @@ impl Ext2Driver { let mut blocks = Vec::new(); - for block in iter { + while let Some(block) = iter.next() { if block as u64 == (curr_block.lba + curr_block.size) { curr_block.size += 1; } else { diff --git a/rust/lib/fs/ext2/src/types.rs b/rust/lib/fs/ext2/src/types.rs index fd1f59b..7aa3d2b 100644 --- a/rust/lib/fs/ext2/src/types.rs +++ b/rust/lib/fs/ext2/src/types.rs @@ -111,9 +111,7 @@ pub struct Inode { const _: () = assert!(size_of::() == 128); -#[allow(dead_code)] pub const EXT2_FT_FILE: u8 = 0x1; -#[allow(dead_code)] pub const EXT2_FT_DIR: u8 = 0x2; #[repr(C, packed)] diff --git a/rust/lib/mammoth/src/cap_syscall.rs b/rust/lib/mammoth/src/cap_syscall.rs index b820bdc..eb9567a 100644 --- a/rust/lib/mammoth/src/cap_syscall.rs +++ b/rust/lib/mammoth/src/cap_syscall.rs @@ -2,6 +2,7 @@ use core::ffi::c_void; use crate::zion::{self, z_cap_t, ZError}; +#[must_use] fn syscall(id: u64, req: &T) -> Result<(), ZError> { unsafe { let resp = zion::SysCall1(id, req as *const T as *const c_void); diff --git a/rust/lib/mammoth/src/elf.rs b/rust/lib/mammoth/src/elf.rs index 96807d2..2b8638f 100644 --- a/rust/lib/mammoth/src/elf.rs +++ b/rust/lib/mammoth/src/elf.rs @@ -1,4 +1,5 @@ use crate::cap::Capability; +use crate::debug; use crate::init; use crate::syscall; use crate::zion::ZError; @@ -236,7 +237,7 @@ fn load_program_segment( let page_offset = prog_header.vaddr & 0xFFF; let mem_size = page_offset + prog_header.mem_size; - let mut mem_object = crate::mem::MemoryRegion::new(mem_size)?; + let mem_object = crate::mem::MemoryRegion::new(mem_size)?; for i in mem_object.mut_slice() { *i = 0; diff --git a/rust/lib/mammoth/src/init.rs b/rust/lib/mammoth/src/init.rs index c190ad1..556cf24 100644 --- a/rust/lib/mammoth/src/init.rs +++ b/rust/lib/mammoth/src/init.rs @@ -28,7 +28,7 @@ pub fn parse_init_port(port_cap: z_cap_t) { let mut caps: [u64; 1] = [0]; let resp = syscall::port_poll(&init_port, &mut bytes, &mut caps); - if resp.is_err() { + if let Err(_) = resp { break; } diff --git a/rust/lib/mammoth/src/macros.rs b/rust/lib/mammoth/src/macros.rs index 3fc64c5..c977a91 100644 --- a/rust/lib/mammoth/src/macros.rs +++ b/rust/lib/mammoth/src/macros.rs @@ -2,20 +2,21 @@ use alloc::string::String; use alloc::vec::Vec; use core::fmt; -#[derive(Default)] pub struct Writer { int_vec: Vec, } impl Writer { pub fn new() -> Self { - Writer::default() + Self { + int_vec: Vec::new(), + } } } -impl From for String { - fn from(value: Writer) -> Self { - String::from_utf8(value.int_vec).expect("Failed to convert") +impl Into for Writer { + fn into(self) -> String { + String::from_utf8(self.int_vec).expect("Failed to convert") } } diff --git a/rust/lib/mammoth/src/mem.rs b/rust/lib/mammoth/src/mem.rs index 90183ec..8d5af40 100644 --- a/rust/lib/mammoth/src/mem.rs +++ b/rust/lib/mammoth/src/mem.rs @@ -85,7 +85,7 @@ impl MemoryRegion { } } - pub fn mut_slice(&mut self) -> &mut [T] { + pub fn mut_slice(&self) -> &mut [T] { unsafe { slice::from_raw_parts_mut( self.virt_addr as *mut T, diff --git a/rust/lib/mammoth/src/sync.rs b/rust/lib/mammoth/src/sync.rs index f435e32..0ee5fea 100644 --- a/rust/lib/mammoth/src/sync.rs +++ b/rust/lib/mammoth/src/sync.rs @@ -50,7 +50,7 @@ impl DerefMut for MutexGuard<'_, T> { } } -impl<'a, T> Mutex { +impl Mutex { pub fn new(data: T) -> Mutex { Mutex { cap: syscall::mutex_create().unwrap(), @@ -58,7 +58,7 @@ impl<'a, T> Mutex { } } - pub fn lock(&'a self) -> MutexGuard<'a, T> { + pub fn lock(&self) -> MutexGuard { syscall::mutex_lock(&self.cap).unwrap(); MutexGuard { mutex: self } @@ -70,12 +70,3 @@ impl Drop for MutexGuard<'_, T> { syscall::mutex_release(&self.mutex.cap).unwrap(); } } - -impl Default for Mutex -where - T: Default, -{ - fn default() -> Self { - Self::new(T::default()) - } -} diff --git a/rust/lib/mammoth/src/syscall.rs b/rust/lib/mammoth/src/syscall.rs index bab76ca..2691458 100644 --- a/rust/lib/mammoth/src/syscall.rs +++ b/rust/lib/mammoth/src/syscall.rs @@ -9,6 +9,7 @@ use core::ffi::c_void; #[cfg(feature = "hosted")] use core::panic::PanicInfo; +#[must_use] fn syscall(id: u64, req: &T) -> Result<(), ZError> { unsafe { let resp = zion::SysCall1(id, req as *const T as *const c_void); diff --git a/rust/lib/mammoth/src/task/mod.rs b/rust/lib/mammoth/src/task/mod.rs index ec25afa..44aab69 100644 --- a/rust/lib/mammoth/src/task/mod.rs +++ b/rust/lib/mammoth/src/task/mod.rs @@ -48,7 +48,7 @@ struct TaskWaker { } impl TaskWaker { - fn create_waker(task_id: TaskId, task_queue: Arc>>) -> Waker { + fn new(task_id: TaskId, task_queue: Arc>>) -> Waker { Waker::from(Arc::new(TaskWaker { task_id, task_queue, @@ -69,7 +69,6 @@ impl Wake for TaskWaker { } } -#[derive(Default)] pub struct Executor { tasks: Arc>>, // TODO: Consider a better datastructure for this. @@ -79,7 +78,11 @@ pub struct Executor { impl Executor { pub fn new() -> Executor { - Executor::default() + Executor { + tasks: Arc::new(Mutex::new(BTreeMap::new())), + task_queue: Arc::new(Mutex::new(VecDeque::new())), + waker_cache: BTreeMap::new(), + } } pub fn spawn(&mut self, task: Task) { @@ -97,7 +100,7 @@ impl Executor { let waker = self .waker_cache .entry(task_id) - .or_insert_with(|| TaskWaker::create_waker(task_id, self.task_queue.clone())); + .or_insert_with(|| TaskWaker::new(task_id, self.task_queue.clone())); let mut ctx = Context::from_waker(waker); match task.poll(&mut ctx) { Poll::Ready(()) => { diff --git a/rust/lib/mammoth/src/thread.rs b/rust/lib/mammoth/src/thread.rs index aeb4b27..99032be 100644 --- a/rust/lib/mammoth/src/thread.rs +++ b/rust/lib/mammoth/src/thread.rs @@ -40,7 +40,7 @@ where let raw_main = Box::into_raw(Box::new(main)); let proc_cap = Capability::take_copy(unsafe { crate::init::SELF_PROC_CAP }).unwrap(); let cap = syscall::thread_create(&proc_cap).unwrap(); - syscall::thread_start(&cap, entry_point as usize as u64, raw_main as u64, 0).unwrap(); + syscall::thread_start(&cap, entry_point as u64, raw_main as u64, 0).unwrap(); JoinHandle { cap } } diff --git a/rust/lib/pci/src/device.rs b/rust/lib/pci/src/device.rs index e65e3da..ab1b25d 100644 --- a/rust/lib/pci/src/device.rs +++ b/rust/lib/pci/src/device.rs @@ -2,7 +2,8 @@ use alloc::vec::Vec; use mammoth::{cap::Capability, mem::MemoryRegion, syscall, zion::ZError}; use crate::header::{ - PciCapabilityPointer, PciDeviceHeader, PciHeaderType, PciMsiCapability, get_header_type, + PciCapabilityPointer, PciDeviceHeader, PciHeaderType, PciMsiCapability, PciMsiControl, + get_header_type, }; pub struct PciDevice { @@ -10,7 +11,7 @@ pub struct PciDevice { } impl PciDevice { - pub fn from(memory_region: MemoryRegion) -> Result { + pub fn from(mut memory_region: MemoryRegion) -> Result { match get_header_type(&memory_region)? { PciHeaderType::Device => {} t => { diff --git a/rust/lib/voyageurs/src/listener.rs b/rust/lib/voyageurs/src/listener.rs index 89e40b6..1912b88 100644 --- a/rust/lib/voyageurs/src/listener.rs +++ b/rust/lib/voyageurs/src/listener.rs @@ -7,7 +7,7 @@ use mammoth::thread; #[allow(dead_code)] #[derive(PartialEq, Eq, PartialOrd, Ord, Copy, Clone)] enum Keycode { - Unknown = 0x0, + UnknownKeycode = 0x0, A = 0x1, B = 0x2, @@ -135,7 +135,7 @@ impl Keycode { 0x37 => Keycode::Period, 0x38 => Keycode::FSlash, 0x39 => Keycode::Esc, - _ => Keycode::Unknown, + _ => Keycode::UnknownKeycode, } } } diff --git a/rust/lib/yellowstone/src/lib.rs b/rust/lib/yellowstone/src/lib.rs index ffdc267..76659ef 100644 --- a/rust/lib/yellowstone/src/lib.rs +++ b/rust/lib/yellowstone/src/lib.rs @@ -10,12 +10,10 @@ static mut YELLOWSTONE_INIT: Option = None; pub fn from_init_endpoint() -> &'static mut YellowstoneClient { unsafe { - #[allow(static_mut_refs)] - if YELLOWSTONE_INIT.is_none() { + if let None = YELLOWSTONE_INIT { YELLOWSTONE_INIT = Some(YellowstoneClient::new(Capability::take(INIT_ENDPOINT))); } - #[allow(static_mut_refs)] YELLOWSTONE_INIT.as_mut().unwrap() } } diff --git a/rust/lib/yunq/src/buffer.rs b/rust/lib/yunq/src/buffer.rs index 7966337..c3b0b18 100644 --- a/rust/lib/yunq/src/buffer.rs +++ b/rust/lib/yunq/src/buffer.rs @@ -5,19 +5,12 @@ pub struct ByteBuffer { buffer: Box<[u8; N]>, } -impl Default for ByteBuffer { - fn default() -> Self { +impl ByteBuffer { + pub fn new() -> Self { Self { buffer: Box::new([0; N]), } } -} - -impl ByteBuffer { - pub fn new() -> Self { - ByteBuffer::default() - } - pub fn size(&self) -> u64 { N as u64 } @@ -61,7 +54,7 @@ impl ByteBuffer { if (len + offset) > N { return Err(ZError::BUFFER_SIZE); } - alloc::str::from_utf8(&self.buffer[offset..offset + len]) - .map_err(|_| ZError::INVALID_ARGUMENT) + Ok(alloc::str::from_utf8(&self.buffer[offset..offset + len]) + .map_err(|_| ZError::INVALID_ARGUMENT)?) } } diff --git a/rust/lib/yunq/src/client.rs b/rust/lib/yunq/src/client.rs index c4c45b8..e90698e 100644 --- a/rust/lib/yunq/src/client.rs +++ b/rust/lib/yunq/src/client.rs @@ -34,5 +34,5 @@ pub fn call_endpoint( return Err(ZError::from(resp_code)); } - Resp::parse_from_request(byte_buffer, &cap_buffer) + Ok(Resp::parse_from_request(&byte_buffer, &cap_buffer)?) } diff --git a/rust/lib/yunq/src/message.rs b/rust/lib/yunq/src/message.rs index 568916f..d1fc6a5 100644 --- a/rust/lib/yunq/src/message.rs +++ b/rust/lib/yunq/src/message.rs @@ -28,7 +28,7 @@ pub fn parse_repeated_message( buf: &ByteBuffer, mut offset: usize, len: usize, - caps: &[z_cap_t], + caps: &Vec, ) -> Result, ZError> { let mut repeated = Vec::new(); for _ in 0..len { @@ -43,18 +43,18 @@ pub fn parse_repeated_message( pub fn serialize_repeated( buf: &mut ByteBuffer, offset: usize, - data: &[T], + data: &Vec, ) -> Result { - for (i, val) in data.iter().enumerate() { - buf.write_at(offset + (i * size_of::()), val)?; + for i in 0..data.len() { + buf.write_at(offset + (i * size_of::()), data[i])?; } - Ok(offset + size_of_val(data)) + Ok(offset + (data.len() * size_of::())) } pub fn serialize_repeated_message( buf: &mut ByteBuffer, mut offset: usize, - data: &[T], + data: &Vec, caps: &mut Vec, ) -> Result { for item in data { @@ -76,14 +76,14 @@ pub trait YunqMessage { fn parse( buf: &ByteBuffer, offset: usize, - caps: &[z_cap_t], + caps: &Vec, ) -> Result where Self: Sized; fn parse_from_request( buf: &ByteBuffer, - caps: &[z_cap_t], + caps: &Vec, ) -> Result where Self: Sized, @@ -92,7 +92,7 @@ pub trait YunqMessage { return Err(ZError::INVALID_RESPONSE); } - Self::parse(buf, 16, caps) + Ok(Self::parse(&buf, 16, &caps)?) } fn serialize( @@ -109,7 +109,7 @@ pub trait YunqMessage { caps: &mut Vec, ) -> Result { buf.write_at(0, SENTINEL)?; - buf.write_at(8, request_id)?; + buf.write_at(8, request_id as u64)?; let length = self.serialize(buf, 16, caps)?; @@ -125,7 +125,7 @@ impl YunqMessage for Empty { fn parse( _buf: &ByteBuffer, _offset: usize, - _caps: &[z_cap_t], + _caps: &Vec, ) -> Result where Self: Sized, diff --git a/rust/lib/yunq/src/server.rs b/rust/lib/yunq/src/server.rs index cdfe418..a5ded0b 100644 --- a/rust/lib/yunq/src/server.rs +++ b/rust/lib/yunq/src/server.rs @@ -37,7 +37,7 @@ pub trait YunqServer { .expect("Failed to reply"), Err(err) => { crate::message::serialize_error(&mut byte_buffer, err); - syscall::reply_port_send(reply_port_cap, byte_buffer.slice(0x10), &[]) + syscall::reply_port_send(reply_port_cap, &byte_buffer.slice(0x10), &[]) .expect("Failed to reply w/ error") } } @@ -84,11 +84,11 @@ where .at::(8) .expect("Failed to access request length."); let self_clone = self.clone(); - spawner.spawn(Task::new(async move { + spawner.spawn(Task::new((async move || { self_clone .handle_request_and_response(method, byte_buffer, cap_buffer, reply_port_cap) - .await - })); + .await; + })())); } } @@ -113,10 +113,12 @@ where .expect("Failed to reply"), Err(err) => { crate::message::serialize_error(&mut byte_buffer, err); - syscall::reply_port_send(reply_port_cap, byte_buffer.slice(0x10), &[]) + syscall::reply_port_send(reply_port_cap, &byte_buffer.slice(0x10), &[]) .expect("Failed to reply w/ error") } } + + () } } diff --git a/rust/rust-toolchain.toml b/rust/rust-toolchain.toml new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly" diff --git a/rust/sys/denali/src/ahci/command.rs b/rust/sys/denali/src/ahci/command.rs index c827bb1..947082e 100644 --- a/rust/sys/denali/src/ahci/command.rs +++ b/rust/sys/denali/src/ahci/command.rs @@ -95,7 +95,7 @@ impl Command { command: SataCommand::DmaReadExt, lba, sector_cnt: lba_count, - paddr, + paddr: paddr, memory_region: None, } } diff --git a/rust/sys/denali/src/ahci/port_controller.rs b/rust/sys/denali/src/ahci/port_controller.rs index 42dfa00..556e8f7 100644 --- a/rust/sys/denali/src/ahci/port_controller.rs +++ b/rust/sys/denali/src/ahci/port_controller.rs @@ -44,8 +44,9 @@ impl PortController { }; // This leaves space for 8 prdt entries. - for (i, header) in command_list.iter_mut().enumerate() { - header.command_table_base_addr = (command_paddr + 0x500) + (0x100 * (i as u64)); + for i in 0..32 { + command_list[i].command_table_base_addr = + (command_paddr + 0x500) + (0x100 * (i as u64)); } let command_slots = array::from_fn(|_| Arc::new(Mutex::new(CommandStatus::Empty))); diff --git a/rust/sys/teton/src/framebuffer.rs b/rust/sys/teton/src/framebuffer.rs index f083367..dad4099 100644 --- a/rust/sys/teton/src/framebuffer.rs +++ b/rust/sys/teton/src/framebuffer.rs @@ -16,16 +16,15 @@ impl Framebuffer { }) } - fn draw_pixel(&mut self, row: u32, col: u32, pixel: u32) { + fn draw_pixel(&self, row: u32, col: u32, pixel: u32) { let index = row * (self.fb_info.pitch as u32 / 4) + col; self.memory_region.mut_slice()[index as usize] = pixel; } - pub fn draw_glyph(&mut self, glyph: &[u8], row: u32, col: u32) { + pub fn draw_glyph(&self, glyph: &[u8], row: u32, col: u32) { let gl_width = 8; let gl_height = 16; - #[allow(clippy::needless_range_loop)] for r in 0..gl_height { for c in 0..gl_width { if ((glyph[r] >> c) % 2) == 1 { diff --git a/rust/sys/teton/src/psf.rs b/rust/sys/teton/src/psf.rs index 3f99f65..f6a75a6 100644 --- a/rust/sys/teton/src/psf.rs +++ b/rust/sys/teton/src/psf.rs @@ -23,7 +23,7 @@ pub struct Psf { impl Psf { pub fn new(path: &str) -> Result { - let file = File::open(path)?; + let file = File::open(&path)?; let header = file.slice()[0..core::mem::size_of::()] .as_ptr() diff --git a/rust/sys/teton/src/terminal.rs b/rust/sys/teton/src/terminal.rs index f8a9e0f..5c7d314 100644 --- a/rust/sys/teton/src/terminal.rs +++ b/rust/sys/teton/src/terminal.rs @@ -62,8 +62,10 @@ impl Terminal { } fn write_line(&mut self, line: &str) { - for (col, c) in line.chars().enumerate() { - self.console.write_char(c, self.row, col as u32); + let mut col = 0; + for c in line.chars() { + self.console.write_char(c, self.row, col); + col += 1; } self.row += 1 diff --git a/rust/sys/victoriafalls/src/lib.rs b/rust/sys/victoriafalls/src/lib.rs index a213a8b..b7b9ca3 100644 --- a/rust/sys/victoriafalls/src/lib.rs +++ b/rust/sys/victoriafalls/src/lib.rs @@ -12,8 +12,7 @@ static mut VFS_CLIENT: Option = None; fn get_client() -> &'static mut VFSClient { unsafe { - #[allow(static_mut_refs)] - if VFS_CLIENT.is_none() { + if let None = VFS_CLIENT { let endpoint_cap = yellowstone_yunq::from_init_endpoint() .get_endpoint(&yellowstone_yunq::GetEndpointRequest { endpoint_name: "victoriafalls".to_string(), @@ -22,7 +21,6 @@ fn get_client() -> &'static mut VFSClient { VFS_CLIENT = Some(VFSClient::new(Capability::take(endpoint_cap.endpoint))); } - #[allow(static_mut_refs)] VFS_CLIENT.as_mut().unwrap() } } diff --git a/rust/sys/victoriafalls/src/server.rs b/rust/sys/victoriafalls/src/server.rs index a901ea9..0c2edb8 100644 --- a/rust/sys/victoriafalls/src/server.rs +++ b/rust/sys/victoriafalls/src/server.rs @@ -35,7 +35,7 @@ impl VFSServerHandler for VictoriaFallsServerImpl { let mut inode_num = 2; // Start with root. - for path_token in tokens { + while let Some(path_token) = tokens.next() { inode_num = self.find_path_in_dir(inode_num, path_token)?; } @@ -57,7 +57,7 @@ impl VFSServerHandler for VictoriaFallsServerImpl { let mut inode_num = 2; // Start with root. - for path_token in tokens { + while let Some(path_token) = tokens.next() { inode_num = self.find_path_in_dir(inode_num, path_token)?; } diff --git a/rust/sys/yellowstone/src/server.rs b/rust/sys/yellowstone/src/server.rs index a6d5fa1..8cc4a4b 100644 --- a/rust/sys/yellowstone/src/server.rs +++ b/rust/sys/yellowstone/src/server.rs @@ -57,8 +57,9 @@ impl YellowstoneServerContext { pub fn wait(&self, service: &str) -> Result<(), ZError> { loop { - if self.service_map.lock().get(service).is_some() { - return Ok(()); + match self.service_map.lock().get(service) { + Some(_) => return Ok(()), + None => {} } self.registration_semaphore.wait().unwrap(); } diff --git a/rust/x86_64-acadia-os.json b/rust/x86_64-acadia-os.json index 1060335..6e6dec1 100644 --- a/rust/x86_64-acadia-os.json +++ b/rust/x86_64-acadia-os.json @@ -3,8 +3,8 @@ "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", "arch": "x86_64", "target-endian": "little", - "target-pointer-width": 64, - "target-c-int-width": 32, + "target-pointer-width": "64", + "target-c-int-width": "32", "os": "none", "executables": true, "linker-flavor": "ld.lld", diff --git a/scripts/build_image.sh b/scripts/build_image.sh index 9b39927..2fd5867 100644 --- a/scripts/build_image.sh +++ b/scripts/build_image.sh @@ -31,15 +31,15 @@ cleanup() { } trap cleanup EXIT -parted -s $dev mklabel gpt mkpart BIOS ext2 1MiB 2MiB mkpart EFI fat32 2MiB 11MiB mkpart ext2 11MiB 100% set 1 bios_grub on set 2 esp on -mkfs.fat -F 12 "${dev}p2" -mke2fs "${dev}p3" +parted -s $dev mklabel gpt mkpart EFI fat32 1MiB 10MiB mkpart ext2 10MiB 100% set 1 esp on +mkfs.fat -F 12 "${dev}p1" +mke2fs "${dev}p2" limine bios-install "${dev}" mkdir -p $EFI_DIR -mount "${dev}p2" $EFI_DIR +mount "${dev}p1" $EFI_DIR mkdir -p $EFI_DIR/EFI/BOOT cp /usr/share/limine/BOOTX64.EFI $EFI_DIR/EFI/BOOT @@ -52,7 +52,7 @@ cp $REPO_ROOT/sysroot/bin/denali $EFI_DIR/sys/denali cp $REPO_ROOT/sysroot/bin/victoriafalls $EFI_DIR/sys/victoriafalls mkdir -p $SYSROOT -mount "${dev}p3" $SYSROOT +mount "${dev}p2" $SYSROOT rsync -a "$REPO_ROOT/sysroot" $BUILD_DIR ls $SYSROOT diff --git a/yunq/rust/src/codegen.rs b/yunq/rust/src/codegen.rs index 9462f4b..7eefb66 100644 --- a/yunq/rust/src/codegen.rs +++ b/yunq/rust/src/codegen.rs @@ -122,7 +122,7 @@ fn parse_field(field: &Field) -> TokenStream { let rep_offset = buf.at::(yunq::message::field_offset(offset, #ind))?; let rep_len = buf.at::(yunq::message::field_offset(offset, #ind) + 4)?; - yunq::message::parse_repeated_message(buf, offset + rep_offset as usize, rep_len as usize, caps)? + yunq::message::parse_repeated_message(buf, offset + rep_offset as usize, rep_len as usize, &caps)? }; }, } @@ -174,7 +174,7 @@ fn generate_serialize(message: &Message) -> TokenStream { &self, buf: &mut yunq::ByteBuffer, offset: usize, - caps: &mut Vec, + caps: &mut alloc::vec::Vec, ) -> Result { let num_fields = #num_fields; let core_size: u32 = (yunq::message::MESSAGE_HEADER_SIZE + 8 * num_fields) as u32; @@ -183,10 +183,10 @@ fn generate_serialize(message: &Message) -> TokenStream { #(#serializers)* - buf.write_at(offset, yunq::message::MESSAGE_IDENT)?; + buf.write_at(offset + 0, yunq::message::MESSAGE_IDENT)?; buf.write_at(offset + 4, core_size)?; buf.write_at(offset + 8, next_extension)?; - buf.write_at(offset + 12, 0_u32)?; + buf.write_at(offset + 12, 0 as u32)?; Ok(next_extension as usize) } } @@ -200,12 +200,12 @@ fn generate_parse(message: &Message) -> TokenStream { fn parse( buf: &yunq::ByteBuffer, offset: usize, - caps: &[z_cap_t], + caps: &alloc::vec::Vec, ) -> Result where Self: Sized, { - if buf.at::(offset)? != yunq::message::MESSAGE_IDENT { + if buf.at::(offset + 0)? != yunq::message::MESSAGE_IDENT { mammoth::debug!("Expected IDENT at offest {:#x}, got {:#x}", offset, buf.at::(offset)?); return Err(ZError::INVALID_ARGUMENT); } @@ -303,7 +303,7 @@ fn generate_server_case(method: &Method) -> TokenStream { #id => { let req = #req::parse_from_request(byte_buffer, cap_buffer)?; let resp = self.handler.#name(req)?; - cap_buffer.clear(); + cap_buffer.resize(0, 0); let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?; Ok(resp_len) }, @@ -312,7 +312,7 @@ fn generate_server_case(method: &Method) -> TokenStream { #id => { let req = #req::parse_from_request(byte_buffer, cap_buffer)?; self.handler.#name(req)?; - cap_buffer.clear(); + cap_buffer.resize(0, 0); // TODO: Implement serialization for EmptyMessage so this is less hacky. yunq::message::serialize_error(byte_buffer, ZError::from(0)); Ok(0x10) @@ -321,7 +321,7 @@ fn generate_server_case(method: &Method) -> TokenStream { (None, Some(_)) => quote! { #id => { let resp = self.handler.#name()?; - cap_buffer.clear(); + cap_buffer.resize(0, 0); let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?; Ok(resp_len) }, @@ -403,7 +403,7 @@ fn generate_async_server_case(method: &Method) -> TokenStream { #id => { let req = #req::parse_from_request(byte_buffer, cap_buffer)?; let resp = self.handler.#name(req).await?; - cap_buffer.clear(); + cap_buffer.resize(0, 0); let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?; Ok(resp_len) }, @@ -412,7 +412,7 @@ fn generate_async_server_case(method: &Method) -> TokenStream { #id => { let req = #req::parse_from_request(byte_buffer, cap_buffer)?; self.handler.#name(req).await?; - cap_buffer.clear(); + cap_buffer.resize(0, 0); // TODO: Implement serialization for EmptyMessage so this is less hacky. yunq::message::serialize_error(byte_buffer, ZError::from(0)); Ok(0x10) @@ -421,7 +421,7 @@ fn generate_async_server_case(method: &Method) -> TokenStream { (None, Some(_)) => quote! { #id => { let resp = self.handler.#name().await?; - cap_buffer.clear(); + cap_buffer.resize(0, 0); let resp_len = resp.serialize_as_request(0, byte_buffer, cap_buffer)?; Ok(resp_len) }, @@ -547,7 +547,6 @@ pub fn generate_code(ast: &[Decl]) -> String { use alloc::vec::Vec; use mammoth::zion::z_cap_t; use mammoth::zion::ZError; - #[allow(unused_imports)] use yunq::ByteBuffer; use yunq::YunqMessage;