diff --git a/kernel/build b/kernel/build index 370fd49..a6e58e0 100755 --- a/kernel/build +++ b/kernel/build @@ -96,10 +96,13 @@ real_target=$(basename $real_target) if [[ $check = "true" ]]; then echo "[INFO] Checking target $target(with rust target of $real_target)" - cargo check --target "$real_target" --release -Zbuild-std=core,alloc --bin entrypoint_$target + cargo clippy --target "$real_target" --release -Zbuild-std=core,alloc --bin entrypoint_$target else echo "[INFO] Compiling target $target(with rust target of $real_target)" - cargo build --target "$real_target" --release -Zbuild-std=core,alloc --bin entrypoint_$target + echo "[INFO] Running clippy" + cargo clippy --target "$real_target" --release -Zbuild-std=core,alloc --bin entrypoint_$target + echo "[INFO] Building" + cargo build --target "$real_target" --release -Zbuild-std=core,alloc --bin entrypoint_$target 2>/dev/null cp "target/$(echo $real_target | sed 's/\.json//')/release/entrypoint_$target" kernel-$target if [[ "$CONFIG_BUILD_GRUB" = "true" ]]; then diff --git a/kernel/src/kernel/arch/example_impl/mod.rs b/kernel/src/kernel/arch/example_impl/mod.rs index 4d5650c..e9dc314 100644 --- a/kernel/src/kernel/arch/example_impl/mod.rs +++ b/kernel/src/kernel/arch/example_impl/mod.rs @@ -95,6 +95,16 @@ pub mod interrupts { } } } + + impl Default for IdtBuilder { + fn default() -> Self { + IdtBuilder { + vectors: [0; 256], + funcs: [MaybeUninit::uninit(); 256], + idx: 0, + } + } + } } pub mod output { diff --git a/kernel/src/kernel/arch/x86/constants.rs b/kernel/src/kernel/arch/x86/constants.rs index b6e57c8..2b378b8 100644 --- a/kernel/src/kernel/arch/x86/constants.rs +++ b/kernel/src/kernel/arch/x86/constants.rs @@ -1,5 +1,5 @@ //! Constants used throughout kernel code. -#![cfg(any(target_arch = "x86"))] +#![cfg(target_arch = "x86")] /// The assembly port number to output debug messages to. pub(super) const DEBUG_PORT: u16 = 0xE9; diff --git a/kernel/src/kernel/arch/x86/egatext.rs b/kernel/src/kernel/arch/x86/egatext.rs index e4a7a50..e41949c 100644 --- a/kernel/src/kernel/arch/x86/egatext.rs +++ b/kernel/src/kernel/arch/x86/egatext.rs @@ -1,5 +1,5 @@ //! Stuff for writing and reading to the EGA text buffer. -#![cfg(any(target_arch = "x86"))] +#![cfg(target_arch = "x86")] use crate::display::Color; @@ -109,6 +109,6 @@ impl FramebufferInfo { super::ports::outb(0x3D4, 0x0E); addr |= (super::ports::inb(0x3D5) as u32) << 8; - return (addr % self.width, addr / self.width); + (addr % self.width, addr / self.width) } } diff --git a/kernel/src/kernel/arch/x86/gdt.rs b/kernel/src/kernel/arch/x86/gdt.rs index 73c5a8e..2fb12c4 100644 --- a/kernel/src/kernel/arch/x86/gdt.rs +++ b/kernel/src/kernel/arch/x86/gdt.rs @@ -1,4 +1,5 @@ //! GDT initalization. +#![cfg(target_arch = "x86")] use core::alloc::Layout; diff --git a/kernel/src/kernel/arch/x86/interrupts.rs b/kernel/src/kernel/arch/x86/interrupts.rs index 5e6d9b3..b61eaf6 100644 --- a/kernel/src/kernel/arch/x86/interrupts.rs +++ b/kernel/src/kernel/arch/x86/interrupts.rs @@ -1,5 +1,5 @@ //! Provides interrupt-related functions -#![cfg(any(target_arch = "x86"))] +#![cfg(target_arch = "x86")] #![allow(static_mut_refs)] use core::{ @@ -69,21 +69,20 @@ pub fn restore_irq(flags: PoppedInterrupts) { } /// The IDTR. Used internally in [load_idt]. -#[repr(packed)] -#[repr(C)] -struct IDTR { +#[repr(C, packed)] +struct Idtr { base: *const u8, size: usize, } -unsafe impl Send for IDTR {} -unsafe impl Sync for IDTR {} +unsafe impl Send for Idtr {} +unsafe impl Sync for Idtr {} /// Loads an interrupt descriptor table. fn load_idt(base: *const u8, size: usize) { - static mut IDTR: MaybeUninit = MaybeUninit::uninit(); + static mut IDTR: MaybeUninit = MaybeUninit::uninit(); unsafe { - IDTR.write(IDTR { base, size }); + IDTR.write(Idtr { base, size }); } unsafe { asm!("lidt {}", in(reg) IDTR.as_ptr() as usize) } } @@ -148,3 +147,14 @@ impl IdtBuilder { } } } + +impl Default for IdtBuilder { + fn default() -> Self { + IdtBuilder { + vectors: [0; 256], + funcs: [MaybeUninit::uninit(); 256], + user_callable: [false; 256], + idx: 0, + } + } +} diff --git a/kernel/src/kernel/arch/x86/memory.rs b/kernel/src/kernel/arch/x86/memory.rs index 95384de..a4ff9ee 100644 --- a/kernel/src/kernel/arch/x86/memory.rs +++ b/kernel/src/kernel/arch/x86/memory.rs @@ -1,4 +1,5 @@ //! Hardware-level memory sections. Unimplemented for certain hardware, x86 implements with GDT. +#![cfg(target_arch = "x86")] use core::arch::asm; diff --git a/kernel/src/kernel/arch/x86/mod.rs b/kernel/src/kernel/arch/x86/mod.rs index 1515851..3b6ed06 100644 --- a/kernel/src/kernel/arch/x86/mod.rs +++ b/kernel/src/kernel/arch/x86/mod.rs @@ -1,5 +1,5 @@ //! General x86 functions -#![cfg(any(target_arch = "x86"))] +#![cfg(target_arch = "x86")] use core::arch::asm; @@ -13,7 +13,7 @@ pub mod ports; mod constants; -pub(self) use constants::*; +use constants::*; use interrupts::{pop_irq, restore_irq}; use ports::{inb, outb}; diff --git a/kernel/src/kernel/arch/x86/output.rs b/kernel/src/kernel/arch/x86/output.rs index d136571..f7321ec 100644 --- a/kernel/src/kernel/arch/x86/output.rs +++ b/kernel/src/kernel/arch/x86/output.rs @@ -1,5 +1,5 @@ //! Functions to output to various things -#![cfg(any(target_arch = "x86"))] +#![cfg(target_arch = "x86")] use super::ports; use paste::paste; diff --git a/kernel/src/kernel/arch/x86/paging.rs b/kernel/src/kernel/arch/x86/paging.rs index e52361f..ce0612d 100644 --- a/kernel/src/kernel/arch/x86/paging.rs +++ b/kernel/src/kernel/arch/x86/paging.rs @@ -1,4 +1,5 @@ //! Functions and types related to paging. +#![cfg(target_arch = "x86")] use core::arch::asm; diff --git a/kernel/src/kernel/arch/x86/ports.rs b/kernel/src/kernel/arch/x86/ports.rs index 9f8d35e..4ef2a2e 100644 --- a/kernel/src/kernel/arch/x86/ports.rs +++ b/kernel/src/kernel/arch/x86/ports.rs @@ -1,5 +1,5 @@ //! Provides utilities for interacting with assembly ports -#![cfg(any(target_arch = "x86"))] +#![cfg(target_arch = "x86")] use core::arch::asm; diff --git a/kernel/src/kernel/boot.rs b/kernel/src/kernel/boot.rs index 7cba67e..a62123e 100644 --- a/kernel/src/kernel/boot.rs +++ b/kernel/src/kernel/boot.rs @@ -126,7 +126,7 @@ impl core::iter::Iterator for MemoryMap { type Item = MemoryMapping; fn next(&mut self) -> Option { self.idx += 1; - if self.sections.len() <= self.idx - 1 { + if self.sections.len() < self.idx { self.reset_iter(); return None; } diff --git a/kernel/src/kernel/cfg.rs b/kernel/src/kernel/cfg.rs index ff4561f..38ce8eb 100644 --- a/kernel/src/kernel/cfg.rs +++ b/kernel/src/kernel/cfg.rs @@ -7,7 +7,7 @@ macro_rules! cfg_int { paste::paste! { { let cfg = env!($cfg).as_bytes(); - crate::[< str_as_ $type >](cfg) + $crate::[< str_as_ $type >](cfg) } } }; diff --git a/kernel/src/kernel/mem.rs b/kernel/src/kernel/mem.rs index 36f7c3f..2c8258c 100644 --- a/kernel/src/kernel/mem.rs +++ b/kernel/src/kernel/mem.rs @@ -303,7 +303,7 @@ impl<'a> MemoryMapAlloc<'a> { let mut i = 0; while i < num_allocs { let current = unsafe { - &mut *((self.allocations as usize + size_of::() * (i as usize)) + &mut *((self.allocations as usize + size_of::() * (i as usize)) as *mut Allocation) }; @@ -524,7 +524,7 @@ unsafe impl<'a> Allocator for MemoryMapAlloc<'a> { if alloc.used && alloc.addr == addr { // Zero the memory unsafe { core::ptr::write_bytes(addr as *mut u8, 0, alloc.len as usize) }; - + // Mark as free alloc.used = false; found = true; @@ -664,4 +664,4 @@ unsafe impl<'a> GlobalAlloc for MemoryMapAlloc<'a> { /// The last status of memory allocation or deallocation for a [MemoryMapAlloc]. /// This can be used for more insight to why an allocation or deallocation failed. -pub static mut LAST_MEMMAP_ERR: Result<(), crate::Error<'static>> = Ok(()); \ No newline at end of file +pub static mut LAST_MEMMAP_ERR: Result<(), crate::Error<'static>> = Ok(()); diff --git a/kernel/src/kernel/mod.rs b/kernel/src/kernel/mod.rs index ef47a04..820981a 100644 --- a/kernel/src/kernel/mod.rs +++ b/kernel/src/kernel/mod.rs @@ -1,6 +1,7 @@ //! This provides raw methods for internal kernel usage for the Aphrodite kernel. See aphrodite_user for userspace. #![no_std] #![warn(missing_docs)] +#![warn(clippy::missing_docs_in_private_items)] #![warn(rustdoc::missing_crate_level_docs)] #![deny(rustdoc::invalid_html_tags)] #![deny(rustdoc::invalid_rust_codeblocks)]