diff --git a/.reuse/dep5 b/.reuse/dep5 index afa9bcdde..0e931c6e7 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -17,6 +17,7 @@ Files: hacking/nix/scope/capdl-tool/capDL-tool.nix hacking/nix/scope/capdl-tool/base-compat-0-12-2.nix hacking/nix/scope/capdl-tool/base-compat-batteries-0-12-2.nix + hacking/nix/scope/capdl-tool/MissingH-1.5.0.1.nix Copyright: 2023, Colias Group, LLC License: BSD-2-Clause diff --git a/Cargo.lock b/Cargo.lock index 55a4a1c89..3a84d7181 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2041,6 +2041,9 @@ dependencies = [ [[package]] name = "sel4-bitfield-ops" version = "0.1.0" +dependencies = [ + "rustc_version", +] [[package]] name = "sel4-bitfield-parser" diff --git a/Makefile b/Makefile index 3144d1129..18d29e439 100644 --- a/Makefile +++ b/Makefile @@ -12,8 +12,8 @@ ifneq ($(J),) jobs_args := -j$(J) endif -ifneq ($(CORES),) - cores_args := --cores $(CORES) +ifneq ($(C),) + cores_args := --cores $(C) endif nix_args := $(keep_going_args) $(jobs_args) $(cores_args) @@ -124,7 +124,13 @@ witness-fast-tests: .PHONY: check-kani-proofs check-kani-proofs: - $(run_in_nix_shell) "cargo kani -p sel4-bitfield-ops" + $(run_in_nix_shell) "\ + cargo kani \ + --enable-unstable \ + --output-format=terse \ + $(jobs_args) \ + -p sel4-bitfield-ops \ + " .PHONY: everything-except-non-incremental everything-except-non-incremental: diff --git a/crates/examples/root-task/example-root-task-without-runtime/src/main.rs b/crates/examples/root-task/example-root-task-without-runtime/src/main.rs index 6f635370a..f0e86b3c4 100644 --- a/crates/examples/root-task/example-root-task-without-runtime/src/main.rs +++ b/crates/examples/root-task/example-root-task-without-runtime/src/main.rs @@ -225,6 +225,7 @@ cfg_if::cfg_if! { unsafe extern "C" fn __rust_entry(bootinfo: *const sel4::BootInfo) -> ! { let bootinfo = sel4::BootInfoPtr::new(bootinfo); match main(&bootinfo) { + #[allow(unreachable_patterns)] Ok(absurdity) => match absurdity {}, Err(err) => panic!("Error: {}", err), } diff --git a/crates/examples/root-task/serial-device/src/main.rs b/crates/examples/root-task/serial-device/src/main.rs index cbdba1f3e..5fa3f06d6 100644 --- a/crates/examples/root-task/serial-device/src/main.rs +++ b/crates/examples/root-task/serial-device/src/main.rs @@ -189,7 +189,7 @@ struct FreePagePlaceHolder(#[allow(dead_code)] [u8; GRANULE_SIZE]); static mut FREE_PAGE_PLACEHOLDER: FreePagePlaceHolder = FreePagePlaceHolder([0; GRANULE_SIZE]); fn init_free_page_addr(bootinfo: &sel4::BootInfo) -> usize { - let addr = unsafe { ptr::addr_of!(FREE_PAGE_PLACEHOLDER) as usize }; + let addr = ptr::addr_of!(FREE_PAGE_PLACEHOLDER) as usize; get_user_image_frame_slot(bootinfo, addr) .cap() .frame_unmap() @@ -204,7 +204,7 @@ fn get_user_image_frame_slot( extern "C" { static __executable_start: usize; } - let user_image_addr = unsafe { ptr::addr_of!(__executable_start) as usize }; + let user_image_addr = ptr::addr_of!(__executable_start) as usize; bootinfo .user_image_frames() .index(addr / GRANULE_SIZE - user_image_addr / GRANULE_SIZE) diff --git a/crates/examples/root-task/spawn-task/child/src/runtime.rs b/crates/examples/root-task/spawn-task/child/src/runtime.rs index 4779aacc4..86876a073 100644 --- a/crates/examples/root-task/spawn-task/child/src/runtime.rs +++ b/crates/examples/root-task/spawn-task/child/src/runtime.rs @@ -51,6 +51,7 @@ fn inner_entry() -> ! { } match catch_unwind(main) { + #[allow(unreachable_patterns)] Ok(never) => never, Err(_) => abort!("main() panicked"), } @@ -60,9 +61,7 @@ fn get_ipc_buffer() -> *mut sel4::IpcBuffer { extern "C" { static _end: usize; } - unsafe { - (ptr::addr_of!(_end) as usize) - .next_multiple_of(sel4::cap_type::Granule::FRAME_OBJECT_TYPE.bytes()) - as *mut sel4::IpcBuffer - } + (ptr::addr_of!(_end) as usize) + .next_multiple_of(sel4::cap_type::Granule::FRAME_OBJECT_TYPE.bytes()) + as *mut sel4::IpcBuffer } diff --git a/crates/examples/root-task/spawn-task/src/main.rs b/crates/examples/root-task/spawn-task/src/main.rs index 3419c80f8..5f31144bf 100644 --- a/crates/examples/root-task/spawn-task/src/main.rs +++ b/crates/examples/root-task/spawn-task/src/main.rs @@ -100,7 +100,7 @@ struct FreePagePlaceHolder(#[allow(dead_code)] [u8; GRANULE_SIZE]); static mut FREE_PAGE_PLACEHOLDER: FreePagePlaceHolder = FreePagePlaceHolder([0; GRANULE_SIZE]); fn init_free_page_addr(bootinfo: &sel4::BootInfo) -> usize { - let addr = unsafe { ptr::addr_of!(FREE_PAGE_PLACEHOLDER) as usize }; + let addr = ptr::addr_of!(FREE_PAGE_PLACEHOLDER) as usize; get_user_image_frame_slot(bootinfo, addr) .cap() .frame_unmap() @@ -115,7 +115,7 @@ fn get_user_image_frame_slot( extern "C" { static __executable_start: usize; } - let user_image_addr = unsafe { ptr::addr_of!(__executable_start) as usize }; + let user_image_addr = ptr::addr_of!(__executable_start) as usize; bootinfo .user_image_frames() .index(addr / GRANULE_SIZE - user_image_addr / GRANULE_SIZE) diff --git a/crates/examples/root-task/spawn-thread/src/main.rs b/crates/examples/root-task/spawn-thread/src/main.rs index 67fb6c5cf..dd6e0c35d 100644 --- a/crates/examples/root-task/spawn-thread/src/main.rs +++ b/crates/examples/root-task/spawn-thread/src/main.rs @@ -282,7 +282,7 @@ fn get_user_image_frame_slot( extern "C" { static __executable_start: usize; } - let user_image_addr = unsafe { ptr::addr_of!(__executable_start) as usize }; + let user_image_addr = ptr::addr_of!(__executable_start) as usize; bootinfo .user_image_frames() .index(addr / GRANULE_SIZE - user_image_addr / GRANULE_SIZE) diff --git a/crates/private/tests/root-task/dafny/core/build.rs b/crates/private/tests/root-task/dafny/core/build.rs index e0cec6fb1..d5303dd66 100644 --- a/crates/private/tests/root-task/dafny/core/build.rs +++ b/crates/private/tests/root-task/dafny/core/build.rs @@ -14,7 +14,7 @@ fn main() { let translated_src = env::var(TRANSLATED_ENV).unwrap(); let out_dir = env::var("OUT_DIR").unwrap(); let translated_dst = PathBuf::from(&out_dir).join("translated.rs"); - fs::copy(&translated_src, &translated_dst).unwrap(); + fs::copy(&translated_src, translated_dst).unwrap(); println!("cargo:rerun-if-env-changed={TRANSLATED_ENV}"); println!("cargo:rerun-if-changed={}", translated_src); diff --git a/crates/sel4-async/block-io/src/lib.rs b/crates/sel4-async/block-io/src/lib.rs index c1fa5d462..049b2eaa0 100644 --- a/crates/sel4-async/block-io/src/lib.rs +++ b/crates/sel4-async/block-io/src/lib.rs @@ -467,6 +467,7 @@ impl> ByteIO for SliceByteIO { Operation::Read { buf, .. } => { buf.copy_from_slice(&self.inner().as_ref()[offset..][..buf.len()]); } + #[allow(unreachable_patterns)] Operation::Write { witness, .. } => witness.absurd(), } Ok(()) diff --git a/crates/sel4-backtrace/embedded-debug-info/cli/src/bin/sel4-embed-debug-info.rs b/crates/sel4-backtrace/embedded-debug-info/cli/src/bin/sel4-embed-debug-info.rs index f501747eb..42a562f54 100644 --- a/crates/sel4-backtrace/embedded-debug-info/cli/src/bin/sel4-embed-debug-info.rs +++ b/crates/sel4-backtrace/embedded-debug-info/cli/src/bin/sel4-embed-debug-info.rs @@ -65,7 +65,7 @@ fn with_bit_width>( image_elf: &object::read::elf::ElfFile, content: &[u8], ) -> Vec { - let mut builder = Builder::new(&image_elf).unwrap(); + let mut builder = Builder::new(image_elf).unwrap(); builder.discard_p_align(true); diff --git a/crates/sel4-capdl-initializer/add-spec/src/render_elf.rs b/crates/sel4-capdl-initializer/add-spec/src/render_elf.rs index ce3796299..2bf0b8482 100644 --- a/crates/sel4-capdl-initializer/add-spec/src/render_elf.rs +++ b/crates/sel4-capdl-initializer/add-spec/src/render_elf.rs @@ -20,7 +20,7 @@ impl<'a> RenderElfArgs<'a> { &self, orig_elf: &object::read::elf::ElfFile, ) -> Vec { - let mut builder = Builder::new(&orig_elf).unwrap(); + let mut builder = Builder::new(orig_elf).unwrap(); builder.discard_p_align(true); diff --git a/crates/sel4-generate-target-specs/src/main.rs b/crates/sel4-generate-target-specs/src/main.rs index cbfeeaf80..ef0494012 100644 --- a/crates/sel4-generate-target-specs/src/main.rs +++ b/crates/sel4-generate-target-specs/src/main.rs @@ -35,6 +35,7 @@ enum Arch { } #[derive(Debug, Copy, Clone, PartialEq, Eq)] +#[allow(clippy::upper_case_acronyms)] enum RiscVArch { IMAC, IMAFC, @@ -194,15 +195,15 @@ impl Arch { } fn all() -> Vec { - let mut v = vec![]; - v.push(Self::AArch64); - v.push(Self::Armv7a); - v.push(Self::RiscV64(RiscVArch::IMAC)); - v.push(Self::RiscV64(RiscVArch::GC)); - v.push(Self::RiscV32(RiscVArch::IMAC)); - v.push(Self::RiscV32(RiscVArch::IMAFC)); - v.push(Self::X86_64); - v + vec![ + Self::AArch64, + Self::Armv7a, + Self::RiscV64(RiscVArch::IMAC), + Self::RiscV64(RiscVArch::GC), + Self::RiscV32(RiscVArch::IMAC), + Self::RiscV32(RiscVArch::IMAFC), + Self::X86_64, + ] } } diff --git a/crates/sel4-kernel-loader/add-payload/src/render_elf.rs b/crates/sel4-kernel-loader/add-payload/src/render_elf.rs index 222af59dc..55605e99b 100644 --- a/crates/sel4-kernel-loader/add-payload/src/render_elf.rs +++ b/crates/sel4-kernel-loader/add-payload/src/render_elf.rs @@ -15,7 +15,7 @@ where { let orig_elf_file = &object::read::elf::ElfFile::::parse(orig_elf_buffer).unwrap(); - let mut builder = Builder::new(&orig_elf_file).unwrap(); + let mut builder = Builder::new(orig_elf_file).unwrap(); builder.discard_p_align(true); diff --git a/crates/sel4-microkit/base/src/symbols.rs b/crates/sel4-microkit/base/src/symbols.rs index d92de2867..a7cf6a48c 100644 --- a/crates/sel4-microkit/base/src/symbols.rs +++ b/crates/sel4-microkit/base/src/symbols.rs @@ -137,5 +137,5 @@ pub fn ipc_buffer_ptr() -> *mut sel4::IpcBuffer { static mut __sel4_ipc_buffer_obj: sel4::IpcBuffer; } - unsafe { ptr::addr_of_mut!(__sel4_ipc_buffer_obj) } + ptr::addr_of_mut!(__sel4_ipc_buffer_obj) } diff --git a/crates/sel4-microkit/driver-adapters/src/net/driver.rs b/crates/sel4-microkit/driver-adapters/src/net/driver.rs index f3986b7f5..dc2a0bedf 100644 --- a/crates/sel4-microkit/driver-adapters/src/net/driver.rs +++ b/crates/sel4-microkit/driver-adapters/src/net/driver.rs @@ -75,7 +75,7 @@ impl Handler for Handl self.client_region .as_mut_ptr() .index(buf_range) - .copy_from_slice(&rx_buf); + .copy_from_slice(rx_buf); }); self.rx_ring_buffers diff --git a/crates/sel4-microkit/src/entry.rs b/crates/sel4-microkit/src/entry.rs index cec94cd95..ea06c7bd0 100644 --- a/crates/sel4-microkit/src/entry.rs +++ b/crates/sel4-microkit/src/entry.rs @@ -65,6 +65,7 @@ macro_rules! declare_init { #[allow(clippy::missing_safety_doc)] pub fn run_main(init: impl FnOnce() -> T + UnwindSafe) -> ! { let result = catch_unwind(|| match init().run() { + #[allow(unreachable_patterns)] Ok(absurdity) => match absurdity {}, Err(err) => err, }); diff --git a/crates/sel4-panicking/build.rs b/crates/sel4-panicking/build.rs index 1b110f35e..5ff5e56e6 100644 --- a/crates/sel4-panicking/build.rs +++ b/crates/sel4-panicking/build.rs @@ -6,20 +6,34 @@ use core::cmp::Reverse; -// Determine whether rustc includes https://github.com/rust-lang/rust/pull/121598 +// Determine whether rustc includes the following changes: +// - https://blog.rust-lang.org/2024/05/06/check-cfg.html +// - https://github.com/rust-lang/rust/pull/121598 +// - https://github.com/rust-lang/rust/pull/126732 fn main() { - let version_meta = rustc_version::version_meta().unwrap(); - let semver = version_meta.semver; - let commit_date = order_date(version_meta.commit_date); - let key = (semver.major, semver.minor, semver.patch, commit_date); - let first_with_change = (1, 78, 0, order_date(Some("2024-02-28".to_owned()))); - if key < first_with_change { + let key = { + let version_meta = rustc_version::version_meta().unwrap(); + let semver = version_meta.semver; + let commit_date = order_date(version_meta.commit_date); + (semver.major, semver.minor, semver.patch, commit_date) + }; + let check_cfg_required = (1, 80, 0, order_date(Some("2024-05-05".to_owned()))); + let unwind_intrinsic_renamed = (1, 78, 0, order_date(Some("2024-02-28".to_owned()))); + let panic_info_message_stabilized = (1, 81, 0, order_date(Some("2024-07-01".to_owned()))); + if key >= check_cfg_required { + println!("cargo:rustc-check-cfg=cfg(catch_unwind_intrinsic_still_named_try)"); + println!("cargo:rustc-check-cfg=cfg(panic_info_message_stable)"); + } + if key < unwind_intrinsic_renamed { println!("cargo:rustc-cfg=catch_unwind_intrinsic_still_named_try"); } + if key >= panic_info_message_stabilized { + println!("cargo:rustc-cfg=panic_info_message_stable"); + } } -// assume no build date means more recent +// no build date means more recent fn order_date(date: Option) -> Reverse>> { Reverse(date.map(Reverse)) } diff --git a/crates/sel4-panicking/src/lib.rs b/crates/sel4-panicking/src/lib.rs index a16fd34a9..33a1563d1 100644 --- a/crates/sel4-panicking/src/lib.rs +++ b/crates/sel4-panicking/src/lib.rs @@ -9,8 +9,8 @@ #![feature(core_intrinsics)] #![feature(lang_items)] #![feature(panic_can_unwind)] -#![feature(panic_info_message)] #![feature(thread_local)] +#![cfg_attr(not(panic_info_message_stable), feature(panic_info_message))] #![allow(internal_features)] #[cfg(feature = "alloc")] @@ -21,6 +21,9 @@ use core::mem::ManuallyDrop; use core::panic::Location; use core::panic::{PanicInfo, UnwindSafe}; +#[cfg(panic_info_message_stable)] +use core::panic::PanicMessage; + use cfg_if::cfg_if; use sel4_panicking_env::abort; @@ -38,9 +41,12 @@ use strategy::{panic_cleanup, start_panic}; pub use hook::{set_hook, PanicHook}; pub use payload::{Payload, SmallPayload, UpcastIntoPayload, SMALL_PAYLOAD_MAX_SIZE}; +#[cfg(not(panic_info_message_stable))] +type PanicMessage<'a> = &'a fmt::Arguments<'a>; + pub struct ExternalPanicInfo<'a> { payload: Payload, - message: Option<&'a fmt::Arguments<'a>>, + message: Option>, location: Option<&'a Location<'a>>, can_unwind: bool, } @@ -50,8 +56,8 @@ impl<'a> ExternalPanicInfo<'a> { &self.payload } - pub fn message(&self) -> Option<&fmt::Arguments> { - self.message + pub fn message(&self) -> Option<&PanicMessage> { + self.message.as_ref() } pub fn location(&self) -> Option<&Location> { @@ -66,14 +72,14 @@ impl<'a> ExternalPanicInfo<'a> { impl fmt::Display for ExternalPanicInfo<'_> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str("panicked at ")?; - if let Some(location) = self.location { + if let Some(location) = self.location() { location.fmt(f)?; } else { f.write_str("unknown location")?; } - if let Some(message) = self.message { + if let Some(message) = self.message() { f.write_str(":\n")?; - f.write_fmt(*message)?; + message.fmt(f)?; } Ok(()) } @@ -83,6 +89,9 @@ impl fmt::Display for ExternalPanicInfo<'_> { fn panic(info: &PanicInfo) -> ! { do_panic(ExternalPanicInfo { payload: NoPayload.upcast_into_payload(), + #[cfg(panic_info_message_stable)] + message: Some(info.message()), + #[cfg(not(panic_info_message_stable))] message: info.message(), location: info.location(), can_unwind: info.can_unwind(), diff --git a/crates/sel4-reset/cli/src/main.rs b/crates/sel4-reset/cli/src/main.rs index ac0afd2b0..84e677467 100644 --- a/crates/sel4-reset/cli/src/main.rs +++ b/crates/sel4-reset/cli/src/main.rs @@ -48,7 +48,7 @@ where let persistent_section = elf.section_by_name(".persistent"); - let mut builder = Builder::empty(&elf); + let mut builder = Builder::empty(elf); let mut regions_builder = RegionsBuilder::::new(); @@ -82,7 +82,7 @@ where } } - assert!(!(persistent_section.is_some() && !persistent_section_placed)); + assert!(persistent_section.is_none() || persistent_section_placed); let regions = regions_builder.build(endian); diff --git a/crates/sel4-root-task/src/termination.rs b/crates/sel4-root-task/src/termination.rs index 80f7c0965..9be7a38cf 100644 --- a/crates/sel4-root-task/src/termination.rs +++ b/crates/sel4-root-task/src/termination.rs @@ -33,6 +33,7 @@ impl Termination for Result { fn report(self) -> Self::Error { match self { + #[allow(unreachable_patterns)] Ok(absurdity) => match absurdity {}, Err(err) => err, } @@ -44,6 +45,7 @@ impl Termination for Result { fn report(self) -> Self::Error { match self { + #[allow(unreachable_patterns)] Ok(absurdity) => match absurdity {}, Err(err) => err, } diff --git a/crates/sel4-shared-ring-buffer/smoltcp/src/lib.rs b/crates/sel4-shared-ring-buffer/smoltcp/src/lib.rs index 47efe486c..fe3ff1328 100644 --- a/crates/sel4-shared-ring-buffer/smoltcp/src/lib.rs +++ b/crates/sel4-shared-ring-buffer/smoltcp/src/lib.rs @@ -36,6 +36,7 @@ impl Clone for DeviceImpl { } impl DeviceImpl { + #[allow(clippy::too_many_arguments)] pub fn new( raw_mutex: R, dma_region: ExternallySharedRef<'static, [u8]>, diff --git a/crates/sel4-sync/src/mutex.rs b/crates/sel4-sync/src/mutex.rs index bbeb260e2..a4ca067c6 100644 --- a/crates/sel4-sync/src/mutex.rs +++ b/crates/sel4-sync/src/mutex.rs @@ -44,6 +44,7 @@ pub trait MutexSyncOps { unsafe impl lock_api::RawMutex for GenericRawMutex { type GuardMarker = lock_api::GuardNoSend; // TODO + #[allow(clippy::declare_interior_mutable_const)] const INIT: Self = unimplemented!(); fn lock(&self) { diff --git a/crates/sel4-synthetic-elf/src/lib.rs b/crates/sel4-synthetic-elf/src/lib.rs index e7026cfea..d26a368dd 100644 --- a/crates/sel4-synthetic-elf/src/lib.rs +++ b/crates/sel4-synthetic-elf/src/lib.rs @@ -46,7 +46,7 @@ impl<'a: 'data, 'data, T: object::read::elf::FileHeader, R: ReadRef<'data>> base_elf_file: &'a object::read::elf::ElfFile<'data, T, R>, ) -> Result> { let mut this = Self::empty(base_elf_file); - this.segments.add_segments_from_phdrs(&this.base_elf_file)?; + this.segments.add_segments_from_phdrs(this.base_elf_file)?; Ok(this) } @@ -69,12 +69,12 @@ impl<'a: 'data, 'data, T: object::read::elf::FileHeader, R: ReadRef<'data>> pub fn patch_bytes(&mut self, name: &str, value: Vec) -> Result> { Ok(self .patches - .add_bytes_via_symbol(&self.base_elf_file, name, value)?) + .add_bytes_via_symbol(self.base_elf_file, name, value)?) } pub fn patch(&mut self, name: &str, value: impl PatchValue) -> Result> { Ok(self.patches.add_via_symbol( - &self.base_elf_file, + self.base_elf_file, name, value, self.base_elf_file.endian(), @@ -111,7 +111,7 @@ impl<'a: 'data, 'data, T: object::read::elf::FileHeader, R: ReadRef<'data>> pub fn build(&self) -> Result, Box> { let mut buf = self .segments - .build_using_ehdr(&self.base_elf_file, self.discard_p_align)?; + .build_using_ehdr(self.base_elf_file, self.discard_p_align)?; self.patches.apply(&mut buf).unwrap(); Ok(buf) } diff --git a/crates/sel4-synthetic-elf/src/patches.rs b/crates/sel4-synthetic-elf/src/patches.rs index ca8a99ef1..d4b4a5ba7 100644 --- a/crates/sel4-synthetic-elf/src/patches.rs +++ b/crates/sel4-synthetic-elf/src/patches.rs @@ -11,6 +11,7 @@ use object::read::ReadRef; use object::{Endian, File, Object, ObjectSegment, ObjectSymbol}; use thiserror::Error; +#[derive(Default)] pub struct Patches { patches: Vec<(u64, Vec)>, } @@ -74,7 +75,7 @@ impl Patches { .zip(self.patches.iter().map(|(_vaddr, value)| value)) { elf_file_data[usize::try_from(*offset_into_file).unwrap()..][..value.len()] - .copy_from_slice(&value); + .copy_from_slice(value); } Ok(()) @@ -92,7 +93,7 @@ impl Patches { .find_map(|segment| { let start = segment.address(); let end = start + segment.size(); - if (start..end).contains(&vaddr) { + if (start..end).contains(vaddr) { let offset_in_segment = vaddr - start; let (file_start, file_size) = segment.file_range(); if offset_in_segment + u64::try_from(value.len()).unwrap() <= file_size @@ -102,9 +103,10 @@ impl Patches { } None }) - .ok_or_else(|| { - PatchesApplyError::AddrRangeNotMappedWithData(*vaddr, value.len()) - }) + .ok_or(PatchesApplyError::AddrRangeNotMappedWithData( + *vaddr, + value.len(), + )) }) .collect::, PatchesApplyError>>() } diff --git a/crates/sel4-synthetic-elf/src/segments.rs b/crates/sel4-synthetic-elf/src/segments.rs index 8e46d1400..a5c2bfe66 100644 --- a/crates/sel4-synthetic-elf/src/segments.rs +++ b/crates/sel4-synthetic-elf/src/segments.rs @@ -14,6 +14,7 @@ use object::read::ReadRef; use object::{Endian, Endianness, Object}; use thiserror::Error; +#[derive(Default)] pub struct Segments<'a> { segments: Vec>, } @@ -173,6 +174,7 @@ impl<'a> Segment<'a> { } } +#[allow(clippy::enum_variant_names)] #[derive(Error, Debug)] pub enum SegmentsError { ReadError(object::read::Error), diff --git a/crates/sel4/bitfield-ops/Cargo.nix b/crates/sel4/bitfield-ops/Cargo.nix index b09917c91..6faedbead 100644 --- a/crates/sel4/bitfield-ops/Cargo.nix +++ b/crates/sel4/bitfield-ops/Cargo.nix @@ -4,8 +4,11 @@ # SPDX-License-Identifier: BSD-2-Clause # -{ mk }: +{ mk, versions }: mk { package.name = "sel4-bitfield-ops"; + build-dependencies = { + inherit (versions) rustc_version; + }; } diff --git a/crates/sel4/bitfield-ops/Cargo.toml b/crates/sel4/bitfield-ops/Cargo.toml index 5d5920187..30ff03652 100644 --- a/crates/sel4/bitfield-ops/Cargo.toml +++ b/crates/sel4/bitfield-ops/Cargo.toml @@ -15,3 +15,6 @@ version = "0.1.0" authors = ["Nick Spinale "] edition = "2021" license = "BSD-2-Clause" + +[build-dependencies] +rustc_version = "0.4.0" diff --git a/crates/sel4/bitfield-ops/build.rs b/crates/sel4/bitfield-ops/build.rs new file mode 100644 index 000000000..ea87b9449 --- /dev/null +++ b/crates/sel4/bitfield-ops/build.rs @@ -0,0 +1,27 @@ +// +// Copyright 2024, Colias Group, LLC +// +// SPDX-License-Identifier: BSD-2-Clause +// + +use core::cmp::Reverse; + +// Determine whether rustc includes https://github.com/rust-lang/rust/pull/121598 + +fn main() { + let key = { + let version_meta = rustc_version::version_meta().unwrap(); + let semver = version_meta.semver; + let commit_date = order_date(version_meta.commit_date); + (semver.major, semver.minor, semver.patch, commit_date) + }; + let check_cfg_required = (1, 80, 0, order_date(Some("2024-05-05".to_owned()))); + if key >= check_cfg_required { + println!("cargo:rustc-check-cfg=cfg(kani)"); + } +} + +// no build date means more recent +fn order_date(date: Option) -> Reverse>> { + Reverse(date.map(Reverse)) +} diff --git a/crates/sel4/bitfield-parser/src/lib.rs b/crates/sel4/bitfield-parser/src/lib.rs index 558326fa0..744f9a662 100644 --- a/crates/sel4/bitfield-parser/src/lib.rs +++ b/crates/sel4/bitfield-parser/src/lib.rs @@ -4,8 +4,6 @@ // SPDX-License-Identifier: BSD-2-Clause // -#![allow(clippy::empty_docs)] // for #[derive(Parser)] - use pest::{iterators::Pair, Parser}; use pest_derive::Parser; use regex::Regex; diff --git a/crates/sel4/build-env/src/lib.rs b/crates/sel4/build-env/src/lib.rs index 42b51d6b2..f3ebda9b1 100644 --- a/crates/sel4/build-env/src/lib.rs +++ b/crates/sel4/build-env/src/lib.rs @@ -19,9 +19,8 @@ fn get_asserting_valid_unicode(var: &str) -> Option { } }) .ok() - .map(|val| { + .inspect(|_| { println!("cargo:rerun-if-env-changed={var}"); - val }) } @@ -40,9 +39,8 @@ pub fn try_get_with_sel4_prefix_relative_fallback( get_asserting_valid_unicode(var) .map(PathBuf::from) .or_else(|| get_sel4_prefix().map(|fallback| fallback.join(relative_path_from_fallback))) - .map(|path| { + .inspect(|path| { println!("cargo:rerun-if-changed={}", path.display()); - path }) } @@ -56,9 +54,8 @@ pub fn get_libsel4_include_dirs() -> impl Iterator { .or_else(|| get_sel4_prefix().map(|sel4_prefix| vec![sel4_prefix.join("libsel4/include")])) .unwrap_or_else(|| panic!("{SEL4_INCLUDE_DIRS_ENV} or {SEL4_PREFIX_ENV} must be set")) .into_iter() - .map(|path| { + .inspect(|path| { println!("cargo:rerun-if-changed={}", path.display()); - path }) } diff --git a/crates/sel4/src/arch/arm/invocations.rs b/crates/sel4/src/arch/arm/invocations.rs index e50fc96e3..655ca71d8 100644 --- a/crates/sel4/src/arch/arm/invocations.rs +++ b/crates/sel4/src/arch/arm/invocations.rs @@ -30,7 +30,7 @@ impl VCpu { let res = self.invoke(|cptr, ipc_buffer| { ipc_buffer .inner_mut() - .seL4_ARM_VCPU_ReadRegs(cptr.bits(), field.into_sys().into()) + .seL4_ARM_VCPU_ReadRegs(cptr.bits(), field.into_sys()) }); Error::or(res.error, res.value) } @@ -38,11 +38,9 @@ impl VCpu { /// Corresponds to `seL4_ARM_VCPU_WriteRegs`. pub fn vcpu_write_regs(self, field: VCpuReg, value: Word) -> Result<()> { Error::wrap(self.invoke(|cptr, ipc_buffer| { - ipc_buffer.inner_mut().seL4_ARM_VCPU_WriteRegs( - cptr.bits(), - field.into_sys().into(), - value, - ) + ipc_buffer + .inner_mut() + .seL4_ARM_VCPU_WriteRegs(cptr.bits(), field.into_sys(), value) })) } diff --git a/crates/sel4/src/error.rs b/crates/sel4/src/error.rs index e1976a846..587bb9674 100644 --- a/crates/sel4/src/error.rs +++ b/crates/sel4/src/error.rs @@ -68,4 +68,5 @@ impl Error { } } +#[allow(clippy::assertions_on_constants)] const _: () = assert!(sys::seL4_Error::seL4_NumErrors == 11); diff --git a/crates/sel4/src/syscalls.rs b/crates/sel4/src/syscalls.rs index 82263b153..c53fab99b 100644 --- a/crates/sel4/src/syscalls.rs +++ b/crates/sel4/src/syscalls.rs @@ -322,4 +322,5 @@ mod fast_messages_sealing { impl FastMessagesSealed for &[Word] {} } +#[allow(clippy::assertions_on_constants)] const _: () = assert!(NUM_FAST_MESSAGE_REGISTERS == 4); diff --git a/hacking/nix/default.nix b/hacking/nix/default.nix index deef4515a..9b2353b36 100644 --- a/hacking/nix/default.nix +++ b/hacking/nix/default.nix @@ -8,11 +8,11 @@ let defaultNixpkgsPath = let - rev = "1811c4fec88995679397d6fa20f4f3395a0bebe5"; + rev = "3add434811677ed7fcd013c136806f8c6f410545"; in builtins.fetchTarball { url = "https://github.com/coliasgroup/nixpkgs/archive/refs/tags/keep/${builtins.substring 0 32 rev}.tar.gz"; - sha256 = "sha256:0ad2c7vlr9fidzjjg8szigfhmp1gvlf62ckd6cir8ymrxc93pby7"; + sha256 = "sha256:1pi5chvv5jld5jb8x0j4ni4w60m4x5dajfwhk1nh2j1kjxxrk1mk"; }; in diff --git a/hacking/nix/rust-utils/build-crates-in-layers.nix b/hacking/nix/rust-utils/build-crates-in-layers.nix index aafff843c..61826c633 100644 --- a/hacking/nix/rust-utils/build-crates-in-layers.nix +++ b/hacking/nix/rust-utils/build-crates-in-layers.nix @@ -277,7 +277,7 @@ in let "--manifest-path" "${workspace}/Cargo.toml" "--target-dir" "$target_dir" ]) (lib.optionals (!test) [ - "--out-dir" "$out/bin" + rustEnvironment.artifactDirFlag "$out/bin" ])} ${lib.optionalString test ( diff --git a/hacking/nix/rust-utils/build-sysroot.nix b/hacking/nix/rust-utils/build-sysroot.nix index 8f7d1e589..e1ac6e0d4 100644 --- a/hacking/nix/rust-utils/build-sysroot.nix +++ b/hacking/nix/rust-utils/build-sysroot.nix @@ -36,7 +36,9 @@ let manifest = crateUtils.toTOMLFile "Cargo.toml" (crateUtils.clobber [ { - inherit package; + package = package // { + edition = "2021"; + }; lib.path = crateUtils.dummyLibWithoutStdInSrc; } extraManifest diff --git a/hacking/nix/rust-utils/default.nix b/hacking/nix/rust-utils/default.nix index aca139e0b..5250672b0 100644 --- a/hacking/nix/rust-utils/default.nix +++ b/hacking/nix/rust-utils/default.nix @@ -62,22 +62,37 @@ in if channel != null then lib.hasPrefix "nightly" channel else throw "could not determine isNightly automatically" + , backwardsCompatibilityHacks ? {} , mkCustomTargetPath ? customTargetTripleTripleName: throw "unimplemented" , chooseLinker ? { targetTriple, platform }: null , compilerRTSource ? null , vendoredSuperLockfile ? null }: - { + let + elaborateBackwardsCompatibilityHacks = + { outDirInsteadOfArtifactDir ? false + , noLibraryWorkspace ? false + }: + { + inherit + outDirInsteadOfArtifactDir + noLibraryWorkspace + ; + }; + elaboratedBackwardsCompatibilityHacks = elaborateBackwardsCompatibilityHacks backwardsCompatibilityHacks; + in { inherit rustToolchain channel isNightly; inherit compilerRTSource; inherit chooseLinker; inherit vendoredSuperLockfile; + artifactDirFlag = if elaboratedBackwardsCompatibilityHacks.outDirInsteadOfArtifactDir then "--out-dir" else "--artifact-dir"; + mkTargetPath = targetTriple: if !targetTriple.isBuiltin then mkCustomTargetPath targetTriple.name else emptyDirectory; vendoredSysrootLockfile = vendorLockfile { inherit rustToolchain; - lockfile = symlinkToRegularFile "Cargo.lock" "${rustToolchain}/lib/rustlib/src/rust/Cargo.lock"; + lockfile = symlinkToRegularFile "Cargo.lock" "${rustToolchain}/lib/rustlib/src/rust/${lib.optionalString (!elaboratedBackwardsCompatibilityHacks.noLibraryWorkspace) "library/"}Cargo.lock"; }; } ); diff --git a/hacking/nix/scope/capdl-tool/Makefile b/hacking/nix/scope/capdl-tool/Makefile index fde3c97b7..1f19860ee 100644 --- a/hacking/nix/scope/capdl-tool/Makefile +++ b/hacking/nix/scope/capdl-tool/Makefile @@ -8,7 +8,7 @@ top_level := ../../../.. capdl := $(top_level)/../x/capdl/capDL-tool cabal2nix := $(shell nix-build $(top_level) -A pkgs.build.cabal2nix --no-out-link)/bin/cabal2nix -all := capDL-tool.nix base-compat-0-12-2.nix base-compat-batteries-0-12-2.nix +all := capDL-tool.nix base-compat-0-12-2.nix base-compat-batteries-0-12-2.nix MissingH-1.5.0.1.nix .PHONY: all $(all) all: $(all) @@ -21,3 +21,6 @@ base-compat-0-12-2.nix: base-compat-batteries-0-12-2.nix: $(cabal2nix) cabal://base-compat-batteries-0.12.2 > $@ + +MissingH-1.5.0.1.nix: + $(cabal2nix) cabal://MissingH-1.5.0.1 > $@ diff --git a/hacking/nix/scope/capdl-tool/MissingH-1.5.0.1.nix b/hacking/nix/scope/capdl-tool/MissingH-1.5.0.1.nix new file mode 100644 index 000000000..c3203f279 --- /dev/null +++ b/hacking/nix/scope/capdl-tool/MissingH-1.5.0.1.nix @@ -0,0 +1,22 @@ +{ mkDerivation, array, base, containers, directory, filepath +, hslogger, HUnit, lib, mtl, network, network-bsd, old-locale +, old-time, parsec, process, regex-compat, time, unix +}: +mkDerivation { + pname = "MissingH"; + version = "1.5.0.1"; + sha256 = "cb2fa4a62a609ec6bcfa2eab6ae6d34c6f5bfba523fed8dc0c055b3176732231"; + revision = "2"; + editedCabalFile = "11d922r06p00gcgzhb29hhjkq8ajy1xbqdiwdpbmhp2ar7fw7g9l"; + libraryHaskellDepends = [ + array base containers directory filepath hslogger mtl network + network-bsd old-locale old-time parsec process regex-compat time + unix + ]; + testHaskellDepends = [ + base containers directory filepath HUnit old-time parsec + regex-compat time unix + ]; + description = "Large utility library"; + license = lib.licenses.bsd3; +} diff --git a/hacking/nix/scope/capdl-tool/default.nix b/hacking/nix/scope/capdl-tool/default.nix index 095819821..19027d390 100644 --- a/hacking/nix/scope/capdl-tool/default.nix +++ b/hacking/nix/scope/capdl-tool/default.nix @@ -14,6 +14,7 @@ let overrides = self: super: { base-compat = self.callPackage ./base-compat-0-12-2.nix {}; base-compat-batteries = self.callPackage ./base-compat-batteries-0-12-2.nix {}; + MissingH = self.callPackage ./MissingH-1.5.0.1.nix {}; capDL-tool = self.callPackage ./capDL-tool.nix { inherit sources; }; diff --git a/hacking/nix/scope/default.nix b/hacking/nix/scope/default.nix index c6974a336..339efdbaa 100644 --- a/hacking/nix/scope/default.nix +++ b/hacking/nix/scope/default.nix @@ -59,7 +59,7 @@ superCallPackage ../rust-utils {} self // defaultRustToolchain = fenix.fromToolchainFile { file = topLevelRustToolchainFile; - sha256 = "sha256-6lRcCTSUmWOh0GheLMTZkY7JC273pWLp2s98Bb2REJQ="; + sha256 = "sha256-GJR7CjFPMh450uP/EUzXeng15vusV3ktq7Cioop945U="; }; defaultRustEnvironment = elaborateRustEnvironment (mkDefaultElaborateRustEnvironmentArgs { @@ -67,8 +67,8 @@ superCallPackage ../rust-utils {} self // } // { channel = (builtins.fromTOML (builtins.readFile topLevelRustToolchainFile)).toolchain.channel; compilerRTSource = mkCompilerRTSource { - version = "18.0-2024-02-13"; - hash = "sha256-fbq8H86WT13KsXJECHbcbFkqFseLvV/EC2kihTL2lgI="; + version = "19.1-2024-07-30"; + hash = "sha256-fV51iDAbkRmWJj0twTmQKdZdLueMAKSZR6bBtgVPCbk="; }; mkCustomTargetPath = customTargetTripleTripleName: let @@ -238,7 +238,7 @@ superCallPackage ../rust-utils {} self // overrideWorldScope = self: super: {}; - mkWorldFrom = newScope: unelaboratedWorldConfig: (lib.makeScope newScope (callPackage ./world {} unelaboratedWorldConfig)).overrideScope' overrideWorldScope; + mkWorldFrom = newScope: unelaboratedWorldConfig: (lib.makeScope newScope (callPackage ./world {} unelaboratedWorldConfig)).overrideScope overrideWorldScope; mkWorld = mkWorldFrom newScope; diff --git a/hacking/nix/scope/kani/cbmc-viewer.nix b/hacking/nix/scope/kani/cbmc-viewer.nix index 320e9f610..2a2124a24 100644 --- a/hacking/nix/scope/kani/cbmc-viewer.nix +++ b/hacking/nix/scope/kani/cbmc-viewer.nix @@ -14,15 +14,15 @@ buildPythonPackage rec { pname = "cbmc-viewer"; - version = "3.8"; + version = "3.9"; format = "pyproject"; src = fetchFromGitHub { owner = "model-checking"; repo = "cbmc-viewer"; - rev = "viewer-3.8"; - hash = "sha256-GIpinwjl/v6Dz5HyOsoPfM9fxG0poZ0HPsKLe9js9vM="; + rev = "viewer-3.9"; + hash = "sha256-BfXusrOXGBvquM841K4gb5HQVSryiZS8+ihgj7DVxbI="; }; propagatedBuildInputs = [ diff --git a/hacking/nix/scope/kani/default.nix b/hacking/nix/scope/kani/default.nix index de1b3dfb7..a3c3dfed9 100644 --- a/hacking/nix/scope/kani/default.nix +++ b/hacking/nix/scope/kani/default.nix @@ -34,7 +34,7 @@ let toolchain.components = rustToolchainAttrs.toolchain.components ++ [ "rust-src" ]; } ]); - sha256 = "sha256-akRjdj8CP0mRL4czKC7GssksdunxdckSNiNU36zduV0="; + sha256 = "sha256-opDDHyN+Xa9kcjdHwGl3IpBsUw7ikGU+Ng00JeCdkMA="; }; rustEnvironment = lib.fix (self: elaborateRustEnvironment (mkDefaultElaborateRustEnvironmentArgs { @@ -49,8 +49,8 @@ let src = fetchFromGitHub { owner = "model-checking"; repo = "kani"; - rev = "kani-0.52.0"; - sha256 = "sha256-LyMZt6E1U03n4w5L9JMxgklAyvhltSJTvRl7zxYpw6A="; + rev = "kani-0.55.0"; + sha256 = "sha256-BBcJopXNSKwvMqs/wcw743+g4lvGTqy1OrATTBxph+I="; }; localLockfile = vendorLockfile { diff --git a/hacking/nix/scope/microkit/default.nix b/hacking/nix/scope/microkit/default.nix index c6b8d97f7..3c41acfad 100644 --- a/hacking/nix/scope/microkit/default.nix +++ b/hacking/nix/scope/microkit/default.nix @@ -15,8 +15,8 @@ , sources , vendorLockfile , toTOMLFile -, defaultRustToolchain -, rustToolchain ? defaultRustToolchain +, defaultRustEnvironment +, rustEnvironment ? defaultRustEnvironment }: { board, config }: @@ -86,7 +86,7 @@ let tool = let vendoredLockfile = vendorLockfile { - inherit rustToolchain; + inherit (rustEnvironment) rustToolchain; lockfile = microkitSource + "/tool/microkit/Cargo.lock"; }; @@ -99,7 +99,7 @@ let src = lib.cleanSource (microkitSource + "/tool/microkit"); nativeBuildInputs = [ - rustToolchain + rustEnvironment.rustToolchain ]; depsBuildBuild = [ @@ -116,7 +116,7 @@ let ''; buildPhase = '' - cargo build -Z unstable-options --frozen --config ${cargoConfigFile} --out-dir $out/bin + cargo build -Z unstable-options --frozen --config ${cargoConfigFile} ${rustEnvironment.artifactDirFlag} $out/bin ''; }; diff --git a/hacking/nix/scope/sel4test/default.nix b/hacking/nix/scope/sel4test/default.nix index c762d7656..dd9e661bf 100644 --- a/hacking/nix/scope/sel4test/default.nix +++ b/hacking/nix/scope/sel4test/default.nix @@ -55,7 +55,7 @@ let tests = stdenv.mkDerivation { name = "sel4test"; - src = fetchRepoProject { + src = buildPackages.fetchRepoProject { name = "sel4test"; manifest = "https://github.com/seL4/sel4test-manifest.git"; rev = "8bf6fd506a0546866ba5fbd7396f497d5a056f5c"; diff --git a/hacking/nix/scope/shell-for-hacking.nix b/hacking/nix/scope/shell-for-hacking.nix index 5965dd223..7f6a892bf 100644 --- a/hacking/nix/scope/shell-for-hacking.nix +++ b/hacking/nix/scope/shell-for-hacking.nix @@ -7,7 +7,7 @@ { lib, stdenv, hostPlatform, buildPackages , mkShell -, pkgconfig +, pkg-config , git , cacert , rustup, rustPlatform @@ -34,7 +34,7 @@ mkShell (shellForMakefile.apply { ]; nativeBuildInputs = [ - pkgconfig + pkg-config git cacert rustup diff --git a/hacking/nix/scope/verus/default.nix b/hacking/nix/scope/verus/default.nix index fdd02951b..79bd44f34 100644 --- a/hacking/nix/scope/verus/default.nix +++ b/hacking/nix/scope/verus/default.nix @@ -37,6 +37,10 @@ let inherit rustToolchain; } // { inherit (rustToolchainAttrs.toolchain) channel; + backwardsCompatibilityHacks = { + outDirInsteadOfArtifactDir = true; + noLibraryWorkspace = true; + }; mkCustomTargetPath = mkMkCustomTargetPathForEnvironment { rustEnvironment = self; }; @@ -77,7 +81,7 @@ stdenv.mkDerivation { -p verus-driver -p cargo-verus \ --features=verus-driver/singular \ --release \ - --out-dir $out/bin + ${rustEnvironment.artifactDirFlag} $out/bin ''; installPhase = '' diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 84a9735bf..48d5c371c 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -5,5 +5,5 @@ # [toolchain] -channel = "nightly-2024-05-01" +channel = "nightly-2024-09-01" components = [ "rustfmt", "rust-src", "rustc-dev", "llvm-tools-preview" ] diff --git a/support/targets/aarch64-sel4-microkit-minimal.json b/support/targets/aarch64-sel4-microkit-minimal.json index 45aadf045..47630c13b 100644 --- a/support/targets/aarch64-sel4-microkit-minimal.json +++ b/support/targets/aarch64-sel4-microkit-minimal.json @@ -1,7 +1,7 @@ { "arch": "aarch64", "crt-objects-fallback": "false", - "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", + "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", "disable-redzone": true, "eh-frame-header": false, "env": "sel4", @@ -13,10 +13,10 @@ "llvm-target": "aarch64-unknown-none", "max-atomic-width": 128, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare ARM64, hardfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "pre-link-args": { diff --git a/support/targets/aarch64-sel4-microkit-resettable-minimal.json b/support/targets/aarch64-sel4-microkit-resettable-minimal.json index 3232e379a..19dc9e75c 100644 --- a/support/targets/aarch64-sel4-microkit-resettable-minimal.json +++ b/support/targets/aarch64-sel4-microkit-resettable-minimal.json @@ -1,7 +1,7 @@ { "arch": "aarch64", "crt-objects-fallback": "false", - "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", + "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", "disable-redzone": true, "eh-frame-header": false, "env": "sel4", @@ -13,10 +13,10 @@ "llvm-target": "aarch64-unknown-none", "max-atomic-width": 128, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare ARM64, hardfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "pre-link-args": { diff --git a/support/targets/aarch64-sel4-microkit-resettable.json b/support/targets/aarch64-sel4-microkit-resettable.json index 391e5eafd..693a4d77a 100644 --- a/support/targets/aarch64-sel4-microkit-resettable.json +++ b/support/targets/aarch64-sel4-microkit-resettable.json @@ -1,7 +1,7 @@ { "arch": "aarch64", "crt-objects-fallback": "false", - "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", + "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", "disable-redzone": true, "env": "sel4", "exe-suffix": ".elf", @@ -13,10 +13,10 @@ "llvm-target": "aarch64-unknown-none", "max-atomic-width": 128, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare ARM64, hardfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "pre-link-args": { "gnu-lld": [ diff --git a/support/targets/aarch64-sel4-microkit.json b/support/targets/aarch64-sel4-microkit.json index 75def462d..b151b793f 100644 --- a/support/targets/aarch64-sel4-microkit.json +++ b/support/targets/aarch64-sel4-microkit.json @@ -1,7 +1,7 @@ { "arch": "aarch64", "crt-objects-fallback": "false", - "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", + "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", "disable-redzone": true, "env": "sel4", "exe-suffix": ".elf", @@ -13,10 +13,10 @@ "llvm-target": "aarch64-unknown-none", "max-atomic-width": 128, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare ARM64, hardfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "pre-link-args": { "gnu-lld": [ diff --git a/support/targets/aarch64-sel4-minimal.json b/support/targets/aarch64-sel4-minimal.json index 8c96d6741..495696505 100644 --- a/support/targets/aarch64-sel4-minimal.json +++ b/support/targets/aarch64-sel4-minimal.json @@ -1,7 +1,7 @@ { "arch": "aarch64", "crt-objects-fallback": "false", - "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", + "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", "disable-redzone": true, "eh-frame-header": false, "env": "sel4", @@ -12,10 +12,10 @@ "llvm-target": "aarch64-unknown-none", "max-atomic-width": 128, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare ARM64, hardfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "pre-link-args": { diff --git a/support/targets/aarch64-sel4.json b/support/targets/aarch64-sel4.json index 0432c64d1..dd3dcf500 100644 --- a/support/targets/aarch64-sel4.json +++ b/support/targets/aarch64-sel4.json @@ -1,7 +1,7 @@ { "arch": "aarch64", "crt-objects-fallback": "false", - "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", + "data-layout": "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", "disable-redzone": true, "env": "sel4", "exe-suffix": ".elf", @@ -12,10 +12,10 @@ "llvm-target": "aarch64-unknown-none", "max-atomic-width": 128, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare ARM64, hardfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "pre-link-args": { "gnu-lld": [ diff --git a/support/targets/armv7a-sel4-minimal.json b/support/targets/armv7a-sel4-minimal.json index d1deba6a7..6c4f5a3a6 100644 --- a/support/targets/armv7a-sel4-minimal.json +++ b/support/targets/armv7a-sel4-minimal.json @@ -15,10 +15,10 @@ "llvm-target": "armv7a-none-eabi", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare Armv7-A", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "relocation-model": "static", diff --git a/support/targets/armv7a-sel4.json b/support/targets/armv7a-sel4.json index f2bfdaf38..bb21bcf10 100644 --- a/support/targets/armv7a-sel4.json +++ b/support/targets/armv7a-sel4.json @@ -15,10 +15,10 @@ "llvm-target": "armv7a-none-eabi", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare Armv7-A", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "relocation-model": "static", diff --git a/support/targets/riscv32imac-sel4-minimal.json b/support/targets/riscv32imac-sel4-minimal.json index 67d19abe0..b10bdeaad 100644 --- a/support/targets/riscv32imac-sel4-minimal.json +++ b/support/targets/riscv32imac-sel4-minimal.json @@ -13,10 +13,10 @@ "llvm-target": "riscv32", "max-atomic-width": 32, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV32IMAC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "relocation-model": "static", diff --git a/support/targets/riscv32imac-sel4.json b/support/targets/riscv32imac-sel4.json index 7d8c0aa29..7d0175059 100644 --- a/support/targets/riscv32imac-sel4.json +++ b/support/targets/riscv32imac-sel4.json @@ -13,10 +13,10 @@ "llvm-target": "riscv32", "max-atomic-width": 32, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV32IMAC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "relocation-model": "static", "target-pointer-width": "32" diff --git a/support/targets/riscv32imafc-sel4-minimal.json b/support/targets/riscv32imafc-sel4-minimal.json index 62ffee573..b3721a1be 100644 --- a/support/targets/riscv32imafc-sel4-minimal.json +++ b/support/targets/riscv32imafc-sel4-minimal.json @@ -14,10 +14,10 @@ "llvm-target": "riscv32", "max-atomic-width": 32, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV32IMAFC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "relocation-model": "static", diff --git a/support/targets/riscv32imafc-sel4.json b/support/targets/riscv32imafc-sel4.json index 4f24dd24c..3ec282683 100644 --- a/support/targets/riscv32imafc-sel4.json +++ b/support/targets/riscv32imafc-sel4.json @@ -14,10 +14,10 @@ "llvm-target": "riscv32", "max-atomic-width": 32, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV32IMAFC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "relocation-model": "static", "target-pointer-width": "32" diff --git a/support/targets/riscv64gc-sel4-minimal.json b/support/targets/riscv64gc-sel4-minimal.json index 9db197202..014201eb0 100644 --- a/support/targets/riscv64gc-sel4-minimal.json +++ b/support/targets/riscv64gc-sel4-minimal.json @@ -15,14 +15,15 @@ "llvm-target": "riscv64", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV64IMAFDC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "relocation-model": "static", "supported-sanitizers": [ + "shadow-call-stack", "kernel-address" ], "target-pointer-width": "64" diff --git a/support/targets/riscv64gc-sel4.json b/support/targets/riscv64gc-sel4.json index e77f9d145..8b6bd0f78 100644 --- a/support/targets/riscv64gc-sel4.json +++ b/support/targets/riscv64gc-sel4.json @@ -15,13 +15,14 @@ "llvm-target": "riscv64", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV64IMAFDC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "relocation-model": "static", "supported-sanitizers": [ + "shadow-call-stack", "kernel-address" ], "target-pointer-width": "64" diff --git a/support/targets/riscv64imac-sel4-minimal.json b/support/targets/riscv64imac-sel4-minimal.json index f9dd0dbf2..ad39b2158 100644 --- a/support/targets/riscv64imac-sel4-minimal.json +++ b/support/targets/riscv64imac-sel4-minimal.json @@ -14,14 +14,15 @@ "llvm-target": "riscv64", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV64IMAC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "relocation-model": "static", "supported-sanitizers": [ + "shadow-call-stack", "kernel-address" ], "target-pointer-width": "64" diff --git a/support/targets/riscv64imac-sel4.json b/support/targets/riscv64imac-sel4.json index 3e9f022b4..a8c081458 100644 --- a/support/targets/riscv64imac-sel4.json +++ b/support/targets/riscv64imac-sel4.json @@ -14,13 +14,14 @@ "llvm-target": "riscv64", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Bare RISC-V (RV64IMAC ISA)", + "host_tools": false, + "std": false, + "tier": 2 }, "relocation-model": "static", "supported-sanitizers": [ + "shadow-call-stack", "kernel-address" ], "target-pointer-width": "64" diff --git a/support/targets/x86_64-sel4-minimal.json b/support/targets/x86_64-sel4-minimal.json index 41e4e6383..318f61aa6 100644 --- a/support/targets/x86_64-sel4-minimal.json +++ b/support/targets/x86_64-sel4-minimal.json @@ -8,16 +8,16 @@ "eh-frame-header": false, "env": "sel4", "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "x86_64-unknown-none-elf", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Freestanding/bare-metal x86_64 softfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "panic-strategy": "abort", "plt-by-default": false, diff --git a/support/targets/x86_64-sel4.json b/support/targets/x86_64-sel4.json index 42e3316e6..c3d8699b6 100644 --- a/support/targets/x86_64-sel4.json +++ b/support/targets/x86_64-sel4.json @@ -7,17 +7,17 @@ "disable-redzone": true, "env": "sel4", "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", "has-thread-local": true, "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "x86_64-unknown-none-elf", "max-atomic-width": 64, "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null + "description": "Freestanding/bare-metal x86_64 softfloat", + "host_tools": false, + "std": false, + "tier": 2 }, "plt-by-default": false, "relro-level": "full",