From 4f54e2bb0f1510c8d67837ee3d56c182c9cc50ac Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Tue, 14 Apr 2026 00:38:12 -0700 Subject: [PATCH 01/22] sel4-reset: Add x86_64 support Signed-off-by: Nick Spinale --- crates/experimental/sel4-reset/src/lib.rs | 25 +++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index fdfcba457..673d2e3c6 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -12,7 +12,7 @@ use core::slice; use sel4_stack::{Stack, StackBottom}; -#[cfg(not(any(target_arch = "aarch64",)))] +#[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))] compile_error!("unsupported architecture"); // // // @@ -99,6 +99,16 @@ macro_rules! rodata { "#, r#" .global {ident} + "#, + #[cfg(target_pointer_width = "64")] + r#" + .p2align 8 + "#, + #[cfg(target_pointer_width = "32")] + r#" + .p2align 4 + "#, + r#" {ident}: "#, #[cfg(target_pointer_width = "64")] @@ -107,7 +117,7 @@ macro_rules! rodata { "#, #[cfg(target_pointer_width = "32")] r#" - .word 0 + .dword 0 "#, r#" .size {ident}, .-{ident} @@ -153,7 +163,14 @@ global_asm! { mov sp, x9 bl __sel4_reset__reset_memory b _start - - 1: b 1b + "#, + #[cfg(target_arch = "x86_64")] + r#" + mov rsp, __sel4_reset__stack_bottom + mov rbp, rsp + sub rsp, 0x8 // Stack must be 16-byte aligned before call + push rbp + call __sel4_reset__reset_memory + jmp _start "#, } From 4a8a0a15fded55569fbc80933aa0ea65e2f07214 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Tue, 14 Apr 2026 16:39:07 -0700 Subject: [PATCH 02/22] Prune resettable linker script Signed-off-by: Nick Spinale --- crates/sel4-generate-target-specs/src/resettable.lds | 6 ------ .../targets/aarch64-sel4-microkit-resettable-minimal.json | 2 +- .../targets/aarch64-sel4-microkit-resettable-unwind.json | 2 +- support/targets/aarch64-sel4-microkit-resettable.json | 2 +- .../targets/riscv64gc-sel4-microkit-resettable-minimal.json | 2 +- .../targets/riscv64gc-sel4-microkit-resettable-unwind.json | 2 +- support/targets/riscv64gc-sel4-microkit-resettable.json | 2 +- .../riscv64imac-sel4-microkit-resettable-minimal.json | 2 +- .../riscv64imac-sel4-microkit-resettable-unwind.json | 2 +- support/targets/riscv64imac-sel4-microkit-resettable.json | 2 +- .../targets/x86_64-sel4-microkit-resettable-minimal.json | 2 +- support/targets/x86_64-sel4-microkit-resettable-unwind.json | 2 +- support/targets/x86_64-sel4-microkit-resettable.json | 2 +- 13 files changed, 12 insertions(+), 18 deletions(-) diff --git a/crates/sel4-generate-target-specs/src/resettable.lds b/crates/sel4-generate-target-specs/src/resettable.lds index b63b31e0f..8bdb8a575 100644 --- a/crates/sel4-generate-target-specs/src/resettable.lds +++ b/crates/sel4-generate-target-specs/src/resettable.lds @@ -1,9 +1,3 @@ -SECTIONS { - .persistent : { - *(.persistent .persistent.*) - } -} INSERT BEFORE .data; - ASSERT(DEFINED(_reset), "_reset is not defined") ENTRY(_reset) diff --git a/support/targets/aarch64-sel4-microkit-resettable-minimal.json b/support/targets/aarch64-sel4-microkit-resettable-minimal.json index 43039919c..4c6f26881 100644 --- a/support/targets/aarch64-sel4-microkit-resettable-minimal.json +++ b/support/targets/aarch64-sel4-microkit-resettable-minimal.json @@ -6,7 +6,7 @@ "disable-redzone": true, "exe-suffix": ".elf", "features": "+v8a,+strict-align,+neon", - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "aarch64-unknown-none", diff --git a/support/targets/aarch64-sel4-microkit-resettable-unwind.json b/support/targets/aarch64-sel4-microkit-resettable-unwind.json index 6b7689ef4..dadfcac0e 100644 --- a/support/targets/aarch64-sel4-microkit-resettable-unwind.json +++ b/support/targets/aarch64-sel4-microkit-resettable-unwind.json @@ -7,7 +7,7 @@ "exe-suffix": ".elf", "features": "+v8a,+strict-align,+neon", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "aarch64-unknown-none", diff --git a/support/targets/aarch64-sel4-microkit-resettable.json b/support/targets/aarch64-sel4-microkit-resettable.json index 231dba49a..23728b02f 100644 --- a/support/targets/aarch64-sel4-microkit-resettable.json +++ b/support/targets/aarch64-sel4-microkit-resettable.json @@ -7,7 +7,7 @@ "exe-suffix": ".elf", "features": "+v8a,+strict-align,+neon", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "aarch64-unknown-none", diff --git a/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json b/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json index 36330d97f..bbb7382b5 100644 --- a/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json +++ b/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json @@ -7,7 +7,7 @@ "emit-debug-gdb-scripts": false, "exe-suffix": ".elf", "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-abiname": "lp64d", diff --git a/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json b/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json index 30348e515..5b9dc5195 100644 --- a/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json +++ b/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json @@ -8,7 +8,7 @@ "exe-suffix": ".elf", "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-abiname": "lp64d", diff --git a/support/targets/riscv64gc-sel4-microkit-resettable.json b/support/targets/riscv64gc-sel4-microkit-resettable.json index ef91bab8f..8dee73788 100644 --- a/support/targets/riscv64gc-sel4-microkit-resettable.json +++ b/support/targets/riscv64gc-sel4-microkit-resettable.json @@ -8,7 +8,7 @@ "exe-suffix": ".elf", "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-abiname": "lp64d", diff --git a/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json b/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json index 9ff08bdf4..2f34740d3 100644 --- a/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json +++ b/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json @@ -7,7 +7,7 @@ "emit-debug-gdb-scripts": false, "exe-suffix": ".elf", "features": "+m,+a,+c", - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-abiname": "lp64", diff --git a/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json b/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json index 8c71ec2dd..97a538786 100644 --- a/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json +++ b/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json @@ -8,7 +8,7 @@ "exe-suffix": ".elf", "features": "+m,+a,+c", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-abiname": "lp64", diff --git a/support/targets/riscv64imac-sel4-microkit-resettable.json b/support/targets/riscv64imac-sel4-microkit-resettable.json index 351ab2d30..31fbc2929 100644 --- a/support/targets/riscv64imac-sel4-microkit-resettable.json +++ b/support/targets/riscv64imac-sel4-microkit-resettable.json @@ -8,7 +8,7 @@ "exe-suffix": ".elf", "features": "+m,+a,+c", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-abiname": "lp64", diff --git a/support/targets/x86_64-sel4-microkit-resettable-minimal.json b/support/targets/x86_64-sel4-microkit-resettable-minimal.json index 56e932045..64064bc00 100644 --- a/support/targets/x86_64-sel4-microkit-resettable-minimal.json +++ b/support/targets/x86_64-sel4-microkit-resettable-minimal.json @@ -7,7 +7,7 @@ "disable-redzone": true, "exe-suffix": ".elf", "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "x86_64-unknown-none-elf", diff --git a/support/targets/x86_64-sel4-microkit-resettable-unwind.json b/support/targets/x86_64-sel4-microkit-resettable-unwind.json index 3dd7efab1..2e0a1535f 100644 --- a/support/targets/x86_64-sel4-microkit-resettable-unwind.json +++ b/support/targets/x86_64-sel4-microkit-resettable-unwind.json @@ -8,7 +8,7 @@ "exe-suffix": ".elf", "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "x86_64-unknown-none-elf", diff --git a/support/targets/x86_64-sel4-microkit-resettable.json b/support/targets/x86_64-sel4-microkit-resettable.json index 378468882..8a181f9f9 100644 --- a/support/targets/x86_64-sel4-microkit-resettable.json +++ b/support/targets/x86_64-sel4-microkit-resettable.json @@ -8,7 +8,7 @@ "exe-suffix": ".elf", "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", "has-thread-local": true, - "link-script": "SECTIONS {\n .persistent : {\n *(.persistent .persistent.*)\n }\n} INSERT BEFORE .data;\n\nASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", "linker": "rust-lld", "linker-flavor": "gnu-lld", "llvm-target": "x86_64-unknown-none-elf", From 08da3b26dfc192607bbcdbc0d0a12020400244b9 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Tue, 14 Apr 2026 23:12:38 -0700 Subject: [PATCH 03/22] sel4-reset: Improve .rodata hack Signed-off-by: Nick Spinale --- crates/experimental/sel4-reset/src/lib.rs | 73 +++---------------- .../experimental/sel4-reset/src/rodata_var.rs | 32 ++++++++ 2 files changed, 43 insertions(+), 62 deletions(-) create mode 100644 crates/experimental/sel4-reset/src/rodata_var.rs diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index 673d2e3c6..1a00d0a33 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -12,6 +12,10 @@ use core::slice; use sel4_stack::{Stack, StackBottom}; +mod rodata_var; + +use rodata_var::rodata_var; + #[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))] compile_error!("unsupported architecture"); @@ -65,74 +69,19 @@ unsafe extern "C" fn __sel4_reset__reset_memory() { } unsafe fn get_regions() -> Regions<'static> { + let start = *rodata_var!(sel4_reset_regions_start: usize); + let meta_offset = *rodata_var!(sel4_reset_regions_meta_offset: usize); + let meta_count = *rodata_var!(sel4_reset_regions_meta_count: usize); + let data_offset = *rodata_var!(sel4_reset_regions_data_offset: usize); + let data_size = *rodata_var!(sel4_reset_regions_data_size: usize); unsafe { Regions { - meta: slice::from_raw_parts( - (sel4_reset_regions_start + sel4_reset_regions_meta_offset) as *const _, - sel4_reset_regions_meta_count, - ), - data: slice::from_raw_parts( - (sel4_reset_regions_start + sel4_reset_regions_data_offset) as *const _, - sel4_reset_regions_data_size, - ), + meta: slice::from_raw_parts((start + meta_offset) as *const _, meta_count), + data: slice::from_raw_parts((start + data_offset) as *const _, data_size), } } } -// HACK to force variables into .rodata without causing .rodata to end up in a PF_W segment -macro_rules! rodata { - ($ident:ident) => { - unsafe extern "C" { - static $ident: usize; - } - global_asm! { - r#" - .section .rodata - "#, - #[cfg(target_pointer_width = "64")] - r#" - .align 8 - "#, - #[cfg(target_pointer_width = "32")] - r#" - .align 4 - "#, - r#" - .global {ident} - "#, - #[cfg(target_pointer_width = "64")] - r#" - .p2align 8 - "#, - #[cfg(target_pointer_width = "32")] - r#" - .p2align 4 - "#, - r#" - {ident}: - "#, - #[cfg(target_pointer_width = "64")] - r#" - .quad 0 - "#, - #[cfg(target_pointer_width = "32")] - r#" - .dword 0 - "#, - r#" - .size {ident}, .-{ident} - "#, - ident = sym $ident, - } - }; -} - -rodata!(sel4_reset_regions_start); -rodata!(sel4_reset_regions_meta_offset); -rodata!(sel4_reset_regions_meta_count); -rodata!(sel4_reset_regions_data_offset); -rodata!(sel4_reset_regions_data_size); - // // // pub fn reset() -> ! { diff --git a/crates/experimental/sel4-reset/src/rodata_var.rs b/crates/experimental/sel4-reset/src/rodata_var.rs new file mode 100644 index 000000000..3188f82eb --- /dev/null +++ b/crates/experimental/sel4-reset/src/rodata_var.rs @@ -0,0 +1,32 @@ +// +// Copyright 2026, Colias Group, LLC +// +// SPDX-License-Identifier: BSD-2-Clause +// + +// HACK to force variables into .rodata without causing .rodata to end up in a PF_W segment +macro_rules! rodata_var { + ($ident:ident: $ty:ty) => {{ + mod asm { + unsafe extern "C" { + pub(super) static $ident: $ty; + } + core::arch::global_asm! { + r#" + .section .rodata + .global {ident} + .size {ident}, {size} + .p2align {align} + {ident}: + .skip {size}, 0 + "#, + ident = sym $ident, + size = const core::mem::size_of::<$ty>(), + align = const core::mem::align_of::<$ty>(), + } + } + unsafe { &asm::$ident } + }}; +} + +pub(crate) use rodata_var; From 1a374754ec84cedc5e88c990b838bfaac3250e73 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Tue, 14 Apr 2026 23:42:23 -0700 Subject: [PATCH 04/22] sel4-reset: Simplify memory reset impl Signed-off-by: Nick Spinale --- crates/experimental/sel4-reset/src/lib.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index 1a00d0a33..a04a4c834 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -42,9 +42,7 @@ impl Regions<'_> { let (dst_data, dst_zero) = dst.split_at_mut(meta.filesz); let src_data = &self.data[meta.offset..][..meta.filesz]; dst_data.copy_from_slice(src_data); - unsafe { - ptr::write_bytes(dst_zero.as_mut_ptr(), 0, dst_zero.len()); - } + dst_zero.fill(0); } } } From a89722bba10bed0fd3a39fd9c879742bb0962ee1 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Tue, 14 Apr 2026 23:59:50 -0700 Subject: [PATCH 05/22] Fix assembly in runtime common Signed-off-by: Nick Spinale --- crates/sel4-runtime-common/src/start.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/sel4-runtime-common/src/start.rs b/crates/sel4-runtime-common/src/start.rs index 9b42855a9..bdafdbb33 100644 --- a/crates/sel4-runtime-common/src/start.rs +++ b/crates/sel4-runtime-common/src/start.rs @@ -122,26 +122,26 @@ global_asm! { ldr x9, =__sel4_runtime_common__stack_bottom ldr x9, [x9] mov sp, x9 - b __sel4_runtime_common__rust_entrypoint + b __sel4_runtime_common__call_rust_entrypoint "#, #[cfg(target_arch = "arm")] r#" ldr r8, =__sel4_runtime_common__stack_bottom ldr r8, [r8] mov sp, r8 - b __sel4_runtime_common__rust_entrypoint + b __sel4_runtime_common__call_rust_entrypoint "#, #[cfg(target_arch = "riscv64")] r#" la sp, __sel4_runtime_common__stack_bottom ld sp, (sp) - j __sel4_runtime_common__rust_entrypoint + j __sel4_runtime_common__call_rust_entrypoint "#, #[cfg(target_arch = "riscv32")] r#" la sp, __sel4_runtime_common__stack_bottom lw sp, (sp) - j __sel4_runtime_common__rust_entrypoint + j __sel4_runtime_common__call_rust_entrypoint "#, #[cfg(target_arch = "x86_64")] r#" @@ -149,7 +149,7 @@ global_asm! { mov rbp, rsp sub rsp, 0x8 // Stack must be 16-byte aligned before call push rbp - call __sel4_runtime_common__rust_entrypoint + call __sel4_runtime_common__call_rust_entrypoint 1: jmp 1b "#, } From 07462be95d49eab6c6bc24a138c03546afaf70b9 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Tue, 14 Apr 2026 23:48:54 -0700 Subject: [PATCH 06/22] sel4-reset: Add gpr support Signed-off-by: Nick Spinale --- crates/experimental/sel4-reset/src/lib.rs | 82 +++++++++++++++-------- 1 file changed, 53 insertions(+), 29 deletions(-) diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index a04a4c834..ee64a3c82 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -7,7 +7,6 @@ #![no_std] use core::arch::global_asm; -use core::ptr; use core::slice; use sel4_stack::{Stack, StackBottom}; @@ -47,25 +46,6 @@ impl Regions<'_> { } } -// // // - -const STACK_SIZE: usize = 4096; - -#[unsafe(link_section = ".persistent")] -static STACK: Stack = Stack::new(); - -#[unsafe(no_mangle)] -static __sel4_reset__stack_bottom: StackBottom = STACK.bottom(); - -// // // - -#[unsafe(no_mangle)] -unsafe extern "C" fn __sel4_reset__reset_memory() { - unsafe { - get_regions().reset_memory(); - } -} - unsafe fn get_regions() -> Regions<'static> { let start = *rodata_var!(sel4_reset_regions_start: usize); let meta_offset = *rodata_var!(sel4_reset_regions_meta_offset: usize); @@ -82,20 +62,66 @@ unsafe fn get_regions() -> Regions<'static> { // // // +unsafe extern "C" { + fn _reset(x0: usize, x1: usize, x2: usize, x3: usize) -> !; + fn _start(x0: usize, x1: usize, x2: usize, x3: usize) -> !; +} + pub fn reset() -> ! { unsafe { - _reset(); + _reset(0, 0, 0, 0); } - unreachable!() } -unsafe extern "C" { - fn _reset(); +pub fn reset1(x0: usize) -> ! { + unsafe { + _reset(x0, 0, 0, 0); + } +} + +pub fn reset2(x0: usize, x1: usize) -> ! { + unsafe { + _reset(x0, x1, 0, 0); + } +} + +pub fn reset3(x0: usize, x1: usize, x2: usize) -> ! { + unsafe { + _reset(x0, x1, x2, 0); + } } +pub fn reset4(x0: usize, x1: usize, x2: usize, x3: usize) -> ! { + unsafe { + _reset(x0, x1, x2, x3); + } +} + +#[unsafe(no_mangle)] +unsafe extern "C" fn __sel4_reset__rust_entrypoint( + x0: usize, + x1: usize, + x2: usize, + x3: usize, +) -> ! { + unsafe { + get_regions().reset_memory(); + _start(x0, x1, x2, x3) + } +} + +const STACK_SIZE: usize = 4096; + +#[unsafe(link_section = ".persistent")] +static STACK: Stack = Stack::new(); + +#[unsafe(no_mangle)] +static __sel4_reset__stack_bottom: StackBottom = STACK.bottom(); + global_asm! { r#" - .extern _start + .extern __sel4_reset__stack_bottom + .extern __sel4_reset__rust_entrypoint .global _reset @@ -108,8 +134,7 @@ global_asm! { ldr x9, =__sel4_reset__stack_bottom ldr x9, [x9] mov sp, x9 - bl __sel4_reset__reset_memory - b _start + b __sel4_reset__rust_entrypoint "#, #[cfg(target_arch = "x86_64")] r#" @@ -117,7 +142,6 @@ global_asm! { mov rbp, rsp sub rsp, 0x8 // Stack must be 16-byte aligned before call push rbp - call __sel4_reset__reset_memory - jmp _start + jmp __sel4_reset__rust_entrypoint "#, } From 0c4a904b5ffa1fa1b52b563d514dcde657db8dbd Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 00:31:04 -0700 Subject: [PATCH 07/22] sel4-reset: Add root task test Signed-off-by: Nick Spinale --- Cargo.lock | 10 ++++ Cargo.toml | 1 + .../private/tests/root-task/reset/Cargo.nix | 19 +++++++ .../private/tests/root-task/reset/Cargo.toml | 23 +++++++++ .../private/tests/root-task/reset/src/main.rs | 42 +++++++++++++++ crates/sel4-generate-target-specs/src/main.rs | 3 -- hacking/nix/scope/world/instances/default.nix | 18 +++++++ .../aarch64-sel4-resettable-minimal.json | 39 ++++++++++++++ .../targets/aarch64-sel4-resettable-musl.json | 47 +++++++++++++++++ .../aarch64-sel4-resettable-unwind-musl.json | 46 +++++++++++++++++ .../aarch64-sel4-resettable-unwind.json | 39 ++++++++++++++ support/targets/aarch64-sel4-resettable.json | 40 +++++++++++++++ ...ch64-sel4-roottask-resettable-minimal.json | 42 +++++++++++++++ ...aarch64-sel4-roottask-resettable-musl.json | 50 ++++++++++++++++++ ...-sel4-roottask-resettable-unwind-musl.json | 49 ++++++++++++++++++ ...rch64-sel4-roottask-resettable-unwind.json | 42 +++++++++++++++ .../aarch64-sel4-roottask-resettable.json | 43 ++++++++++++++++ .../armv7a-sel4-resettable-minimal.json | 27 ++++++++++ .../targets/armv7a-sel4-resettable-musl.json | 35 +++++++++++++ support/targets/armv7a-sel4-resettable.json | 28 ++++++++++ ...mv7a-sel4-roottask-resettable-minimal.json | 34 +++++++++++++ .../armv7a-sel4-roottask-resettable-musl.json | 42 +++++++++++++++ .../armv7a-sel4-roottask-resettable.json | 35 +++++++++++++ .../riscv32imac-sel4-resettable-minimal.json | 24 +++++++++ .../riscv32imac-sel4-resettable-musl.json | 32 ++++++++++++ ...scv32imac-sel4-resettable-unwind-musl.json | 31 +++++++++++ .../riscv32imac-sel4-resettable-unwind.json | 24 +++++++++ .../targets/riscv32imac-sel4-resettable.json | 25 +++++++++ ...imac-sel4-roottask-resettable-minimal.json | 31 +++++++++++ ...v32imac-sel4-roottask-resettable-musl.json | 39 ++++++++++++++ ...-sel4-roottask-resettable-unwind-musl.json | 38 ++++++++++++++ ...2imac-sel4-roottask-resettable-unwind.json | 31 +++++++++++ .../riscv32imac-sel4-roottask-resettable.json | 32 ++++++++++++ .../riscv32imafc-sel4-resettable-minimal.json | 24 +++++++++ .../riscv32imafc-sel4-resettable-musl.json | 32 ++++++++++++ ...cv32imafc-sel4-resettable-unwind-musl.json | 31 +++++++++++ .../riscv32imafc-sel4-resettable-unwind.json | 24 +++++++++ .../targets/riscv32imafc-sel4-resettable.json | 25 +++++++++ ...mafc-sel4-roottask-resettable-minimal.json | 31 +++++++++++ ...32imafc-sel4-roottask-resettable-musl.json | 39 ++++++++++++++ ...-sel4-roottask-resettable-unwind-musl.json | 38 ++++++++++++++ ...imafc-sel4-roottask-resettable-unwind.json | 31 +++++++++++ ...riscv32imafc-sel4-roottask-resettable.json | 32 ++++++++++++ .../riscv64gc-sel4-resettable-minimal.json | 29 +++++++++++ .../riscv64gc-sel4-resettable-musl.json | 37 ++++++++++++++ ...riscv64gc-sel4-resettable-unwind-musl.json | 36 +++++++++++++ .../riscv64gc-sel4-resettable-unwind.json | 29 +++++++++++ .../targets/riscv64gc-sel4-resettable.json | 30 +++++++++++ ...64gc-sel4-roottask-resettable-minimal.json | 36 +++++++++++++ ...scv64gc-sel4-roottask-resettable-musl.json | 44 ++++++++++++++++ ...-sel4-roottask-resettable-unwind-musl.json | 43 ++++++++++++++++ ...v64gc-sel4-roottask-resettable-unwind.json | 36 +++++++++++++ .../riscv64gc-sel4-roottask-resettable.json | 37 ++++++++++++++ .../riscv64imac-sel4-resettable-minimal.json | 29 +++++++++++ .../riscv64imac-sel4-resettable-musl.json | 37 ++++++++++++++ ...scv64imac-sel4-resettable-unwind-musl.json | 36 +++++++++++++ .../riscv64imac-sel4-resettable-unwind.json | 29 +++++++++++ .../targets/riscv64imac-sel4-resettable.json | 30 +++++++++++ ...imac-sel4-roottask-resettable-minimal.json | 36 +++++++++++++ ...v64imac-sel4-roottask-resettable-musl.json | 44 ++++++++++++++++ ...-sel4-roottask-resettable-unwind-musl.json | 43 ++++++++++++++++ ...4imac-sel4-roottask-resettable-unwind.json | 36 +++++++++++++ .../riscv64imac-sel4-roottask-resettable.json | 37 ++++++++++++++ .../x86_64-sel4-resettable-minimal.json | 36 +++++++++++++ .../targets/x86_64-sel4-resettable-musl.json | 44 ++++++++++++++++ .../x86_64-sel4-resettable-unwind-musl.json | 43 ++++++++++++++++ .../x86_64-sel4-resettable-unwind.json | 36 +++++++++++++ support/targets/x86_64-sel4-resettable.json | 37 ++++++++++++++ ...6_64-sel4-roottask-resettable-minimal.json | 43 ++++++++++++++++ .../x86_64-sel4-roottask-resettable-musl.json | 51 +++++++++++++++++++ ...-sel4-roottask-resettable-unwind-musl.json | 50 ++++++++++++++++++ ...86_64-sel4-roottask-resettable-unwind.json | 43 ++++++++++++++++ .../x86_64-sel4-roottask-resettable.json | 44 ++++++++++++++++ 73 files changed, 2506 insertions(+), 3 deletions(-) create mode 100644 crates/private/tests/root-task/reset/Cargo.nix create mode 100644 crates/private/tests/root-task/reset/Cargo.toml create mode 100644 crates/private/tests/root-task/reset/src/main.rs create mode 100644 support/targets/aarch64-sel4-resettable-minimal.json create mode 100644 support/targets/aarch64-sel4-resettable-musl.json create mode 100644 support/targets/aarch64-sel4-resettable-unwind-musl.json create mode 100644 support/targets/aarch64-sel4-resettable-unwind.json create mode 100644 support/targets/aarch64-sel4-resettable.json create mode 100644 support/targets/aarch64-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/aarch64-sel4-roottask-resettable-musl.json create mode 100644 support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json create mode 100644 support/targets/aarch64-sel4-roottask-resettable-unwind.json create mode 100644 support/targets/aarch64-sel4-roottask-resettable.json create mode 100644 support/targets/armv7a-sel4-resettable-minimal.json create mode 100644 support/targets/armv7a-sel4-resettable-musl.json create mode 100644 support/targets/armv7a-sel4-resettable.json create mode 100644 support/targets/armv7a-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/armv7a-sel4-roottask-resettable-musl.json create mode 100644 support/targets/armv7a-sel4-roottask-resettable.json create mode 100644 support/targets/riscv32imac-sel4-resettable-minimal.json create mode 100644 support/targets/riscv32imac-sel4-resettable-musl.json create mode 100644 support/targets/riscv32imac-sel4-resettable-unwind-musl.json create mode 100644 support/targets/riscv32imac-sel4-resettable-unwind.json create mode 100644 support/targets/riscv32imac-sel4-resettable.json create mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-musl.json create mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json create mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-unwind.json create mode 100644 support/targets/riscv32imac-sel4-roottask-resettable.json create mode 100644 support/targets/riscv32imafc-sel4-resettable-minimal.json create mode 100644 support/targets/riscv32imafc-sel4-resettable-musl.json create mode 100644 support/targets/riscv32imafc-sel4-resettable-unwind-musl.json create mode 100644 support/targets/riscv32imafc-sel4-resettable-unwind.json create mode 100644 support/targets/riscv32imafc-sel4-resettable.json create mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-musl.json create mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json create mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json create mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable.json create mode 100644 support/targets/riscv64gc-sel4-resettable-minimal.json create mode 100644 support/targets/riscv64gc-sel4-resettable-musl.json create mode 100644 support/targets/riscv64gc-sel4-resettable-unwind-musl.json create mode 100644 support/targets/riscv64gc-sel4-resettable-unwind.json create mode 100644 support/targets/riscv64gc-sel4-resettable.json create mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-musl.json create mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json create mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-unwind.json create mode 100644 support/targets/riscv64gc-sel4-roottask-resettable.json create mode 100644 support/targets/riscv64imac-sel4-resettable-minimal.json create mode 100644 support/targets/riscv64imac-sel4-resettable-musl.json create mode 100644 support/targets/riscv64imac-sel4-resettable-unwind-musl.json create mode 100644 support/targets/riscv64imac-sel4-resettable-unwind.json create mode 100644 support/targets/riscv64imac-sel4-resettable.json create mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-musl.json create mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json create mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-unwind.json create mode 100644 support/targets/riscv64imac-sel4-roottask-resettable.json create mode 100644 support/targets/x86_64-sel4-resettable-minimal.json create mode 100644 support/targets/x86_64-sel4-resettable-musl.json create mode 100644 support/targets/x86_64-sel4-resettable-unwind-musl.json create mode 100644 support/targets/x86_64-sel4-resettable-unwind.json create mode 100644 support/targets/x86_64-sel4-resettable.json create mode 100644 support/targets/x86_64-sel4-roottask-resettable-minimal.json create mode 100644 support/targets/x86_64-sel4-roottask-resettable-musl.json create mode 100644 support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json create mode 100644 support/targets/x86_64-sel4-roottask-resettable-unwind.json create mode 100644 support/targets/x86_64-sel4-roottask-resettable.json diff --git a/Cargo.lock b/Cargo.lock index 02b05df1a..03ea668e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3679,6 +3679,16 @@ dependencies = [ "sel4-test-root-task", ] +[[package]] +name = "tests-root-task-reset" +version = "0.1.0" +dependencies = [ + "sel4", + "sel4-reset", + "sel4-root-task", + "sel4-test-root-task", +] + [[package]] name = "tests-root-task-ring-test-harness" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 41144c4df..fb97acbc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -114,6 +114,7 @@ members = [ "crates/private/tests/root-task/loader", "crates/private/tests/root-task/musl", "crates/private/tests/root-task/panicking", + "crates/private/tests/root-task/reset", "crates/private/tests/root-task/ring-test-harness", "crates/private/tests/root-task/tls", "crates/private/tests/root-task/verus/core", diff --git a/crates/private/tests/root-task/reset/Cargo.nix b/crates/private/tests/root-task/reset/Cargo.nix new file mode 100644 index 000000000..41926b46f --- /dev/null +++ b/crates/private/tests/root-task/reset/Cargo.nix @@ -0,0 +1,19 @@ +# +# Copyright 2026, Colias Group, LLC +# +# SPDX-License-Identifier: BSD-2-Clause +# + +{ mk, localCrates, versions }: + +mk { + package.name = "tests-root-task-reset"; + dependencies = { + inherit (localCrates) + sel4 + sel4-root-task + sel4-reset + sel4-test-root-task + ; + }; +} diff --git a/crates/private/tests/root-task/reset/Cargo.toml b/crates/private/tests/root-task/reset/Cargo.toml new file mode 100644 index 000000000..6f4f70788 --- /dev/null +++ b/crates/private/tests/root-task/reset/Cargo.toml @@ -0,0 +1,23 @@ +# +# Copyright 2023, Colias Group, LLC +# +# SPDX-License-Identifier: BSD-2-Clause +# +# +# This file is generated from './Cargo.nix'. You can edit this file directly +# if you are not using this project's Cargo manifest management tools. +# See 'hacking/cargo-manifest-management/README.md' for more information. +# + +[package] +name = "tests-root-task-reset" +version = "0.1.0" +authors = ["Nick Spinale "] +edition = "2024" +license = "BSD-2-Clause" + +[dependencies] +sel4 = { path = "../../../../sel4" } +sel4-reset = { path = "../../../../experimental/sel4-reset" } +sel4-root-task = { path = "../../../../sel4-root-task" } +sel4-test-root-task = { path = "../../../support/sel4-test-root-task" } diff --git a/crates/private/tests/root-task/reset/src/main.rs b/crates/private/tests/root-task/reset/src/main.rs new file mode 100644 index 000000000..ef12423c5 --- /dev/null +++ b/crates/private/tests/root-task/reset/src/main.rs @@ -0,0 +1,42 @@ +// +// Copyright 2023, Colias Group, LLC +// +// SPDX-License-Identifier: BSD-2-Clause +// + +#![no_std] +#![no_main] +#![allow(static_mut_refs)] + +use sel4_reset::reset1; +use sel4_root_task::{debug_println, root_task}; + +const INIT: usize = 1337; + +static mut NOT_PERSISTENT: usize = INIT; + +#[unsafe(link_section = ".persistent")] +static mut PERSISTENT: usize = INIT; + +#[unsafe(link_section = ".persistent")] +static mut RESET_COUNT: usize = 0; + +#[root_task] +fn main(bootinfo: &sel4::BootInfoPtr) -> ! { + unsafe { + debug_println!("NOT_PERSISTENT: {NOT_PERSISTENT}"); + debug_println!("PERSISTENT: {PERSISTENT}"); + debug_println!("RESET_COUNT: {RESET_COUNT}"); + + if RESET_COUNT == 3 { + assert_eq!(NOT_PERSISTENT, INIT); + assert_eq!(PERSISTENT, INIT + RESET_COUNT); + sel4_test_root_task::indicate_success() + } + + NOT_PERSISTENT += 1; + PERSISTENT += 1; + RESET_COUNT += 1; + } + reset1(bootinfo.ptr() as usize) +} diff --git a/crates/sel4-generate-target-specs/src/main.rs b/crates/sel4-generate-target-specs/src/main.rs index 681492a84..193e0305f 100644 --- a/crates/sel4-generate-target-specs/src/main.rs +++ b/crates/sel4-generate-target-specs/src/main.rs @@ -180,9 +180,6 @@ impl Config { } fn filter(&self) -> bool { - if self.resettable && self.context != Context::Microkit { - return false; - } if self.unwind && !self.arch.unwinding_support() { return false; } diff --git a/hacking/nix/scope/world/instances/default.nix b/hacking/nix/scope/world/instances/default.nix index 64f106cf0..e58035984 100644 --- a/hacking/nix/scope/world/instances/default.nix +++ b/hacking/nix/scope/world/instances/default.nix @@ -25,6 +25,7 @@ , seL4Config , seL4RustEnvVars , seL4Modifications +, prepareResettable , muslForSeL4 , dummyLibunwind @@ -42,6 +43,7 @@ let haveMinimalRuntime = !isMicrokit; haveUnwindingSupport = !stdenv.hostPlatform.isAarch32; haveKernelLoader = stdenv.hostPlatform.isAarch || stdenv.hostPlatform.isRiscV; + haveReset = stdenv.hostPlatform.is64bit; haveCapDLInitializer = true; maybe = condition: v: if condition then v else null; @@ -160,6 +162,22 @@ in rec { }; }); + reset = + let + origRootTask = mkTask { + rootCrate = crates.tests-root-task-reset; + targetTriple = mkSeL4RustTargetTriple { + resettable = true; + }; + release = false; + }; + in maybe (haveFullRuntime && haveReset) (mkInstance { + rootTask.elf = prepareResettable origRootTask.elf; + extraPlatformArgs = lib.optionalAttrs canSimulate { + canAutomateSimply = true; + }; + }); + backtrace = maybe (haveFullRuntime && haveUnwindingSupport) (mkInstance rec { rootTask = let diff --git a/support/targets/aarch64-sel4-resettable-minimal.json b/support/targets/aarch64-sel4-resettable-minimal.json new file mode 100644 index 000000000..d0296efc4 --- /dev/null +++ b/support/targets/aarch64-sel4-resettable-minimal.json @@ -0,0 +1,39 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-resettable-musl.json b/support/targets/aarch64-sel4-resettable-musl.json new file mode 100644 index 000000000..75934e015 --- /dev/null +++ b/support/targets/aarch64-sel4-resettable-musl.json @@ -0,0 +1,47 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-resettable-unwind-musl.json b/support/targets/aarch64-sel4-resettable-unwind-musl.json new file mode 100644 index 000000000..fc633cf52 --- /dev/null +++ b/support/targets/aarch64-sel4-resettable-unwind-musl.json @@ -0,0 +1,46 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-resettable-unwind.json b/support/targets/aarch64-sel4-resettable-unwind.json new file mode 100644 index 000000000..b820d5496 --- /dev/null +++ b/support/targets/aarch64-sel4-resettable-unwind.json @@ -0,0 +1,39 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-resettable.json b/support/targets/aarch64-sel4-resettable.json new file mode 100644 index 000000000..fd4bae20a --- /dev/null +++ b/support/targets/aarch64-sel4-resettable.json @@ -0,0 +1,40 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-roottask-resettable-minimal.json b/support/targets/aarch64-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..8d8e8b1cf --- /dev/null +++ b/support/targets/aarch64-sel4-roottask-resettable-minimal.json @@ -0,0 +1,42 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419", + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-roottask-resettable-musl.json b/support/targets/aarch64-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..2c8821dae --- /dev/null +++ b/support/targets/aarch64-sel4-roottask-resettable-musl.json @@ -0,0 +1,50 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419", + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json b/support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json new file mode 100644 index 000000000..274e0e21a --- /dev/null +++ b/support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json @@ -0,0 +1,49 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419", + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-roottask-resettable-unwind.json b/support/targets/aarch64-sel4-roottask-resettable-unwind.json new file mode 100644 index 000000000..fd5cb6616 --- /dev/null +++ b/support/targets/aarch64-sel4-roottask-resettable-unwind.json @@ -0,0 +1,42 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419", + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/aarch64-sel4-roottask-resettable.json b/support/targets/aarch64-sel4-roottask-resettable.json new file mode 100644 index 000000000..1a7c85c09 --- /dev/null +++ b/support/targets/aarch64-sel4-roottask-resettable.json @@ -0,0 +1,43 @@ +{ + "arch": "aarch64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", + "default-uwtable": true, + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "+v8a,+strict-align,+neon", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-target": "aarch64-unknown-none", + "max-atomic-width": 128, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu": [ + "--fix-cortex-a53-843419" + ], + "gnu-lld": [ + "--fix-cortex-a53-843419", + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "stack-probes": { + "kind": "inline" + }, + "supported-sanitizers": [ + "kcfi", + "kernel-address", + "kernel-hwaddress" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/armv7a-sel4-resettable-minimal.json b/support/targets/armv7a-sel4-resettable-minimal.json new file mode 100644 index 000000000..ea0b820cd --- /dev/null +++ b/support/targets/armv7a-sel4-resettable-minimal.json @@ -0,0 +1,27 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+soft-float,-neon,+strict-align", + "frame-pointer": "always", + "has-thumb-interworking": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-floatabi": "soft", + "llvm-target": "armv7a-none-eabi", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/armv7a-sel4-resettable-musl.json b/support/targets/armv7a-sel4-resettable-musl.json new file mode 100644 index 000000000..bf6c579fa --- /dev/null +++ b/support/targets/armv7a-sel4-resettable-musl.json @@ -0,0 +1,35 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+soft-float,-neon,+strict-align", + "frame-pointer": "always", + "has-thread-local": true, + "has-thumb-interworking": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-floatabi": "soft", + "llvm-target": "armv7a-none-eabi", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/armv7a-sel4-resettable.json b/support/targets/armv7a-sel4-resettable.json new file mode 100644 index 000000000..477d89a6f --- /dev/null +++ b/support/targets/armv7a-sel4-resettable.json @@ -0,0 +1,28 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+soft-float,-neon,+strict-align", + "frame-pointer": "always", + "has-thread-local": true, + "has-thumb-interworking": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-floatabi": "soft", + "llvm-target": "armv7a-none-eabi", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/armv7a-sel4-roottask-resettable-minimal.json b/support/targets/armv7a-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..2456099e2 --- /dev/null +++ b/support/targets/armv7a-sel4-roottask-resettable-minimal.json @@ -0,0 +1,34 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+soft-float,-neon,+strict-align", + "frame-pointer": "always", + "has-thumb-interworking": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-floatabi": "soft", + "llvm-target": "armv7a-none-eabi", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/armv7a-sel4-roottask-resettable-musl.json b/support/targets/armv7a-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..ff79227b9 --- /dev/null +++ b/support/targets/armv7a-sel4-roottask-resettable-musl.json @@ -0,0 +1,42 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+soft-float,-neon,+strict-align", + "frame-pointer": "always", + "has-thread-local": true, + "has-thumb-interworking": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-floatabi": "soft", + "llvm-target": "armv7a-none-eabi", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/armv7a-sel4-roottask-resettable.json b/support/targets/armv7a-sel4-roottask-resettable.json new file mode 100644 index 000000000..45384c9b3 --- /dev/null +++ b/support/targets/armv7a-sel4-roottask-resettable.json @@ -0,0 +1,35 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+soft-float,-neon,+strict-align", + "frame-pointer": "always", + "has-thread-local": true, + "has-thumb-interworking": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-floatabi": "soft", + "llvm-target": "armv7a-none-eabi", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-resettable-minimal.json b/support/targets/riscv32imac-sel4-resettable-minimal.json new file mode 100644 index 000000000..9bb83de99 --- /dev/null +++ b/support/targets/riscv32imac-sel4-resettable-minimal.json @@ -0,0 +1,24 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-resettable-musl.json b/support/targets/riscv32imac-sel4-resettable-musl.json new file mode 100644 index 000000000..b4988649b --- /dev/null +++ b/support/targets/riscv32imac-sel4-resettable-musl.json @@ -0,0 +1,32 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-resettable-unwind-musl.json b/support/targets/riscv32imac-sel4-resettable-unwind-musl.json new file mode 100644 index 000000000..ebebb1c34 --- /dev/null +++ b/support/targets/riscv32imac-sel4-resettable-unwind-musl.json @@ -0,0 +1,31 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-resettable-unwind.json b/support/targets/riscv32imac-sel4-resettable-unwind.json new file mode 100644 index 000000000..1390878c5 --- /dev/null +++ b/support/targets/riscv32imac-sel4-resettable-unwind.json @@ -0,0 +1,24 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-resettable.json b/support/targets/riscv32imac-sel4-resettable.json new file mode 100644 index 000000000..ddef833c8 --- /dev/null +++ b/support/targets/riscv32imac-sel4-resettable.json @@ -0,0 +1,25 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-minimal.json b/support/targets/riscv32imac-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..256be7804 --- /dev/null +++ b/support/targets/riscv32imac-sel4-roottask-resettable-minimal.json @@ -0,0 +1,31 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-musl.json b/support/targets/riscv32imac-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..61bd61ddc --- /dev/null +++ b/support/targets/riscv32imac-sel4-roottask-resettable-musl.json @@ -0,0 +1,39 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json new file mode 100644 index 000000000..d8bfee840 --- /dev/null +++ b/support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json @@ -0,0 +1,38 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-unwind.json b/support/targets/riscv32imac-sel4-roottask-resettable-unwind.json new file mode 100644 index 000000000..0449aa888 --- /dev/null +++ b/support/targets/riscv32imac-sel4-roottask-resettable-unwind.json @@ -0,0 +1,31 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable.json b/support/targets/riscv32imac-sel4-roottask-resettable.json new file mode 100644 index 000000000..7081ed8c8 --- /dev/null +++ b/support/targets/riscv32imac-sel4-roottask-resettable.json @@ -0,0 +1,32 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-resettable-minimal.json b/support/targets/riscv32imafc-sel4-resettable-minimal.json new file mode 100644 index 000000000..ba646d9a2 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-resettable-minimal.json @@ -0,0 +1,24 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-resettable-musl.json b/support/targets/riscv32imafc-sel4-resettable-musl.json new file mode 100644 index 000000000..ceb731a18 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-resettable-musl.json @@ -0,0 +1,32 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-resettable-unwind-musl.json b/support/targets/riscv32imafc-sel4-resettable-unwind-musl.json new file mode 100644 index 000000000..85bf4b4b4 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-resettable-unwind-musl.json @@ -0,0 +1,31 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-resettable-unwind.json b/support/targets/riscv32imafc-sel4-resettable-unwind.json new file mode 100644 index 000000000..777dee7cc --- /dev/null +++ b/support/targets/riscv32imafc-sel4-resettable-unwind.json @@ -0,0 +1,24 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-resettable.json b/support/targets/riscv32imafc-sel4-resettable.json new file mode 100644 index 000000000..32f896050 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-resettable.json @@ -0,0 +1,25 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json b/support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..15390cac4 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json @@ -0,0 +1,31 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-musl.json b/support/targets/riscv32imafc-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..4716a7c28 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-roottask-resettable-musl.json @@ -0,0 +1,39 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json new file mode 100644 index 000000000..53833e253 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json @@ -0,0 +1,38 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json b/support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json new file mode 100644 index 000000000..e549ba442 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json @@ -0,0 +1,31 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable.json b/support/targets/riscv32imafc-sel4-roottask-resettable.json new file mode 100644 index 000000000..01c461442 --- /dev/null +++ b/support/targets/riscv32imafc-sel4-roottask-resettable.json @@ -0,0 +1,32 @@ +{ + "arch": "riscv32", + "cpu": "generic-rv32", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c,+f", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "ilp32f", + "llvm-target": "riscv32", + "max-atomic-width": 32, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "target-pointer-width": 32 +} diff --git a/support/targets/riscv64gc-sel4-resettable-minimal.json b/support/targets/riscv64gc-sel4-resettable-minimal.json new file mode 100644 index 000000000..00cd396e5 --- /dev/null +++ b/support/targets/riscv64gc-sel4-resettable-minimal.json @@ -0,0 +1,29 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-resettable-musl.json b/support/targets/riscv64gc-sel4-resettable-musl.json new file mode 100644 index 000000000..3473628fd --- /dev/null +++ b/support/targets/riscv64gc-sel4-resettable-musl.json @@ -0,0 +1,37 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-resettable-unwind-musl.json b/support/targets/riscv64gc-sel4-resettable-unwind-musl.json new file mode 100644 index 000000000..a70783c90 --- /dev/null +++ b/support/targets/riscv64gc-sel4-resettable-unwind-musl.json @@ -0,0 +1,36 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-resettable-unwind.json b/support/targets/riscv64gc-sel4-resettable-unwind.json new file mode 100644 index 000000000..1eac26354 --- /dev/null +++ b/support/targets/riscv64gc-sel4-resettable-unwind.json @@ -0,0 +1,29 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-resettable.json b/support/targets/riscv64gc-sel4-resettable.json new file mode 100644 index 000000000..c10880796 --- /dev/null +++ b/support/targets/riscv64gc-sel4-resettable.json @@ -0,0 +1,30 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-minimal.json b/support/targets/riscv64gc-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..f33ee96d4 --- /dev/null +++ b/support/targets/riscv64gc-sel4-roottask-resettable-minimal.json @@ -0,0 +1,36 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-musl.json b/support/targets/riscv64gc-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..c4c12dc61 --- /dev/null +++ b/support/targets/riscv64gc-sel4-roottask-resettable-musl.json @@ -0,0 +1,44 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json new file mode 100644 index 000000000..8a857dc51 --- /dev/null +++ b/support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json @@ -0,0 +1,43 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-unwind.json b/support/targets/riscv64gc-sel4-roottask-resettable-unwind.json new file mode 100644 index 000000000..69327a8d1 --- /dev/null +++ b/support/targets/riscv64gc-sel4-roottask-resettable-unwind.json @@ -0,0 +1,36 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable.json b/support/targets/riscv64gc-sel4-roottask-resettable.json new file mode 100644 index 000000000..09614ff5d --- /dev/null +++ b/support/targets/riscv64gc-sel4-roottask-resettable.json @@ -0,0 +1,37 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64d", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-resettable-minimal.json b/support/targets/riscv64imac-sel4-resettable-minimal.json new file mode 100644 index 000000000..6641fdf36 --- /dev/null +++ b/support/targets/riscv64imac-sel4-resettable-minimal.json @@ -0,0 +1,29 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-resettable-musl.json b/support/targets/riscv64imac-sel4-resettable-musl.json new file mode 100644 index 000000000..df7b09d86 --- /dev/null +++ b/support/targets/riscv64imac-sel4-resettable-musl.json @@ -0,0 +1,37 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-resettable-unwind-musl.json b/support/targets/riscv64imac-sel4-resettable-unwind-musl.json new file mode 100644 index 000000000..4113943e8 --- /dev/null +++ b/support/targets/riscv64imac-sel4-resettable-unwind-musl.json @@ -0,0 +1,36 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-resettable-unwind.json b/support/targets/riscv64imac-sel4-resettable-unwind.json new file mode 100644 index 000000000..9aadad55b --- /dev/null +++ b/support/targets/riscv64imac-sel4-resettable-unwind.json @@ -0,0 +1,29 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-resettable.json b/support/targets/riscv64imac-sel4-resettable.json new file mode 100644 index 000000000..ad0f2470b --- /dev/null +++ b/support/targets/riscv64imac-sel4-resettable.json @@ -0,0 +1,30 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-minimal.json b/support/targets/riscv64imac-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..0578753d5 --- /dev/null +++ b/support/targets/riscv64imac-sel4-roottask-resettable-minimal.json @@ -0,0 +1,36 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-musl.json b/support/targets/riscv64imac-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..0bb997ac6 --- /dev/null +++ b/support/targets/riscv64imac-sel4-roottask-resettable-musl.json @@ -0,0 +1,44 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json new file mode 100644 index 000000000..efd7f80f2 --- /dev/null +++ b/support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json @@ -0,0 +1,43 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "env": "musl", + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "linux", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-unwind.json b/support/targets/riscv64imac-sel4-roottask-resettable-unwind.json new file mode 100644 index 000000000..fbebe3720 --- /dev/null +++ b/support/targets/riscv64imac-sel4-roottask-resettable-unwind.json @@ -0,0 +1,36 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable.json b/support/targets/riscv64imac-sel4-roottask-resettable.json new file mode 100644 index 000000000..f87c40aad --- /dev/null +++ b/support/targets/riscv64imac-sel4-roottask-resettable.json @@ -0,0 +1,37 @@ +{ + "arch": "riscv64", + "code-model": "medium", + "cpu": "generic-rv64", + "crt-objects-fallback": "false", + "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", + "emit-debug-gdb-scripts": false, + "exe-suffix": ".elf", + "features": "+m,+a,+c", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "linker": "rust-lld", + "linker-flavor": "gnu-lld", + "llvm-abiname": "lp64", + "llvm-target": "riscv64", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "panic-strategy": "abort", + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "supported-sanitizers": [ + "shadow-call-stack", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-resettable-minimal.json b/support/targets/x86_64-sel4-resettable-minimal.json new file mode 100644 index 000000000..3ad41aae4 --- /dev/null +++ b/support/targets/x86_64-sel4-resettable-minimal.json @@ -0,0 +1,36 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "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", + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "panic-strategy": "abort", + "plt-by-default": false, + "position-independent-executables": true, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-resettable-musl.json b/support/targets/x86_64-sel4-resettable-musl.json new file mode 100644 index 000000000..d26ad565b --- /dev/null +++ b/support/targets/x86_64-sel4-resettable-musl.json @@ -0,0 +1,44 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "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", + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "os": "linux", + "panic-strategy": "abort", + "plt-by-default": false, + "position-independent-executables": true, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-resettable-unwind-musl.json b/support/targets/x86_64-sel4-resettable-unwind-musl.json new file mode 100644 index 000000000..102a13544 --- /dev/null +++ b/support/targets/x86_64-sel4-resettable-unwind-musl.json @@ -0,0 +1,43 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "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", + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "os": "linux", + "plt-by-default": false, + "position-independent-executables": true, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-resettable-unwind.json b/support/targets/x86_64-sel4-resettable-unwind.json new file mode 100644 index 000000000..e4e1399bb --- /dev/null +++ b/support/targets/x86_64-sel4-resettable-unwind.json @@ -0,0 +1,36 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "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", + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "plt-by-default": false, + "position-independent-executables": true, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-resettable.json b/support/targets/x86_64-sel4-resettable.json new file mode 100644 index 000000000..616afd659 --- /dev/null +++ b/support/targets/x86_64-sel4-resettable.json @@ -0,0 +1,37 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "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", + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "panic-strategy": "abort", + "plt-by-default": false, + "position-independent-executables": true, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-roottask-resettable-minimal.json b/support/targets/x86_64-sel4-roottask-resettable-minimal.json new file mode 100644 index 000000000..320a58c60 --- /dev/null +++ b/support/targets/x86_64-sel4-roottask-resettable-minimal.json @@ -0,0 +1,43 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "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", + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "panic-strategy": "abort", + "plt-by-default": false, + "position-independent-executables": true, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-roottask-resettable-musl.json b/support/targets/x86_64-sel4-roottask-resettable-musl.json new file mode 100644 index 000000000..c7b1a2482 --- /dev/null +++ b/support/targets/x86_64-sel4-roottask-resettable-musl.json @@ -0,0 +1,51 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "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", + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "os": "linux", + "panic-strategy": "abort", + "plt-by-default": false, + "position-independent-executables": true, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json b/support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json new file mode 100644 index 000000000..ee64da812 --- /dev/null +++ b/support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json @@ -0,0 +1,50 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "crt-static-default": true, + "crt-static-respected": true, + "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", + "disable-redzone": true, + "env": "musl", + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "os": "linux", + "plt-by-default": false, + "position-independent-executables": true, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-family": [ + "unix" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-roottask-resettable-unwind.json b/support/targets/x86_64-sel4-roottask-resettable-unwind.json new file mode 100644 index 000000000..1cbf1b671 --- /dev/null +++ b/support/targets/x86_64-sel4-roottask-resettable-unwind.json @@ -0,0 +1,43 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "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", + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "plt-by-default": false, + "position-independent-executables": true, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-pointer-width": 64 +} diff --git a/support/targets/x86_64-sel4-roottask-resettable.json b/support/targets/x86_64-sel4-roottask-resettable.json new file mode 100644 index 000000000..5d6855dd3 --- /dev/null +++ b/support/targets/x86_64-sel4-roottask-resettable.json @@ -0,0 +1,44 @@ +{ + "arch": "x86_64", + "code-model": "kernel", + "cpu": "x86-64", + "crt-objects-fallback": "false", + "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", + "disable-redzone": true, + "exe-suffix": ".elf", + "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", + "has-thread-local": true, + "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", + "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 + }, + "panic-strategy": "abort", + "plt-by-default": false, + "position-independent-executables": true, + "pre-link-args": { + "gnu-lld": [ + "-z", + "max-page-size=4096", + "--no-rosegment" + ] + }, + "relocation-model": "static", + "relro-level": "off", + "rustc-abi": "softfloat", + "stack-probes": { + "kind": "inline" + }, + "static-position-independent-executables": true, + "supported-sanitizers": [ + "kcfi", + "kernel-address" + ], + "target-pointer-width": 64 +} From cb8a57278169be1be24adf7d65e370156ea84ee3 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 01:10:56 -0700 Subject: [PATCH 08/22] sel4-reset: Support remaining architectures Signed-off-by: Nick Spinale --- crates/experimental/sel4-reset/src/lib.rs | 27 ++++++++++++++++++- hacking/nix/scope/world/instances/default.nix | 3 +-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index ee64a3c82..8d24e07b2 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -15,7 +15,13 @@ mod rodata_var; use rodata_var::rodata_var; -#[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))] +#[cfg(not(any( + target_arch = "aarch64", + target_arch = "arm", + target_arch = "riscv64", + target_arch = "riscv32", + target_arch = "x86_64", +)))] compile_error!("unsupported architecture"); // // // @@ -136,6 +142,25 @@ global_asm! { mov sp, x9 b __sel4_reset__rust_entrypoint "#, + #[cfg(target_arch = "arm")] + r#" + ldr r8, =__sel4_reset__stack_bottom + ldr r8, [r8] + mov sp, r8 + b __sel4_reset__rust_entrypoint + "#, + #[cfg(target_arch = "riscv64")] + r#" + la sp, __sel4_reset__stack_bottom + ld sp, (sp) + j __sel4_reset__rust_entrypoint + "#, + #[cfg(target_arch = "riscv32")] + r#" + la sp, __sel4_reset__stack_bottom + lw sp, (sp) + j __sel4_reset__rust_entrypoint + "#, #[cfg(target_arch = "x86_64")] r#" mov rsp, __sel4_reset__stack_bottom diff --git a/hacking/nix/scope/world/instances/default.nix b/hacking/nix/scope/world/instances/default.nix index e58035984..4489ab7e2 100644 --- a/hacking/nix/scope/world/instances/default.nix +++ b/hacking/nix/scope/world/instances/default.nix @@ -43,7 +43,6 @@ let haveMinimalRuntime = !isMicrokit; haveUnwindingSupport = !stdenv.hostPlatform.isAarch32; haveKernelLoader = stdenv.hostPlatform.isAarch || stdenv.hostPlatform.isRiscV; - haveReset = stdenv.hostPlatform.is64bit; haveCapDLInitializer = true; maybe = condition: v: if condition then v else null; @@ -171,7 +170,7 @@ in rec { }; release = false; }; - in maybe (haveFullRuntime && haveReset) (mkInstance { + in maybe haveFullRuntime (mkInstance { rootTask.elf = prepareResettable origRootTask.elf; extraPlatformArgs = lib.optionalAttrs canSimulate { canAutomateSimply = true; From 33465126bbdc20e13aece375e08545a0b59129f2 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 01:25:51 -0700 Subject: [PATCH 09/22] Factor out sel4-rodata-static Signed-off-by: Nick Spinale --- Cargo.lock | 5 +++++ Cargo.toml | 1 + crates/experimental/sel4-reset/Cargo.nix | 2 +- crates/experimental/sel4-reset/Cargo.toml | 1 + crates/experimental/sel4-reset/src/lib.rs | 15 ++++++--------- crates/sel4-rodata-static/Cargo.nix | 11 +++++++++++ crates/sel4-rodata-static/Cargo.toml | 17 +++++++++++++++++ .../src/lib.rs} | 16 ++++++++++------ 8 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 crates/sel4-rodata-static/Cargo.nix create mode 100644 crates/sel4-rodata-static/Cargo.toml rename crates/{experimental/sel4-reset/src/rodata_var.rs => sel4-rodata-static/src/lib.rs} (59%) diff --git a/Cargo.lock b/Cargo.lock index 03ea668e7..8265843e4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2902,6 +2902,7 @@ name = "sel4-reset" version = "0.1.0" dependencies = [ "cfg-if", + "sel4-rodata-static", "sel4-stack", ] @@ -2915,6 +2916,10 @@ dependencies = [ "sel4-synthetic-elf", ] +[[package]] +name = "sel4-rodata-static" +version = "0.1.0" + [[package]] name = "sel4-root-task" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index fb97acbc4..5b02100f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -147,6 +147,7 @@ members = [ "crates/sel4-panicking/env", "crates/sel4-platform-info", "crates/sel4-platform-info/types", + "crates/sel4-rodata-static", "crates/sel4-root-task", "crates/sel4-root-task/macros", "crates/sel4-runtime-common", diff --git a/crates/experimental/sel4-reset/Cargo.nix b/crates/experimental/sel4-reset/Cargo.nix index 6c91b430f..7aa945365 100644 --- a/crates/experimental/sel4-reset/Cargo.nix +++ b/crates/experimental/sel4-reset/Cargo.nix @@ -10,6 +10,6 @@ mk { package.name = "sel4-reset"; dependencies = { inherit (versions) cfg-if; - inherit (localCrates) sel4-stack; + inherit (localCrates) sel4-stack sel4-rodata-static; }; } diff --git a/crates/experimental/sel4-reset/Cargo.toml b/crates/experimental/sel4-reset/Cargo.toml index c5ef43938..969f60722 100644 --- a/crates/experimental/sel4-reset/Cargo.toml +++ b/crates/experimental/sel4-reset/Cargo.toml @@ -18,4 +18,5 @@ license = "BSD-2-Clause" [dependencies] cfg-if = "1.0.4" +sel4-rodata-static = { path = "../../sel4-rodata-static" } sel4-stack = { path = "../../sel4-stack" } diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index 8d24e07b2..3d579334d 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -10,10 +10,7 @@ use core::arch::global_asm; use core::slice; use sel4_stack::{Stack, StackBottom}; - -mod rodata_var; - -use rodata_var::rodata_var; +use sel4_rodata_static::rodata_static; #[cfg(not(any( target_arch = "aarch64", @@ -53,11 +50,11 @@ impl Regions<'_> { } unsafe fn get_regions() -> Regions<'static> { - let start = *rodata_var!(sel4_reset_regions_start: usize); - let meta_offset = *rodata_var!(sel4_reset_regions_meta_offset: usize); - let meta_count = *rodata_var!(sel4_reset_regions_meta_count: usize); - let data_offset = *rodata_var!(sel4_reset_regions_data_offset: usize); - let data_size = *rodata_var!(sel4_reset_regions_data_size: usize); + let start = *rodata_static!(sel4_reset_regions_start: usize); + let meta_offset = *rodata_static!(sel4_reset_regions_meta_offset: usize); + let meta_count = *rodata_static!(sel4_reset_regions_meta_count: usize); + let data_offset = *rodata_static!(sel4_reset_regions_data_offset: usize); + let data_size = *rodata_static!(sel4_reset_regions_data_size: usize); unsafe { Regions { meta: slice::from_raw_parts((start + meta_offset) as *const _, meta_count), diff --git a/crates/sel4-rodata-static/Cargo.nix b/crates/sel4-rodata-static/Cargo.nix new file mode 100644 index 000000000..07852c03a --- /dev/null +++ b/crates/sel4-rodata-static/Cargo.nix @@ -0,0 +1,11 @@ +# +# Copyright 2026, Colias Group, LLC +# +# SPDX-License-Identifier: BSD-2-Clause +# + +{ mk }: + +mk { + package.name = "sel4-rodata-static"; +} diff --git a/crates/sel4-rodata-static/Cargo.toml b/crates/sel4-rodata-static/Cargo.toml new file mode 100644 index 000000000..7b358de23 --- /dev/null +++ b/crates/sel4-rodata-static/Cargo.toml @@ -0,0 +1,17 @@ +# +# Copyright 2023, Colias Group, LLC +# +# SPDX-License-Identifier: BSD-2-Clause +# +# +# This file is generated from './Cargo.nix'. You can edit this file directly +# if you are not using this project's Cargo manifest management tools. +# See 'hacking/cargo-manifest-management/README.md' for more information. +# + +[package] +name = "sel4-rodata-static" +version = "0.1.0" +authors = ["Nick Spinale "] +edition = "2024" +license = "BSD-2-Clause" diff --git a/crates/experimental/sel4-reset/src/rodata_var.rs b/crates/sel4-rodata-static/src/lib.rs similarity index 59% rename from crates/experimental/sel4-reset/src/rodata_var.rs rename to crates/sel4-rodata-static/src/lib.rs index 3188f82eb..e1fe803d8 100644 --- a/crates/experimental/sel4-reset/src/rodata_var.rs +++ b/crates/sel4-rodata-static/src/lib.rs @@ -4,8 +4,9 @@ // SPDX-License-Identifier: BSD-2-Clause // -// HACK to force variables into .rodata without causing .rodata to end up in a PF_W segment -macro_rules! rodata_var { +/// Forces a static into `.rodata` without causing `.rodata` to end up in a `PF_W` segment +#[macro_export] +macro_rules! rodata_static { ($ident:ident: $ty:ty) => {{ mod asm { unsafe extern "C" { @@ -13,7 +14,7 @@ macro_rules! rodata_var { } core::arch::global_asm! { r#" - .section .rodata + .section .rodata, "a", %progbits .global {ident} .size {ident}, {size} .p2align {align} @@ -21,12 +22,15 @@ macro_rules! rodata_var { .skip {size}, 0 "#, ident = sym $ident, - size = const core::mem::size_of::<$ty>(), - align = const core::mem::align_of::<$ty>(), + size = const $crate::_private::size_of::<$ty>(), + align = const $crate::_private::align_of::<$ty>(), } } unsafe { &asm::$ident } }}; } -pub(crate) use rodata_var; +#[doc(hidden)] +pub mod _private { + pub use core::mem::{size_of, align_of}; +} From 0cc3e4b59ad792d7954958c1faac91daa41222d8 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 01:35:11 -0700 Subject: [PATCH 10/22] sel4-microkit: Use sel4-rodata-static For compatibility with sel4-reset Signed-off-by: Nick Spinale --- Cargo.lock | 2 +- .../microkit/banscii/pds/artist/src/main.rs | 6 +- .../banscii/pds/assistant/src/main.rs | 8 +-- .../banscii/pds/serial-driver/src/main.rs | 4 +- .../pds/virtio-blk-driver/src/main.rs | 6 +- .../pds/virtio-net-driver/src/main.rs | 6 +- crates/experimental/sel4-reset/src/lib.rs | 2 +- crates/sel4-microkit/base/Cargo.nix | 2 +- crates/sel4-microkit/base/Cargo.toml | 2 +- crates/sel4-microkit/base/src/lib.rs | 3 +- crates/sel4-microkit/base/src/symbols.rs | 61 +++++-------------- crates/sel4-rodata-static/src/lib.rs | 10 ++- 12 files changed, 41 insertions(+), 71 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8265843e4..7eb8d2600 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2756,7 +2756,7 @@ name = "sel4-microkit-base" version = "0.1.0" dependencies = [ "sel4", - "sel4-immutable-cell", + "sel4-rodata-static", ] [[package]] diff --git a/crates/examples/microkit/banscii/pds/artist/src/main.rs b/crates/examples/microkit/banscii/pds/artist/src/main.rs index 18879a058..16da33996 100644 --- a/crates/examples/microkit/banscii/pds/artist/src/main.rs +++ b/crates/examples/microkit/banscii/pds/artist/src/main.rs @@ -31,16 +31,16 @@ use artistic_secrets::Masterpiece; #[protection_domain(heap_size = 0x10000)] fn init() -> HandlerImpl { - let assistant = Channel::new(*var!(assistant_channel_id: usize = usize::MAX)); + let assistant = Channel::new(*var!(assistant_channel_id: usize)); - let region_in_size = *var!(region_in_size: usize = 0); + let region_in_size = *var!(region_in_size: usize); let region_in = unsafe { SharedMemoryRef::new_read_only( memory_region_symbol!(region_in_start: *mut [u8], n = region_in_size), ) }; - let region_out_size = *var!(region_out_size: usize = 0); + let region_out_size = *var!(region_out_size: usize); let region_out = unsafe { SharedMemoryRef::new( memory_region_symbol!(region_out_start: *mut [u8], n = region_out_size), diff --git a/crates/examples/microkit/banscii/pds/assistant/src/main.rs b/crates/examples/microkit/banscii/pds/assistant/src/main.rs index cf7725b97..fb09d0d0e 100644 --- a/crates/examples/microkit/banscii/pds/assistant/src/main.rs +++ b/crates/examples/microkit/banscii/pds/assistant/src/main.rs @@ -36,17 +36,17 @@ const MAX_SUBJECT_LEN: usize = 16; #[protection_domain(heap_size = 0x10000)] fn init() -> impl Handler { - let serial_driver = Channel::new(*var!(serial_driver_channel_id: usize = usize::MAX)); - let artist = Channel::new(*var!(artist_channel_id: usize = usize::MAX)); + let serial_driver = Channel::new(*var!(serial_driver_channel_id: usize)); + let artist = Channel::new(*var!(artist_channel_id: usize)); - let region_in_size = *var!(region_in_size: usize = 0); + let region_in_size = *var!(region_in_size: usize); let region_in = unsafe { SharedMemoryRef::new_read_only( memory_region_symbol!(region_in_start: *mut [u8], n = region_in_size), ) }; - let region_out_size = *var!(region_out_size: usize = 0); + let region_out_size = *var!(region_out_size: usize); let region_out = unsafe { SharedMemoryRef::new( memory_region_symbol!(region_out_start: *mut [u8], n = region_out_size), diff --git a/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs b/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs index ec70159b1..20b8cf6d0 100644 --- a/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs +++ b/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs @@ -17,7 +17,7 @@ use sel4_pl011_driver::Driver; fn init() -> impl Handler { let driver = unsafe { Driver::new(memory_region_symbol!(serial_register_block: *mut ()).as_ptr()) }; - let device = Channel::new(*var!(serial_irq_id: usize = usize::MAX)); - let assistant = Channel::new(*var!(assistant_channel_id: usize = usize::MAX)); + let device = Channel::new(*var!(serial_irq_id: usize)); + let assistant = Channel::new(*var!(assistant_channel_id: usize)); HandlerImpl::new(driver, device, assistant) } diff --git a/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs b/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs index a303519f9..6ad5b64df 100644 --- a/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs +++ b/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs @@ -48,13 +48,13 @@ const QUEUE_SIZE: usize = 4; fn init() -> HandlerImpl { HalImpl::init( config::VIRTIO_BLK_DRIVER_DMA_SIZE, - *var!(virtio_blk_driver_dma_vaddr: usize = 0), - *var!(virtio_blk_driver_dma_paddr: usize = 0), + *var!(virtio_blk_driver_dma_vaddr: usize), + *var!(virtio_blk_driver_dma_paddr: usize), ); let mut dev = { let header = NonNull::new( - (*var!(virtio_blk_mmio_vaddr: usize = 0) + config::VIRTIO_BLK_MMIO_OFFSET) + (*var!(virtio_blk_mmio_vaddr: usize) + config::VIRTIO_BLK_MMIO_OFFSET) as *mut VirtIOHeader, ) .unwrap(); diff --git a/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs b/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs index a1d01310e..4176b677a 100644 --- a/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs +++ b/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs @@ -37,13 +37,13 @@ const NET_BUFFER_LEN: usize = 2048; fn init() -> HandlerImpl>> { HalImpl::init( config::VIRTIO_NET_DRIVER_DMA_SIZE, - *var!(virtio_net_driver_dma_vaddr: usize = 0), - *var!(virtio_net_driver_dma_paddr: usize = 0), + *var!(virtio_net_driver_dma_vaddr: usize), + *var!(virtio_net_driver_dma_paddr: usize), ); let mut dev = { let header = NonNull::new( - (*var!(virtio_net_mmio_vaddr: usize = 0) + config::VIRTIO_NET_MMIO_OFFSET) + (*var!(virtio_net_mmio_vaddr: usize) + config::VIRTIO_NET_MMIO_OFFSET) as *mut VirtIOHeader, ) .unwrap(); diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index 3d579334d..48eac0c6c 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -9,8 +9,8 @@ use core::arch::global_asm; use core::slice; -use sel4_stack::{Stack, StackBottom}; use sel4_rodata_static::rodata_static; +use sel4_stack::{Stack, StackBottom}; #[cfg(not(any( target_arch = "aarch64", diff --git a/crates/sel4-microkit/base/Cargo.nix b/crates/sel4-microkit/base/Cargo.nix index f2c3e7a58..734c12694 100644 --- a/crates/sel4-microkit/base/Cargo.nix +++ b/crates/sel4-microkit/base/Cargo.nix @@ -10,7 +10,7 @@ mk { package.name = "sel4-microkit-base"; dependencies = { inherit (localCrates) - sel4-immutable-cell + sel4-rodata-static sel4 ; }; diff --git a/crates/sel4-microkit/base/Cargo.toml b/crates/sel4-microkit/base/Cargo.toml index 6d14fca27..df8f35c06 100644 --- a/crates/sel4-microkit/base/Cargo.toml +++ b/crates/sel4-microkit/base/Cargo.toml @@ -22,4 +22,4 @@ extern-symbols = [] [dependencies] sel4 = { path = "../../sel4" } -sel4-immutable-cell = { path = "../../sel4-immutable-cell" } +sel4-rodata-static = { path = "../../sel4-rodata-static" } diff --git a/crates/sel4-microkit/base/src/lib.rs b/crates/sel4-microkit/base/src/lib.rs index 200f46a07..02914478d 100644 --- a/crates/sel4-microkit/base/src/lib.rs +++ b/crates/sel4-microkit/base/src/lib.rs @@ -5,7 +5,6 @@ // #![no_std] -#![feature(used_with_arg)] #[cfg(feature = "alloc")] extern crate alloc; @@ -33,5 +32,5 @@ pub use symbols::{ipc_buffer_ptr, pd_is_passive, pd_name}; // For macros #[doc(hidden)] pub mod _private { - pub use sel4_immutable_cell::ImmutableCell; + pub use sel4_rodata_static::rodata_static; } diff --git a/crates/sel4-microkit/base/src/symbols.rs b/crates/sel4-microkit/base/src/symbols.rs index 77d8a96ed..841ddcf0d 100644 --- a/crates/sel4-microkit/base/src/symbols.rs +++ b/crates/sel4-microkit/base/src/symbols.rs @@ -16,12 +16,9 @@ use core::str::{self, Utf8Error}; /// The following fragment demonstrates its usage: /// /// ```rust -/// let my_var: &'static T = var!(my_var_symbol_name: T = MY_DEFAULT_VALUE) +/// let my_var: &'static T = var!(my_var_symbol_name: T) /// ``` /// -/// where `MY_DEFAULT_VALUE` is the value that the variable will be given at compile-time, before -/// the protection domain image is passed to the `microkit` tool. -/// /// The patching mechanism used by the `microkit` tool requires that the symbol be allocated space /// in the protection domain's ELF file, so we declare the symbol as part of the `.data` section. /// @@ -30,39 +27,12 @@ use core::str::{self, Utf8Error}; /// # Examples /// /// ```rust -/// let foo = bar + *var!(baz: usize = 0); -/// ``` -/// -/// # Note -/// -/// The `microkit` tool requires memory region address symbols to be present in protection domain -/// binaries. To prevent Rust from optimizing them out in cases where it is not used, add the -/// unstable `#[used(linker)]` attribute. For example: -/// -/// ```rust -/// #![feature(used_with_arg)] -/// -/// // might be optimized away if not used -/// memory_region_symbol!(foo: usize = 0) -/// -/// // won't be optimized away -/// memory_region_symbol! { -/// #[used(linker)] -/// foo: usize = 0 -/// } +/// let foo = bar + *var!(baz: usize); /// ``` #[macro_export] macro_rules! var { - ($(#[$attrs:meta])* $symbol:ident: $ty:ty = $default:expr) => {{ - use $crate::_private::ImmutableCell; - - #[allow(non_upper_case_globals)] - $(#[$attrs])* - #[unsafe(no_mangle)] - #[unsafe(link_section = ".data")] - static $symbol: ImmutableCell<$ty> = ImmutableCell::new($default); - - $symbol.get() + ($(#[$attrs:meta])* $symbol:ident: $ty:ty) => {{ + $crate::_private::rodata_static!($symbol: $ty) }} } @@ -128,7 +98,7 @@ macro_rules! memory_region_symbol { }}; ($(#[$attrs:meta])* $symbol:ident: *mut $ty:ty $(,)?) => {{ core::ptr::NonNull::new( - *$crate::var!($(#[$attrs])* $symbol: usize = 0) as *mut $ty + *$crate::var!($(#[$attrs])* $symbol: usize) as *mut $ty ).unwrap_or_else(|| { panic!("{} is null", stringify!($symbol)) }) @@ -137,17 +107,14 @@ macro_rules! memory_region_symbol { #[cfg(not(feature = "extern-symbols"))] macro_rules! maybe_extern_var { - ($symbol:ident: $ty:ty = $default:expr) => {{ - var! { - #[used(linker)] - $symbol: $ty = $default - } + ($symbol:ident: $ty:ty) => {{ + var!($symbol: $ty) }}; } #[cfg(feature = "extern-symbols")] macro_rules! maybe_extern_var { - ($symbol:ident: $ty:ty = $default:expr) => {{ + ($symbol:ident: $ty:ty) => {{ unsafe extern "C" { static $symbol: $ty; } @@ -158,31 +125,31 @@ macro_rules! maybe_extern_var { /// Returns whether this protection domain is a passive server. pub fn pd_is_passive() -> bool { - *maybe_extern_var!(microkit_passive: bool = false) + *maybe_extern_var!(microkit_passive: bool) } pub(crate) fn pd_irqs() -> usize { - *maybe_extern_var!(microkit_irqs: usize = 0) + *maybe_extern_var!(microkit_irqs: usize) } pub(crate) fn pd_notifications() -> usize { - *maybe_extern_var!(microkit_notifications: usize = 0) + *maybe_extern_var!(microkit_notifications: usize) } pub(crate) fn pd_pps() -> usize { - *maybe_extern_var!(microkit_pps: usize = 0) + *maybe_extern_var!(microkit_pps: usize) } #[allow(dead_code)] pub(crate) fn pd_ioports() -> usize { - *maybe_extern_var!(microkit_ioports: usize = 0) + *maybe_extern_var!(microkit_ioports: usize) } const PD_NAME_LENGTH: usize = 64; /// Returns the name of this protection domain without converting to unicode. pub fn pd_name_bytes() -> &'static [u8] { - let all_bytes = maybe_extern_var!(microkit_name: [u8; PD_NAME_LENGTH] = [0; PD_NAME_LENGTH]); + let all_bytes = maybe_extern_var!(microkit_name: [u8; PD_NAME_LENGTH]); let n = all_bytes.iter().take_while(|b| **b != 0).count(); &all_bytes[..n] } diff --git a/crates/sel4-rodata-static/src/lib.rs b/crates/sel4-rodata-static/src/lib.rs index e1fe803d8..38931bf64 100644 --- a/crates/sel4-rodata-static/src/lib.rs +++ b/crates/sel4-rodata-static/src/lib.rs @@ -4,17 +4,20 @@ // SPDX-License-Identifier: BSD-2-Clause // +#![no_std] + /// Forces a static into `.rodata` without causing `.rodata` to end up in a `PF_W` segment #[macro_export] macro_rules! rodata_static { ($ident:ident: $ty:ty) => {{ mod asm { + use super::*; unsafe extern "C" { pub(super) static $ident: $ty; } - core::arch::global_asm! { + $crate::_private::global_asm! { r#" - .section .rodata, "a", %progbits + .section .rodata.rodata_static.{ident}, "aR", %progbits .global {ident} .size {ident}, {size} .p2align {align} @@ -32,5 +35,6 @@ macro_rules! rodata_static { #[doc(hidden)] pub mod _private { - pub use core::mem::{size_of, align_of}; + pub use core::arch::global_asm; + pub use core::mem::{align_of, size_of}; } From e483981040ef70bc5b7db76ff5e567fe738b9f23 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 02:18:51 -0700 Subject: [PATCH 11/22] sel4-reset: Don't gc _reset Signed-off-by: Nick Spinale --- crates/experimental/sel4-reset/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/experimental/sel4-reset/src/lib.rs index 48eac0c6c..9e3484a67 100644 --- a/crates/experimental/sel4-reset/src/lib.rs +++ b/crates/experimental/sel4-reset/src/lib.rs @@ -128,8 +128,7 @@ global_asm! { .global _reset - .section .text - + .section .text.reset, "axR", %progbits _reset: "#, #[cfg(target_arch = "aarch64")] From 9a88bd74fd9fdf02671a0e425d2c3b9ede5ce635 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 02:19:34 -0700 Subject: [PATCH 12/22] sel4-test-runner: Relax resettable check Signed-off-by: Nick Spinale --- crates/private/support/sel4-test-runner/src/main.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/private/support/sel4-test-runner/src/main.rs b/crates/private/support/sel4-test-runner/src/main.rs index 1dcfeefeb..133389636 100644 --- a/crates/private/support/sel4-test-runner/src/main.rs +++ b/crates/private/support/sel4-test-runner/src/main.rs @@ -203,11 +203,7 @@ impl<'a> Runner<'a> { } fn is_resettable(&self) -> bool { - if let Some(sym) = self.file.symbol_by_name("_reset") { - self.file.entry() == sym.address() - } else { - false - } + self.file.symbol_by_name("_reset").is_some() } fn mk_resettable(&self) -> anyhow::Result<()> { From c48b0a0dd4ebfeed469cf43f5e935e4830430d3d Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 02:20:20 -0700 Subject: [PATCH 13/22] Remove resettable targets Signed-off-by: Nick Spinale --- Cargo.lock | 7 +++ crates/experimental/sel4-reset/cli/Cargo.nix | 1 + crates/experimental/sel4-reset/cli/Cargo.toml | 1 + .../experimental/sel4-reset/cli/src/main.rs | 61 +++++++++---------- crates/sel4-generate-target-specs/src/main.rs | 40 ++++-------- .../src/resettable.lds | 3 - .../direct-dependency-allow-list.toml | 1 + hacking/nix/scope/default.nix | 2 - hacking/nix/scope/world/instances/default.nix | 3 - .../world/instances/microkit/default.nix | 1 - ...ch64-sel4-microkit-resettable-minimal.json | 39 ------------ ...rch64-sel4-microkit-resettable-unwind.json | 39 ------------ .../aarch64-sel4-microkit-resettable.json | 40 ------------ .../aarch64-sel4-resettable-minimal.json | 39 ------------ .../targets/aarch64-sel4-resettable-musl.json | 47 -------------- .../aarch64-sel4-resettable-unwind-musl.json | 46 -------------- .../aarch64-sel4-resettable-unwind.json | 39 ------------ support/targets/aarch64-sel4-resettable.json | 40 ------------ ...ch64-sel4-roottask-resettable-minimal.json | 42 ------------- ...aarch64-sel4-roottask-resettable-musl.json | 50 --------------- ...-sel4-roottask-resettable-unwind-musl.json | 49 --------------- ...rch64-sel4-roottask-resettable-unwind.json | 42 ------------- .../aarch64-sel4-roottask-resettable.json | 43 ------------- .../armv7a-sel4-resettable-minimal.json | 27 -------- .../targets/armv7a-sel4-resettable-musl.json | 35 ----------- support/targets/armv7a-sel4-resettable.json | 28 --------- ...mv7a-sel4-roottask-resettable-minimal.json | 34 ----------- .../armv7a-sel4-roottask-resettable-musl.json | 42 ------------- .../armv7a-sel4-roottask-resettable.json | 35 ----------- .../riscv32imac-sel4-resettable-minimal.json | 24 -------- .../riscv32imac-sel4-resettable-musl.json | 32 ---------- ...scv32imac-sel4-resettable-unwind-musl.json | 31 ---------- .../riscv32imac-sel4-resettable-unwind.json | 24 -------- .../targets/riscv32imac-sel4-resettable.json | 25 -------- ...imac-sel4-roottask-resettable-minimal.json | 31 ---------- ...v32imac-sel4-roottask-resettable-musl.json | 39 ------------ ...-sel4-roottask-resettable-unwind-musl.json | 38 ------------ ...2imac-sel4-roottask-resettable-unwind.json | 31 ---------- .../riscv32imac-sel4-roottask-resettable.json | 32 ---------- .../riscv32imafc-sel4-resettable-minimal.json | 24 -------- .../riscv32imafc-sel4-resettable-musl.json | 32 ---------- ...cv32imafc-sel4-resettable-unwind-musl.json | 31 ---------- .../riscv32imafc-sel4-resettable-unwind.json | 24 -------- .../targets/riscv32imafc-sel4-resettable.json | 25 -------- ...mafc-sel4-roottask-resettable-minimal.json | 31 ---------- ...32imafc-sel4-roottask-resettable-musl.json | 39 ------------ ...-sel4-roottask-resettable-unwind-musl.json | 38 ------------ ...imafc-sel4-roottask-resettable-unwind.json | 31 ---------- ...riscv32imafc-sel4-roottask-resettable.json | 32 ---------- ...64gc-sel4-microkit-resettable-minimal.json | 29 --------- ...v64gc-sel4-microkit-resettable-unwind.json | 29 --------- .../riscv64gc-sel4-microkit-resettable.json | 30 --------- .../riscv64gc-sel4-resettable-minimal.json | 29 --------- .../riscv64gc-sel4-resettable-musl.json | 37 ----------- ...riscv64gc-sel4-resettable-unwind-musl.json | 36 ----------- .../riscv64gc-sel4-resettable-unwind.json | 29 --------- .../targets/riscv64gc-sel4-resettable.json | 30 --------- ...64gc-sel4-roottask-resettable-minimal.json | 36 ----------- ...scv64gc-sel4-roottask-resettable-musl.json | 44 ------------- ...-sel4-roottask-resettable-unwind-musl.json | 43 ------------- ...v64gc-sel4-roottask-resettable-unwind.json | 36 ----------- .../riscv64gc-sel4-roottask-resettable.json | 37 ----------- ...imac-sel4-microkit-resettable-minimal.json | 29 --------- ...4imac-sel4-microkit-resettable-unwind.json | 29 --------- .../riscv64imac-sel4-microkit-resettable.json | 30 --------- .../riscv64imac-sel4-resettable-minimal.json | 29 --------- .../riscv64imac-sel4-resettable-musl.json | 37 ----------- ...scv64imac-sel4-resettable-unwind-musl.json | 36 ----------- .../riscv64imac-sel4-resettable-unwind.json | 29 --------- .../targets/riscv64imac-sel4-resettable.json | 30 --------- ...imac-sel4-roottask-resettable-minimal.json | 36 ----------- ...v64imac-sel4-roottask-resettable-musl.json | 44 ------------- ...-sel4-roottask-resettable-unwind-musl.json | 43 ------------- ...4imac-sel4-roottask-resettable-unwind.json | 36 ----------- .../riscv64imac-sel4-roottask-resettable.json | 37 ----------- ...6_64-sel4-microkit-resettable-minimal.json | 36 ----------- ...86_64-sel4-microkit-resettable-unwind.json | 36 ----------- .../x86_64-sel4-microkit-resettable.json | 37 ----------- .../x86_64-sel4-resettable-minimal.json | 36 ----------- .../targets/x86_64-sel4-resettable-musl.json | 44 ------------- .../x86_64-sel4-resettable-unwind-musl.json | 43 ------------- .../x86_64-sel4-resettable-unwind.json | 36 ----------- support/targets/x86_64-sel4-resettable.json | 37 ----------- ...6_64-sel4-roottask-resettable-minimal.json | 43 ------------- .../x86_64-sel4-roottask-resettable-musl.json | 51 ---------------- ...-sel4-roottask-resettable-unwind-musl.json | 50 --------------- ...86_64-sel4-roottask-resettable-unwind.json | 43 ------------- .../x86_64-sel4-roottask-resettable.json | 44 ------------- 88 files changed, 50 insertions(+), 2866 deletions(-) delete mode 100644 crates/sel4-generate-target-specs/src/resettable.lds delete mode 100644 support/targets/aarch64-sel4-microkit-resettable-minimal.json delete mode 100644 support/targets/aarch64-sel4-microkit-resettable-unwind.json delete mode 100644 support/targets/aarch64-sel4-microkit-resettable.json delete mode 100644 support/targets/aarch64-sel4-resettable-minimal.json delete mode 100644 support/targets/aarch64-sel4-resettable-musl.json delete mode 100644 support/targets/aarch64-sel4-resettable-unwind-musl.json delete mode 100644 support/targets/aarch64-sel4-resettable-unwind.json delete mode 100644 support/targets/aarch64-sel4-resettable.json delete mode 100644 support/targets/aarch64-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/aarch64-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json delete mode 100644 support/targets/aarch64-sel4-roottask-resettable-unwind.json delete mode 100644 support/targets/aarch64-sel4-roottask-resettable.json delete mode 100644 support/targets/armv7a-sel4-resettable-minimal.json delete mode 100644 support/targets/armv7a-sel4-resettable-musl.json delete mode 100644 support/targets/armv7a-sel4-resettable.json delete mode 100644 support/targets/armv7a-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/armv7a-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/armv7a-sel4-roottask-resettable.json delete mode 100644 support/targets/riscv32imac-sel4-resettable-minimal.json delete mode 100644 support/targets/riscv32imac-sel4-resettable-musl.json delete mode 100644 support/targets/riscv32imac-sel4-resettable-unwind-musl.json delete mode 100644 support/targets/riscv32imac-sel4-resettable-unwind.json delete mode 100644 support/targets/riscv32imac-sel4-resettable.json delete mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json delete mode 100644 support/targets/riscv32imac-sel4-roottask-resettable-unwind.json delete mode 100644 support/targets/riscv32imac-sel4-roottask-resettable.json delete mode 100644 support/targets/riscv32imafc-sel4-resettable-minimal.json delete mode 100644 support/targets/riscv32imafc-sel4-resettable-musl.json delete mode 100644 support/targets/riscv32imafc-sel4-resettable-unwind-musl.json delete mode 100644 support/targets/riscv32imafc-sel4-resettable-unwind.json delete mode 100644 support/targets/riscv32imafc-sel4-resettable.json delete mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json delete mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json delete mode 100644 support/targets/riscv32imafc-sel4-roottask-resettable.json delete mode 100644 support/targets/riscv64gc-sel4-microkit-resettable-minimal.json delete mode 100644 support/targets/riscv64gc-sel4-microkit-resettable-unwind.json delete mode 100644 support/targets/riscv64gc-sel4-microkit-resettable.json delete mode 100644 support/targets/riscv64gc-sel4-resettable-minimal.json delete mode 100644 support/targets/riscv64gc-sel4-resettable-musl.json delete mode 100644 support/targets/riscv64gc-sel4-resettable-unwind-musl.json delete mode 100644 support/targets/riscv64gc-sel4-resettable-unwind.json delete mode 100644 support/targets/riscv64gc-sel4-resettable.json delete mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json delete mode 100644 support/targets/riscv64gc-sel4-roottask-resettable-unwind.json delete mode 100644 support/targets/riscv64gc-sel4-roottask-resettable.json delete mode 100644 support/targets/riscv64imac-sel4-microkit-resettable-minimal.json delete mode 100644 support/targets/riscv64imac-sel4-microkit-resettable-unwind.json delete mode 100644 support/targets/riscv64imac-sel4-microkit-resettable.json delete mode 100644 support/targets/riscv64imac-sel4-resettable-minimal.json delete mode 100644 support/targets/riscv64imac-sel4-resettable-musl.json delete mode 100644 support/targets/riscv64imac-sel4-resettable-unwind-musl.json delete mode 100644 support/targets/riscv64imac-sel4-resettable-unwind.json delete mode 100644 support/targets/riscv64imac-sel4-resettable.json delete mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json delete mode 100644 support/targets/riscv64imac-sel4-roottask-resettable-unwind.json delete mode 100644 support/targets/riscv64imac-sel4-roottask-resettable.json delete mode 100644 support/targets/x86_64-sel4-microkit-resettable-minimal.json delete mode 100644 support/targets/x86_64-sel4-microkit-resettable-unwind.json delete mode 100644 support/targets/x86_64-sel4-microkit-resettable.json delete mode 100644 support/targets/x86_64-sel4-resettable-minimal.json delete mode 100644 support/targets/x86_64-sel4-resettable-musl.json delete mode 100644 support/targets/x86_64-sel4-resettable-unwind-musl.json delete mode 100644 support/targets/x86_64-sel4-resettable-unwind.json delete mode 100644 support/targets/x86_64-sel4-resettable.json delete mode 100644 support/targets/x86_64-sel4-roottask-resettable-minimal.json delete mode 100644 support/targets/x86_64-sel4-roottask-resettable-musl.json delete mode 100644 support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json delete mode 100644 support/targets/x86_64-sel4-roottask-resettable-unwind.json delete mode 100644 support/targets/x86_64-sel4-roottask-resettable.json diff --git a/Cargo.lock b/Cargo.lock index 7eb8d2600..ab31a8f1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1980,6 +1980,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" +[[package]] +name = "rangemap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" + [[package]] name = "rcgen" version = "0.14.5" @@ -2913,6 +2919,7 @@ dependencies = [ "anyhow", "clap", "num", + "rangemap", "sel4-synthetic-elf", ] diff --git a/crates/experimental/sel4-reset/cli/Cargo.nix b/crates/experimental/sel4-reset/cli/Cargo.nix index 3615c914a..d0c909cc0 100644 --- a/crates/experimental/sel4-reset/cli/Cargo.nix +++ b/crates/experimental/sel4-reset/cli/Cargo.nix @@ -13,6 +13,7 @@ mk { anyhow num clap + rangemap ; inherit (localCrates) sel4-synthetic-elf diff --git a/crates/experimental/sel4-reset/cli/Cargo.toml b/crates/experimental/sel4-reset/cli/Cargo.toml index dca544580..5389906c1 100644 --- a/crates/experimental/sel4-reset/cli/Cargo.toml +++ b/crates/experimental/sel4-reset/cli/Cargo.toml @@ -20,4 +20,5 @@ license = "BSD-2-Clause" anyhow = "1.0.100" clap = "4.5.50" num = "0.4.3" +rangemap = "1.7.1" sel4-synthetic-elf = { path = "../../../sel4-synthetic-elf" } diff --git a/crates/experimental/sel4-reset/cli/src/main.rs b/crates/experimental/sel4-reset/cli/src/main.rs index 27e76ecf0..73907b0ac 100644 --- a/crates/experimental/sel4-reset/cli/src/main.rs +++ b/crates/experimental/sel4-reset/cli/src/main.rs @@ -4,7 +4,6 @@ // SPDX-License-Identifier: BSD-2-Clause // -use std::borrow::Cow; use std::fs; use anyhow::Result; @@ -12,6 +11,7 @@ use num::NumCast; use object::elf::{PF_W, PT_LOAD}; use object::read::elf::{ElfFile, FileHeader, ProgramHeader}; use object::{Endian, File, Object, ObjectSection, ReadCache, ReadRef}; +use rangemap::RangeSet; use sel4_synthetic_elf::{Builder, PatchValue, Segment, object}; @@ -46,44 +46,49 @@ where { let endian = elf.endian(); - let persistent_section = elf.section_by_name(".persistent"); + let persistent_ranges = { + let mut set = RangeSet::new(); + for s in elf.sections() { + if let Ok(name) = s.name() + && (name == ".persistent" || name.starts_with(".persistent.")) + { + set.insert(s.address()..(s.address() + s.size())); + } + } + set + }; let mut builder = Builder::empty(elf); let mut regions_builder = RegionsBuilder::::new(); - let mut persistent_section_placed = false; - for phdr in elf.elf_program_headers() { if phdr.p_type(endian) == PT_LOAD { - let mut segment = Segment::from_phdr(phdr, endian, elf.data())?; + let segment = Segment::from_phdr(phdr, endian, elf.data())?; + builder.add_segment(segment); if phdr.p_flags(endian) & PF_W != 0 { let vaddr = phdr.p_vaddr(endian).into(); let memsz = phdr.p_memsz(endian).into(); let data = phdr.data(endian, elf.data()).unwrap(); - let skip = persistent_section - .as_ref() - .and_then(|section| { - if section.address() == vaddr { - persistent_section_placed = true; - Some(section.size()) - } else { - None - } - }) - .unwrap_or(0); - regions_builder.add_region_with_skip(skip, vaddr, memsz, data); - segment.data = match &segment.data { - Cow::Borrowed(slice) => slice[..usize::try_from(skip).unwrap()].into(), - _ => panic!(), + let segment_range = vaddr..(vaddr + memsz); + let relevant_persistent_ranges = RangeSet::from_iter( + persistent_ranges.intersection(&RangeSet::from_iter([segment_range.clone()])), + ); + for ephermal in relevant_persistent_ranges.gaps(&segment_range) { + let region_memsz = ephermal.end - ephermal.start; + let region_offset_in_segment = ephermal.start - vaddr; + let region_data = if region_offset_in_segment < data.len().try_into().unwrap() { + &data[region_offset_in_segment.try_into().unwrap() + ..data.len().min((ephermal.end - vaddr).try_into().unwrap())] + } else { + &[] + }; + regions_builder.add_region(ephermal.start, region_memsz, region_data); } } - builder.add_segment(segment); } } - assert!(persistent_section.is_none() || persistent_section_placed); - let regions = regions_builder.build(endian); let vaddr = builder.next_vaddr().next_multiple_of(4096); @@ -141,16 +146,6 @@ impl> RegionsBuilder { }) } - fn add_region_with_skip(&mut self, skip: u64, vaddr: u64, memsz: u64, data: &[u8]) { - if skip < memsz { - self.add_region( - vaddr + skip, - memsz - skip, - &data[data.len().min(skip.try_into().unwrap())..], - ); - } - } - fn build(&self, endian: impl Endian) -> Regions { let mut raw = vec![]; let meta_offset = raw.len(); diff --git a/crates/sel4-generate-target-specs/src/main.rs b/crates/sel4-generate-target-specs/src/main.rs index 193e0305f..a1c0cc369 100644 --- a/crates/sel4-generate-target-specs/src/main.rs +++ b/crates/sel4-generate-target-specs/src/main.rs @@ -36,7 +36,6 @@ const CHOSEN_LINKER_FLAVOR: LinkerFlavor = LinkerFlavor::Gnu(Cc::No, Lld::Yes); struct Config { arch: Arch, context: Context, - resettable: bool, minimal: bool, unwind: bool, musl: bool, @@ -117,15 +116,6 @@ impl Config { assert_eq!(target.options.linker_flavor, CHOSEN_LINKER_FLAVOR); - if self.resettable { - target - .options - .link_script - .get_or_insert_default() - .to_mut() - .push_str(include_str!("resettable.lds")); - } - if let Context::RootTask = &self.context { target .options @@ -207,9 +197,6 @@ impl Config { name.push_str("-microkit"); } } - if self.resettable { - name.push_str("-resettable"); - } if self.minimal { name.push_str("-minimal"); } @@ -226,21 +213,18 @@ impl Config { let mut all = vec![]; for arch in Arch::all() { for context in Context::all() { - for resettable in [true, false] { - for minimal in [true, false] { - for unwind in [true, false] { - for musl in [true, false] { - let config = Self { - arch, - context, - resettable, - minimal, - unwind, - musl, - }; - if config.filter() { - all.push(config); - } + for minimal in [true, false] { + for unwind in [true, false] { + for musl in [true, false] { + let config = Self { + arch, + context, + minimal, + unwind, + musl, + }; + if config.filter() { + all.push(config); } } } diff --git a/crates/sel4-generate-target-specs/src/resettable.lds b/crates/sel4-generate-target-specs/src/resettable.lds deleted file mode 100644 index 8bdb8a575..000000000 --- a/crates/sel4-generate-target-specs/src/resettable.lds +++ /dev/null @@ -1,3 +0,0 @@ -ASSERT(DEFINED(_reset), "_reset is not defined") - -ENTRY(_reset) diff --git a/hacking/cargo-manifest-management/direct-dependency-allow-list.toml b/hacking/cargo-manifest-management/direct-dependency-allow-list.toml index 8c7032f92..adec828c5 100644 --- a/hacking/cargo-manifest-management/direct-dependency-allow-list.toml +++ b/hacking/cargo-manifest-management/direct-dependency-allow-list.toml @@ -50,6 +50,7 @@ proc-macro2 = "1.0.103" ptr_meta = "0.3.1" quote = "1.0.41" rand = "0.10.0" +rangemap = "1.7.1" rcgen = "0.14.5" regex = "1.12.2" ring = { version = "=0.17.8", auto-update = false } diff --git a/hacking/nix/scope/default.nix b/hacking/nix/scope/default.nix index 51d64cfa8..8252b04f5 100644 --- a/hacking/nix/scope/default.nix +++ b/hacking/nix/scope/default.nix @@ -215,7 +215,6 @@ superCallPackage ../rust-utils {} self // mkSeL4CustomRustTargetTripleName = { rootTask ? false , microkit ? false - , resettable ? false , minimal ? false , unwind ? false , musl ? false @@ -225,7 +224,6 @@ superCallPackage ../rust-utils {} self // "-sel4" (lib.optionalString rootTask "-roottask") (lib.optionalString microkit "-microkit") - (lib.optionalString resettable "-resettable") (lib.optionalString minimal "-minimal") (lib.optionalString unwind "-unwind") (lib.optionalString musl "-musl") diff --git a/hacking/nix/scope/world/instances/default.nix b/hacking/nix/scope/world/instances/default.nix index 4489ab7e2..62ac8ed02 100644 --- a/hacking/nix/scope/world/instances/default.nix +++ b/hacking/nix/scope/world/instances/default.nix @@ -165,9 +165,6 @@ in rec { let origRootTask = mkTask { rootCrate = crates.tests-root-task-reset; - targetTriple = mkSeL4RustTargetTriple { - resettable = true; - }; release = false; }; in maybe haveFullRuntime (mkInstance { diff --git a/hacking/nix/scope/world/instances/microkit/default.nix b/hacking/nix/scope/world/instances/microkit/default.nix index 5560bd192..481587f23 100644 --- a/hacking/nix/scope/world/instances/microkit/default.nix +++ b/hacking/nix/scope/world/instances/microkit/default.nix @@ -153,7 +153,6 @@ in { rootCrate = crates.tests-microkit-reset; targetTriple = mkSeL4RustTargetTriple { microkit = true; - resettable = true; minimal = false; }; release = false; diff --git a/support/targets/aarch64-sel4-microkit-resettable-minimal.json b/support/targets/aarch64-sel4-microkit-resettable-minimal.json deleted file mode 100644 index 4c6f26881..000000000 --- a/support/targets/aarch64-sel4-microkit-resettable-minimal.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-microkit-resettable-unwind.json b/support/targets/aarch64-sel4-microkit-resettable-unwind.json deleted file mode 100644 index dadfcac0e..000000000 --- a/support/targets/aarch64-sel4-microkit-resettable-unwind.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-microkit-resettable.json b/support/targets/aarch64-sel4-microkit-resettable.json deleted file mode 100644 index 23728b02f..000000000 --- a/support/targets/aarch64-sel4-microkit-resettable.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-resettable-minimal.json b/support/targets/aarch64-sel4-resettable-minimal.json deleted file mode 100644 index d0296efc4..000000000 --- a/support/targets/aarch64-sel4-resettable-minimal.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-resettable-musl.json b/support/targets/aarch64-sel4-resettable-musl.json deleted file mode 100644 index 75934e015..000000000 --- a/support/targets/aarch64-sel4-resettable-musl.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-resettable-unwind-musl.json b/support/targets/aarch64-sel4-resettable-unwind-musl.json deleted file mode 100644 index fc633cf52..000000000 --- a/support/targets/aarch64-sel4-resettable-unwind-musl.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-resettable-unwind.json b/support/targets/aarch64-sel4-resettable-unwind.json deleted file mode 100644 index b820d5496..000000000 --- a/support/targets/aarch64-sel4-resettable-unwind.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-resettable.json b/support/targets/aarch64-sel4-resettable.json deleted file mode 100644 index fd4bae20a..000000000 --- a/support/targets/aarch64-sel4-resettable.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-roottask-resettable-minimal.json b/support/targets/aarch64-sel4-roottask-resettable-minimal.json deleted file mode 100644 index 8d8e8b1cf..000000000 --- a/support/targets/aarch64-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419", - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-roottask-resettable-musl.json b/support/targets/aarch64-sel4-roottask-resettable-musl.json deleted file mode 100644 index 2c8821dae..000000000 --- a/support/targets/aarch64-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419", - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json b/support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json deleted file mode 100644 index 274e0e21a..000000000 --- a/support/targets/aarch64-sel4-roottask-resettable-unwind-musl.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419", - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-roottask-resettable-unwind.json b/support/targets/aarch64-sel4-roottask-resettable-unwind.json deleted file mode 100644 index fd5cb6616..000000000 --- a/support/targets/aarch64-sel4-roottask-resettable-unwind.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419", - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/aarch64-sel4-roottask-resettable.json b/support/targets/aarch64-sel4-roottask-resettable.json deleted file mode 100644 index 1a7c85c09..000000000 --- a/support/targets/aarch64-sel4-roottask-resettable.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "arch": "aarch64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32", - "default-uwtable": true, - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "+v8a,+strict-align,+neon", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-target": "aarch64-unknown-none", - "max-atomic-width": 128, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu": [ - "--fix-cortex-a53-843419" - ], - "gnu-lld": [ - "--fix-cortex-a53-843419", - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "stack-probes": { - "kind": "inline" - }, - "supported-sanitizers": [ - "kcfi", - "kernel-address", - "kernel-hwaddress" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/armv7a-sel4-resettable-minimal.json b/support/targets/armv7a-sel4-resettable-minimal.json deleted file mode 100644 index ea0b820cd..000000000 --- a/support/targets/armv7a-sel4-resettable-minimal.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "abi": "eabi", - "arch": "arm", - "c-enum-min-bits": 8, - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+soft-float,-neon,+strict-align", - "frame-pointer": "always", - "has-thumb-interworking": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-floatabi": "soft", - "llvm-target": "armv7a-none-eabi", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/armv7a-sel4-resettable-musl.json b/support/targets/armv7a-sel4-resettable-musl.json deleted file mode 100644 index bf6c579fa..000000000 --- a/support/targets/armv7a-sel4-resettable-musl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "abi": "eabi", - "arch": "arm", - "c-enum-min-bits": 8, - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+soft-float,-neon,+strict-align", - "frame-pointer": "always", - "has-thread-local": true, - "has-thumb-interworking": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-floatabi": "soft", - "llvm-target": "armv7a-none-eabi", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/armv7a-sel4-resettable.json b/support/targets/armv7a-sel4-resettable.json deleted file mode 100644 index 477d89a6f..000000000 --- a/support/targets/armv7a-sel4-resettable.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "abi": "eabi", - "arch": "arm", - "c-enum-min-bits": 8, - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+soft-float,-neon,+strict-align", - "frame-pointer": "always", - "has-thread-local": true, - "has-thumb-interworking": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-floatabi": "soft", - "llvm-target": "armv7a-none-eabi", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/armv7a-sel4-roottask-resettable-minimal.json b/support/targets/armv7a-sel4-roottask-resettable-minimal.json deleted file mode 100644 index 2456099e2..000000000 --- a/support/targets/armv7a-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "abi": "eabi", - "arch": "arm", - "c-enum-min-bits": 8, - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+soft-float,-neon,+strict-align", - "frame-pointer": "always", - "has-thumb-interworking": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-floatabi": "soft", - "llvm-target": "armv7a-none-eabi", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/armv7a-sel4-roottask-resettable-musl.json b/support/targets/armv7a-sel4-roottask-resettable-musl.json deleted file mode 100644 index ff79227b9..000000000 --- a/support/targets/armv7a-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "abi": "eabi", - "arch": "arm", - "c-enum-min-bits": 8, - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+soft-float,-neon,+strict-align", - "frame-pointer": "always", - "has-thread-local": true, - "has-thumb-interworking": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-floatabi": "soft", - "llvm-target": "armv7a-none-eabi", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/armv7a-sel4-roottask-resettable.json b/support/targets/armv7a-sel4-roottask-resettable.json deleted file mode 100644 index 45384c9b3..000000000 --- a/support/targets/armv7a-sel4-roottask-resettable.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "abi": "eabi", - "arch": "arm", - "c-enum-min-bits": 8, - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+soft-float,-neon,+strict-align", - "frame-pointer": "always", - "has-thread-local": true, - "has-thumb-interworking": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-floatabi": "soft", - "llvm-target": "armv7a-none-eabi", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-resettable-minimal.json b/support/targets/riscv32imac-sel4-resettable-minimal.json deleted file mode 100644 index 9bb83de99..000000000 --- a/support/targets/riscv32imac-sel4-resettable-minimal.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-resettable-musl.json b/support/targets/riscv32imac-sel4-resettable-musl.json deleted file mode 100644 index b4988649b..000000000 --- a/support/targets/riscv32imac-sel4-resettable-musl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-resettable-unwind-musl.json b/support/targets/riscv32imac-sel4-resettable-unwind-musl.json deleted file mode 100644 index ebebb1c34..000000000 --- a/support/targets/riscv32imac-sel4-resettable-unwind-musl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-resettable-unwind.json b/support/targets/riscv32imac-sel4-resettable-unwind.json deleted file mode 100644 index 1390878c5..000000000 --- a/support/targets/riscv32imac-sel4-resettable-unwind.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-resettable.json b/support/targets/riscv32imac-sel4-resettable.json deleted file mode 100644 index ddef833c8..000000000 --- a/support/targets/riscv32imac-sel4-resettable.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-minimal.json b/support/targets/riscv32imac-sel4-roottask-resettable-minimal.json deleted file mode 100644 index 256be7804..000000000 --- a/support/targets/riscv32imac-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-musl.json b/support/targets/riscv32imac-sel4-roottask-resettable-musl.json deleted file mode 100644 index 61bd61ddc..000000000 --- a/support/targets/riscv32imac-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json deleted file mode 100644 index d8bfee840..000000000 --- a/support/targets/riscv32imac-sel4-roottask-resettable-unwind-musl.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable-unwind.json b/support/targets/riscv32imac-sel4-roottask-resettable-unwind.json deleted file mode 100644 index 0449aa888..000000000 --- a/support/targets/riscv32imac-sel4-roottask-resettable-unwind.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imac-sel4-roottask-resettable.json b/support/targets/riscv32imac-sel4-roottask-resettable.json deleted file mode 100644 index 7081ed8c8..000000000 --- a/support/targets/riscv32imac-sel4-roottask-resettable.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-resettable-minimal.json b/support/targets/riscv32imafc-sel4-resettable-minimal.json deleted file mode 100644 index ba646d9a2..000000000 --- a/support/targets/riscv32imafc-sel4-resettable-minimal.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-resettable-musl.json b/support/targets/riscv32imafc-sel4-resettable-musl.json deleted file mode 100644 index ceb731a18..000000000 --- a/support/targets/riscv32imafc-sel4-resettable-musl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-resettable-unwind-musl.json b/support/targets/riscv32imafc-sel4-resettable-unwind-musl.json deleted file mode 100644 index 85bf4b4b4..000000000 --- a/support/targets/riscv32imafc-sel4-resettable-unwind-musl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-resettable-unwind.json b/support/targets/riscv32imafc-sel4-resettable-unwind.json deleted file mode 100644 index 777dee7cc..000000000 --- a/support/targets/riscv32imafc-sel4-resettable-unwind.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-resettable.json b/support/targets/riscv32imafc-sel4-resettable.json deleted file mode 100644 index 32f896050..000000000 --- a/support/targets/riscv32imafc-sel4-resettable.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json b/support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json deleted file mode 100644 index 15390cac4..000000000 --- a/support/targets/riscv32imafc-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-musl.json b/support/targets/riscv32imafc-sel4-roottask-resettable-musl.json deleted file mode 100644 index 4716a7c28..000000000 --- a/support/targets/riscv32imafc-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json deleted file mode 100644 index 53833e253..000000000 --- a/support/targets/riscv32imafc-sel4-roottask-resettable-unwind-musl.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-family": [ - "unix" - ], - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json b/support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json deleted file mode 100644 index e549ba442..000000000 --- a/support/targets/riscv32imafc-sel4-roottask-resettable-unwind.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv32imafc-sel4-roottask-resettable.json b/support/targets/riscv32imafc-sel4-roottask-resettable.json deleted file mode 100644 index 01c461442..000000000 --- a/support/targets/riscv32imafc-sel4-roottask-resettable.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "arch": "riscv32", - "cpu": "generic-rv32", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:32:32-i64:64-n32-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c,+f", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "ilp32f", - "llvm-target": "riscv32", - "max-atomic-width": 32, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "target-pointer-width": 32 -} diff --git a/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json b/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json deleted file mode 100644 index bbb7382b5..000000000 --- a/support/targets/riscv64gc-sel4-microkit-resettable-minimal.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json b/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json deleted file mode 100644 index 5b9dc5195..000000000 --- a/support/targets/riscv64gc-sel4-microkit-resettable-unwind.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-microkit-resettable.json b/support/targets/riscv64gc-sel4-microkit-resettable.json deleted file mode 100644 index 8dee73788..000000000 --- a/support/targets/riscv64gc-sel4-microkit-resettable.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-resettable-minimal.json b/support/targets/riscv64gc-sel4-resettable-minimal.json deleted file mode 100644 index 00cd396e5..000000000 --- a/support/targets/riscv64gc-sel4-resettable-minimal.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-resettable-musl.json b/support/targets/riscv64gc-sel4-resettable-musl.json deleted file mode 100644 index 3473628fd..000000000 --- a/support/targets/riscv64gc-sel4-resettable-musl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-resettable-unwind-musl.json b/support/targets/riscv64gc-sel4-resettable-unwind-musl.json deleted file mode 100644 index a70783c90..000000000 --- a/support/targets/riscv64gc-sel4-resettable-unwind-musl.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-resettable-unwind.json b/support/targets/riscv64gc-sel4-resettable-unwind.json deleted file mode 100644 index 1eac26354..000000000 --- a/support/targets/riscv64gc-sel4-resettable-unwind.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-resettable.json b/support/targets/riscv64gc-sel4-resettable.json deleted file mode 100644 index c10880796..000000000 --- a/support/targets/riscv64gc-sel4-resettable.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-minimal.json b/support/targets/riscv64gc-sel4-roottask-resettable-minimal.json deleted file mode 100644 index f33ee96d4..000000000 --- a/support/targets/riscv64gc-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-musl.json b/support/targets/riscv64gc-sel4-roottask-resettable-musl.json deleted file mode 100644 index c4c12dc61..000000000 --- a/support/targets/riscv64gc-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json deleted file mode 100644 index 8a857dc51..000000000 --- a/support/targets/riscv64gc-sel4-roottask-resettable-unwind-musl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable-unwind.json b/support/targets/riscv64gc-sel4-roottask-resettable-unwind.json deleted file mode 100644 index 69327a8d1..000000000 --- a/support/targets/riscv64gc-sel4-roottask-resettable-unwind.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64gc-sel4-roottask-resettable.json b/support/targets/riscv64gc-sel4-roottask-resettable.json deleted file mode 100644 index 09614ff5d..000000000 --- a/support/targets/riscv64gc-sel4-roottask-resettable.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+f,+d,+c,+zicsr,+zifencei", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64d", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json b/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json deleted file mode 100644 index 2f34740d3..000000000 --- a/support/targets/riscv64imac-sel4-microkit-resettable-minimal.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json b/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json deleted file mode 100644 index 97a538786..000000000 --- a/support/targets/riscv64imac-sel4-microkit-resettable-unwind.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-microkit-resettable.json b/support/targets/riscv64imac-sel4-microkit-resettable.json deleted file mode 100644 index 31fbc2929..000000000 --- a/support/targets/riscv64imac-sel4-microkit-resettable.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-resettable-minimal.json b/support/targets/riscv64imac-sel4-resettable-minimal.json deleted file mode 100644 index 6641fdf36..000000000 --- a/support/targets/riscv64imac-sel4-resettable-minimal.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-resettable-musl.json b/support/targets/riscv64imac-sel4-resettable-musl.json deleted file mode 100644 index df7b09d86..000000000 --- a/support/targets/riscv64imac-sel4-resettable-musl.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-resettable-unwind-musl.json b/support/targets/riscv64imac-sel4-resettable-unwind-musl.json deleted file mode 100644 index 4113943e8..000000000 --- a/support/targets/riscv64imac-sel4-resettable-unwind-musl.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-resettable-unwind.json b/support/targets/riscv64imac-sel4-resettable-unwind.json deleted file mode 100644 index 9aadad55b..000000000 --- a/support/targets/riscv64imac-sel4-resettable-unwind.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-resettable.json b/support/targets/riscv64imac-sel4-resettable.json deleted file mode 100644 index ad0f2470b..000000000 --- a/support/targets/riscv64imac-sel4-resettable.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-minimal.json b/support/targets/riscv64imac-sel4-roottask-resettable-minimal.json deleted file mode 100644 index 0578753d5..000000000 --- a/support/targets/riscv64imac-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-musl.json b/support/targets/riscv64imac-sel4-roottask-resettable-musl.json deleted file mode 100644 index 0bb997ac6..000000000 --- a/support/targets/riscv64imac-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json b/support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json deleted file mode 100644 index efd7f80f2..000000000 --- a/support/targets/riscv64imac-sel4-roottask-resettable-unwind-musl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "env": "musl", - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "os": "linux", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable-unwind.json b/support/targets/riscv64imac-sel4-roottask-resettable-unwind.json deleted file mode 100644 index fbebe3720..000000000 --- a/support/targets/riscv64imac-sel4-roottask-resettable-unwind.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/riscv64imac-sel4-roottask-resettable.json b/support/targets/riscv64imac-sel4-roottask-resettable.json deleted file mode 100644 index f87c40aad..000000000 --- a/support/targets/riscv64imac-sel4-roottask-resettable.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "arch": "riscv64", - "code-model": "medium", - "cpu": "generic-rv64", - "crt-objects-fallback": "false", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "emit-debug-gdb-scripts": false, - "exe-suffix": ".elf", - "features": "+m,+a,+c", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "linker": "rust-lld", - "linker-flavor": "gnu-lld", - "llvm-abiname": "lp64", - "llvm-target": "riscv64", - "max-atomic-width": 64, - "metadata": { - "description": null, - "host_tools": null, - "std": null, - "tier": null - }, - "panic-strategy": "abort", - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "supported-sanitizers": [ - "shadow-call-stack", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-microkit-resettable-minimal.json b/support/targets/x86_64-sel4-microkit-resettable-minimal.json deleted file mode 100644 index 64064bc00..000000000 --- a/support/targets/x86_64-sel4-microkit-resettable-minimal.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "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 - }, - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-microkit-resettable-unwind.json b/support/targets/x86_64-sel4-microkit-resettable-unwind.json deleted file mode 100644 index 2e0a1535f..000000000 --- a/support/targets/x86_64-sel4-microkit-resettable-unwind.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "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 - }, - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-microkit-resettable.json b/support/targets/x86_64-sel4-microkit-resettable.json deleted file mode 100644 index 8a181f9f9..000000000 --- a/support/targets/x86_64-sel4-microkit-resettable.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n__sel4_ipc_buffer_obj = (__ehdr_start & ~(4096 - 1)) - 4096;", - "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 - }, - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-resettable-minimal.json b/support/targets/x86_64-sel4-resettable-minimal.json deleted file mode 100644 index 3ad41aae4..000000000 --- a/support/targets/x86_64-sel4-resettable-minimal.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-resettable-musl.json b/support/targets/x86_64-sel4-resettable-musl.json deleted file mode 100644 index d26ad565b..000000000 --- a/support/targets/x86_64-sel4-resettable-musl.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "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", - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "os": "linux", - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-resettable-unwind-musl.json b/support/targets/x86_64-sel4-resettable-unwind-musl.json deleted file mode 100644 index 102a13544..000000000 --- a/support/targets/x86_64-sel4-resettable-unwind-musl.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "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", - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "os": "linux", - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-resettable-unwind.json b/support/targets/x86_64-sel4-resettable-unwind.json deleted file mode 100644 index e4e1399bb..000000000 --- a/support/targets/x86_64-sel4-resettable-unwind.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-resettable.json b/support/targets/x86_64-sel4-resettable.json deleted file mode 100644 index 616afd659..000000000 --- a/support/targets/x86_64-sel4-resettable.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-roottask-resettable-minimal.json b/support/targets/x86_64-sel4-roottask-resettable-minimal.json deleted file mode 100644 index 320a58c60..000000000 --- a/support/targets/x86_64-sel4-roottask-resettable-minimal.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-roottask-resettable-musl.json b/support/targets/x86_64-sel4-roottask-resettable-musl.json deleted file mode 100644 index c7b1a2482..000000000 --- a/support/targets/x86_64-sel4-roottask-resettable-musl.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "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", - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "os": "linux", - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json b/support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json deleted file mode 100644 index ee64da812..000000000 --- a/support/targets/x86_64-sel4-roottask-resettable-unwind-musl.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "crt-static-default": true, - "crt-static-respected": true, - "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", - "disable-redzone": true, - "env": "musl", - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "os": "linux", - "plt-by-default": false, - "position-independent-executables": true, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-family": [ - "unix" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-roottask-resettable-unwind.json b/support/targets/x86_64-sel4-roottask-resettable-unwind.json deleted file mode 100644 index 1cbf1b671..000000000 --- a/support/targets/x86_64-sel4-roottask-resettable-unwind.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "plt-by-default": false, - "position-independent-executables": true, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} diff --git a/support/targets/x86_64-sel4-roottask-resettable.json b/support/targets/x86_64-sel4-roottask-resettable.json deleted file mode 100644 index 5d6855dd3..000000000 --- a/support/targets/x86_64-sel4-roottask-resettable.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "arch": "x86_64", - "code-model": "kernel", - "cpu": "x86-64", - "crt-objects-fallback": "false", - "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", - "disable-redzone": true, - "exe-suffix": ".elf", - "features": "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float", - "has-thread-local": true, - "link-script": "ASSERT(DEFINED(_reset), \"_reset is not defined\")\n\nENTRY(_reset)\n", - "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 - }, - "panic-strategy": "abort", - "plt-by-default": false, - "position-independent-executables": true, - "pre-link-args": { - "gnu-lld": [ - "-z", - "max-page-size=4096", - "--no-rosegment" - ] - }, - "relocation-model": "static", - "relro-level": "off", - "rustc-abi": "softfloat", - "stack-probes": { - "kind": "inline" - }, - "static-position-independent-executables": true, - "supported-sanitizers": [ - "kcfi", - "kernel-address" - ], - "target-pointer-width": 64 -} From 0897b1aca13460df530563f9fbc9fcb6c056b2d8 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 04:01:35 -0700 Subject: [PATCH 14/22] sel4-reset: Move out of crates/experimental Signed-off-by: Nick Spinale --- Cargo.toml | 4 ++-- crates/private/meta/Cargo.toml | 2 +- crates/private/tests/microkit/reset/Cargo.toml | 2 +- crates/private/tests/root-task/reset/Cargo.toml | 2 +- crates/{experimental => }/sel4-reset/Cargo.nix | 0 crates/{experimental => }/sel4-reset/Cargo.toml | 4 ++-- crates/{experimental => }/sel4-reset/cli/Cargo.nix | 0 crates/{experimental => }/sel4-reset/cli/Cargo.toml | 2 +- crates/{experimental => }/sel4-reset/cli/src/args.rs | 0 crates/{experimental => }/sel4-reset/cli/src/main.rs | 0 crates/{experimental => }/sel4-reset/src/lib.rs | 0 11 files changed, 8 insertions(+), 8 deletions(-) rename crates/{experimental => }/sel4-reset/Cargo.nix (100%) rename crates/{experimental => }/sel4-reset/Cargo.toml (82%) rename crates/{experimental => }/sel4-reset/cli/Cargo.nix (100%) rename crates/{experimental => }/sel4-reset/cli/Cargo.toml (89%) rename crates/{experimental => }/sel4-reset/cli/src/args.rs (100%) rename crates/{experimental => }/sel4-reset/cli/src/main.rs (100%) rename crates/{experimental => }/sel4-reset/src/lib.rs (100%) diff --git a/Cargo.toml b/Cargo.toml index 5b02100f2..8170234a3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,8 +71,6 @@ members = [ "crates/experimental/sel4-microkit/simple-ipc", "crates/experimental/sel4-musl", "crates/experimental/sel4-newlib", - "crates/experimental/sel4-reset", - "crates/experimental/sel4-reset/cli", "crates/experimental/sel4-shared-ring-buffer", "crates/experimental/sel4-shared-ring-buffer/block-io", "crates/experimental/sel4-shared-ring-buffer/block-io/types", @@ -147,6 +145,8 @@ members = [ "crates/sel4-panicking/env", "crates/sel4-platform-info", "crates/sel4-platform-info/types", + "crates/sel4-reset", + "crates/sel4-reset/cli", "crates/sel4-rodata-static", "crates/sel4-root-task", "crates/sel4-root-task/macros", diff --git a/crates/private/meta/Cargo.toml b/crates/private/meta/Cargo.toml index 694f0c610..7cfcfc65a 100644 --- a/crates/private/meta/Cargo.toml +++ b/crates/private/meta/Cargo.toml @@ -79,4 +79,4 @@ sel4-platform-info = { path = "../../sel4-platform-info", optional = true } sel4 = { path = "../../sel4", features = ["single-threaded"] } [target."cfg(target_arch = \"aarch64\")".dependencies] -sel4-reset = { path = "../../experimental/sel4-reset" } +sel4-reset = { path = "../../sel4-reset" } diff --git a/crates/private/tests/microkit/reset/Cargo.toml b/crates/private/tests/microkit/reset/Cargo.toml index 4b8e1bea5..c07ec9f20 100644 --- a/crates/private/tests/microkit/reset/Cargo.toml +++ b/crates/private/tests/microkit/reset/Cargo.toml @@ -18,5 +18,5 @@ license = "BSD-2-Clause" [dependencies] sel4-microkit = { path = "../../../../sel4-microkit" } -sel4-reset = { path = "../../../../experimental/sel4-reset" } +sel4-reset = { path = "../../../../sel4-reset" } sel4-test-microkit = { path = "../../../support/sel4-test-microkit" } diff --git a/crates/private/tests/root-task/reset/Cargo.toml b/crates/private/tests/root-task/reset/Cargo.toml index 6f4f70788..494b77476 100644 --- a/crates/private/tests/root-task/reset/Cargo.toml +++ b/crates/private/tests/root-task/reset/Cargo.toml @@ -18,6 +18,6 @@ license = "BSD-2-Clause" [dependencies] sel4 = { path = "../../../../sel4" } -sel4-reset = { path = "../../../../experimental/sel4-reset" } +sel4-reset = { path = "../../../../sel4-reset" } sel4-root-task = { path = "../../../../sel4-root-task" } sel4-test-root-task = { path = "../../../support/sel4-test-root-task" } diff --git a/crates/experimental/sel4-reset/Cargo.nix b/crates/sel4-reset/Cargo.nix similarity index 100% rename from crates/experimental/sel4-reset/Cargo.nix rename to crates/sel4-reset/Cargo.nix diff --git a/crates/experimental/sel4-reset/Cargo.toml b/crates/sel4-reset/Cargo.toml similarity index 82% rename from crates/experimental/sel4-reset/Cargo.toml rename to crates/sel4-reset/Cargo.toml index 969f60722..1ec063443 100644 --- a/crates/experimental/sel4-reset/Cargo.toml +++ b/crates/sel4-reset/Cargo.toml @@ -18,5 +18,5 @@ license = "BSD-2-Clause" [dependencies] cfg-if = "1.0.4" -sel4-rodata-static = { path = "../../sel4-rodata-static" } -sel4-stack = { path = "../../sel4-stack" } +sel4-rodata-static = { path = "../sel4-rodata-static" } +sel4-stack = { path = "../sel4-stack" } diff --git a/crates/experimental/sel4-reset/cli/Cargo.nix b/crates/sel4-reset/cli/Cargo.nix similarity index 100% rename from crates/experimental/sel4-reset/cli/Cargo.nix rename to crates/sel4-reset/cli/Cargo.nix diff --git a/crates/experimental/sel4-reset/cli/Cargo.toml b/crates/sel4-reset/cli/Cargo.toml similarity index 89% rename from crates/experimental/sel4-reset/cli/Cargo.toml rename to crates/sel4-reset/cli/Cargo.toml index 5389906c1..51491007e 100644 --- a/crates/experimental/sel4-reset/cli/Cargo.toml +++ b/crates/sel4-reset/cli/Cargo.toml @@ -21,4 +21,4 @@ anyhow = "1.0.100" clap = "4.5.50" num = "0.4.3" rangemap = "1.7.1" -sel4-synthetic-elf = { path = "../../../sel4-synthetic-elf" } +sel4-synthetic-elf = { path = "../../sel4-synthetic-elf" } diff --git a/crates/experimental/sel4-reset/cli/src/args.rs b/crates/sel4-reset/cli/src/args.rs similarity index 100% rename from crates/experimental/sel4-reset/cli/src/args.rs rename to crates/sel4-reset/cli/src/args.rs diff --git a/crates/experimental/sel4-reset/cli/src/main.rs b/crates/sel4-reset/cli/src/main.rs similarity index 100% rename from crates/experimental/sel4-reset/cli/src/main.rs rename to crates/sel4-reset/cli/src/main.rs diff --git a/crates/experimental/sel4-reset/src/lib.rs b/crates/sel4-reset/src/lib.rs similarity index 100% rename from crates/experimental/sel4-reset/src/lib.rs rename to crates/sel4-reset/src/lib.rs From fecd414934ed7de98f3d5ea71b75fbd09d515bdc Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Wed, 15 Apr 2026 04:12:38 -0700 Subject: [PATCH 15/22] Add Linux reset test Signed-off-by: Nick Spinale --- Cargo.lock | 8 ++++ Cargo.toml | 1 + .../sel4-minimal-linux-runtime/src/lib.rs | 2 +- .../support/sel4-test-runner/src/main.rs | 2 +- crates/sel4-reset/tests/Cargo.nix | 24 +++++++++++ crates/sel4-reset/tests/Cargo.toml | 28 +++++++++++++ crates/sel4-reset/tests/src/lib.rs | 7 ++++ crates/sel4-reset/tests/tests/test1.rs | 42 +++++++++++++++++++ 8 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 crates/sel4-reset/tests/Cargo.nix create mode 100644 crates/sel4-reset/tests/Cargo.toml create mode 100644 crates/sel4-reset/tests/src/lib.rs create mode 100644 crates/sel4-reset/tests/tests/test1.rs diff --git a/Cargo.lock b/Cargo.lock index ab31a8f1d..b27c8802c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2923,6 +2923,14 @@ dependencies = [ "sel4-synthetic-elf", ] +[[package]] +name = "sel4-reset-tests" +version = "0.1.0" +dependencies = [ + "sel4-minimal-linux-runtime", + "sel4-reset", +] + [[package]] name = "sel4-rodata-static" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 8170234a3..3fd4df4ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -147,6 +147,7 @@ members = [ "crates/sel4-platform-info/types", "crates/sel4-reset", "crates/sel4-reset/cli", + "crates/sel4-reset/tests", "crates/sel4-rodata-static", "crates/sel4-root-task", "crates/sel4-root-task/macros", diff --git a/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs b/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs index 29184f0ef..404578592 100644 --- a/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs +++ b/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs @@ -8,7 +8,7 @@ use core::panic::UnwindSafe; -pub use sel4_minimal_linux_syscalls::exit_success; +pub use sel4_minimal_linux_syscalls::{exit_failure, exit_success}; pub use sel4_panicking::catch_unwind; pub use sel4_panicking_env::{abort, debug_println}; diff --git a/crates/private/support/sel4-test-runner/src/main.rs b/crates/private/support/sel4-test-runner/src/main.rs index 133389636..056d97bec 100644 --- a/crates/private/support/sel4-test-runner/src/main.rs +++ b/crates/private/support/sel4-test-runner/src/main.rs @@ -87,10 +87,10 @@ struct Runner<'a> { impl<'a> Runner<'a> { fn run(&self) -> anyhow::Result<()> { + self.mk_resettable()?; match self.get_sel4_test_kind() { None => self.run_not_sel4(), Some(kind) => { - self.mk_resettable()?; let image = match kind { SeL4TestKind::RootTask => self.mk_root_task_image(self.exe)?, SeL4TestKind::Microkit => self.mk_microkit_image()?, diff --git a/crates/sel4-reset/tests/Cargo.nix b/crates/sel4-reset/tests/Cargo.nix new file mode 100644 index 000000000..28120c294 --- /dev/null +++ b/crates/sel4-reset/tests/Cargo.nix @@ -0,0 +1,24 @@ +# +# Copyright 2026, Colias Group, LLC +# +# SPDX-License-Identifier: BSD-2-Clause +# + +{ mk, localCrates }: + +mk { + package.name = "sel4-reset-tests"; + lib.test = false; + dependencies = { + inherit (localCrates) + sel4-minimal-linux-runtime + sel4-reset + ; + }; + test = [ + { + name = "test1"; + harness = false; + } + ]; +} diff --git a/crates/sel4-reset/tests/Cargo.toml b/crates/sel4-reset/tests/Cargo.toml new file mode 100644 index 000000000..581b003c1 --- /dev/null +++ b/crates/sel4-reset/tests/Cargo.toml @@ -0,0 +1,28 @@ +# +# Copyright 2023, Colias Group, LLC +# +# SPDX-License-Identifier: BSD-2-Clause +# +# +# This file is generated from './Cargo.nix'. You can edit this file directly +# if you are not using this project's Cargo manifest management tools. +# See 'hacking/cargo-manifest-management/README.md' for more information. +# + +[package] +name = "sel4-reset-tests" +version = "0.1.0" +authors = ["Nick Spinale "] +edition = "2024" +license = "BSD-2-Clause" + +[lib] +test = false + +[[test]] +harness = false +name = "test1" + +[dependencies] +sel4-minimal-linux-runtime = { path = "../../private/support/sel4-minimal-linux-runtime" } +sel4-reset = { path = ".." } diff --git a/crates/sel4-reset/tests/src/lib.rs b/crates/sel4-reset/tests/src/lib.rs new file mode 100644 index 000000000..c1bfa5897 --- /dev/null +++ b/crates/sel4-reset/tests/src/lib.rs @@ -0,0 +1,7 @@ +// +// Copyright 2026, Colias Group, LLC +// +// SPDX-License-Identifier: BSD-2-Clause +// + +#![no_std] diff --git a/crates/sel4-reset/tests/tests/test1.rs b/crates/sel4-reset/tests/tests/test1.rs new file mode 100644 index 000000000..71d69d26a --- /dev/null +++ b/crates/sel4-reset/tests/tests/test1.rs @@ -0,0 +1,42 @@ +// +// Copyright 2023, Colias Group, LLC +// +// SPDX-License-Identifier: BSD-2-Clause +// + +#![no_std] +#![no_main] +#![allow(static_mut_refs)] + +use sel4_minimal_linux_runtime::*; +use sel4_reset::reset; + +const INIT: usize = 1337; + +static mut NOT_PERSISTENT: usize = INIT; + +#[unsafe(link_section = ".persistent")] +static mut PERSISTENT: usize = INIT; + +#[unsafe(link_section = ".persistent")] +static mut RESET_COUNT: usize = 0; + +#[main] +fn main() { + unsafe { + debug_println!("NOT_PERSISTENT: {NOT_PERSISTENT}"); + debug_println!("PERSISTENT: {PERSISTENT}"); + debug_println!("RESET_COUNT: {RESET_COUNT}"); + + if RESET_COUNT == 3 { + assert_eq!(NOT_PERSISTENT, INIT); + assert_eq!(PERSISTENT, INIT + RESET_COUNT); + exit_success() + } + + NOT_PERSISTENT += 1; + PERSISTENT += 1; + RESET_COUNT += 1; + } + reset() +} From 0de015c279183cd635a4f3c5464aa3e4c767ac3b Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 03:01:56 -0700 Subject: [PATCH 16/22] Address warning Signed-off-by: Nick Spinale --- crates/private/support/sel4-minimal-linux-runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs b/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs index 404578592..6d2bf7c96 100644 --- a/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs +++ b/crates/private/support/sel4-minimal-linux-runtime/src/lib.rs @@ -90,7 +90,7 @@ pub fn _run_main(f: F) -> ! where F: FnOnce() + UnwindSafe, { - let r = catch_unwind(move || f()); + let r = catch_unwind(f); match r { Ok(()) => exit_success(), Err(()) => abort!("uncaught panic in main"), From b46871325917eea9375cd3bec27b2d83895097b3 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 21:58:18 -0700 Subject: [PATCH 17/22] sel4-reset: Switch to append phdrs approach Signed-off-by: Nick Spinale --- Cargo.lock | 4 +- crates/sel4-reset/Cargo.nix | 2 +- crates/sel4-reset/Cargo.toml | 1 + crates/sel4-reset/cli/Cargo.nix | 6 +- crates/sel4-reset/cli/Cargo.toml | 4 +- crates/sel4-reset/cli/src/args.rs | 40 -- crates/sel4-reset/cli/src/main.rs | 570 +++++++++++++++++++------- crates/sel4-reset/src/lib.rs | 46 +-- crates/sel4-runtime-common/Cargo.nix | 1 + crates/sel4-runtime-common/Cargo.toml | 1 + crates/sel4-runtime-common/src/lib.rs | 22 +- 11 files changed, 470 insertions(+), 227 deletions(-) delete mode 100644 crates/sel4-reset/cli/src/args.rs diff --git a/Cargo.lock b/Cargo.lock index b27c8802c..d22ab2eb0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2908,6 +2908,7 @@ name = "sel4-reset" version = "0.1.0" dependencies = [ "cfg-if", + "sel4-panicking-env", "sel4-rodata-static", "sel4-stack", ] @@ -2919,8 +2920,8 @@ dependencies = [ "anyhow", "clap", "num", + "object", "rangemap", - "sel4-synthetic-elf", ] [[package]] @@ -2984,6 +2985,7 @@ dependencies = [ "sel4", "sel4-ctors-dtors", "sel4-elf-header", + "sel4-immutable-cell", "sel4-initialize-tls", "sel4-panicking-env", "sel4-stack", diff --git a/crates/sel4-reset/Cargo.nix b/crates/sel4-reset/Cargo.nix index 7aa945365..e38d8ce4a 100644 --- a/crates/sel4-reset/Cargo.nix +++ b/crates/sel4-reset/Cargo.nix @@ -10,6 +10,6 @@ mk { package.name = "sel4-reset"; dependencies = { inherit (versions) cfg-if; - inherit (localCrates) sel4-stack sel4-rodata-static; + inherit (localCrates) sel4-stack sel4-rodata-static sel4-panicking-env; }; } diff --git a/crates/sel4-reset/Cargo.toml b/crates/sel4-reset/Cargo.toml index 1ec063443..40db083fd 100644 --- a/crates/sel4-reset/Cargo.toml +++ b/crates/sel4-reset/Cargo.toml @@ -18,5 +18,6 @@ license = "BSD-2-Clause" [dependencies] cfg-if = "1.0.4" +sel4-panicking-env = { path = "../sel4-panicking/env" } sel4-rodata-static = { path = "../sel4-rodata-static" } sel4-stack = { path = "../sel4-stack" } diff --git a/crates/sel4-reset/cli/Cargo.nix b/crates/sel4-reset/cli/Cargo.nix index d0c909cc0..9d3cf9778 100644 --- a/crates/sel4-reset/cli/Cargo.nix +++ b/crates/sel4-reset/cli/Cargo.nix @@ -12,11 +12,9 @@ mk { inherit (versions) anyhow num - clap rangemap + object ; - inherit (localCrates) - sel4-synthetic-elf - ; + clap = { version = versions.clap; features = [ "derive" ]; }; }; } diff --git a/crates/sel4-reset/cli/Cargo.toml b/crates/sel4-reset/cli/Cargo.toml index 51491007e..cb00483e6 100644 --- a/crates/sel4-reset/cli/Cargo.toml +++ b/crates/sel4-reset/cli/Cargo.toml @@ -18,7 +18,7 @@ license = "BSD-2-Clause" [dependencies] anyhow = "1.0.100" -clap = "4.5.50" +clap = { version = "4.5.50", features = ["derive"] } num = "0.4.3" +object = "0.38.1" rangemap = "1.7.1" -sel4-synthetic-elf = { path = "../../sel4-synthetic-elf" } diff --git a/crates/sel4-reset/cli/src/args.rs b/crates/sel4-reset/cli/src/args.rs deleted file mode 100644 index d656ec699..000000000 --- a/crates/sel4-reset/cli/src/args.rs +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright 2024, Colias Group, LLC -// -// SPDX-License-Identifier: BSD-2-Clause -// - -use anyhow::Result; -use clap::{Arg, ArgAction, Command}; - -#[derive(Debug)] -pub struct Args { - pub in_file_path: String, - pub out_file_path: String, - pub verbose: bool, -} - -impl Args { - pub fn parse() -> Result { - let matches = Command::new("") - .arg(Arg::new("in_file").value_name("IN")) - .arg( - Arg::new("out_file") - .short('o') - .value_name("OUT") - .required(true), - ) - .arg(Arg::new("verbose").short('v').action(ArgAction::SetTrue)) - .get_matches(); - - let in_file_path = matches.get_one::("in_file").unwrap().to_owned(); - let out_file_path = matches.get_one::("out_file").unwrap().to_owned(); - let verbose = *matches.get_one::("verbose").unwrap(); - - Ok(Self { - in_file_path, - out_file_path, - verbose, - }) - } -} diff --git a/crates/sel4-reset/cli/src/main.rs b/crates/sel4-reset/cli/src/main.rs index 73907b0ac..e6a95f1a8 100644 --- a/crates/sel4-reset/cli/src/main.rs +++ b/crates/sel4-reset/cli/src/main.rs @@ -1,191 +1,477 @@ // -// Copyright 2024, Colias Group, LLC +// Copyright 2026, Colias Group, LLC // // SPDX-License-Identifier: BSD-2-Clause // -use std::fs; +use std::ops::Range; +use std::path::PathBuf; +use std::{any, fs}; -use anyhow::Result; -use num::NumCast; +use clap::Parser; + +use anyhow::Error; +use num::{NumCast, ToPrimitive}; +use object::elf::{FileHeader32, FileHeader64, PF_R, PT_PHDR, ProgramHeader32, ProgramHeader64}; use object::elf::{PF_W, PT_LOAD}; use object::read::elf::{ElfFile, FileHeader, ProgramHeader}; -use object::{Endian, File, Object, ObjectSection, ReadCache, ReadRef}; +use object::{Endian, File, Object, ObjectSection, ObjectSegment, ObjectSymbol, U32, U64, pod}; use rangemap::RangeSet; -use sel4_synthetic_elf::{Builder, PatchValue, Segment, object}; - -mod args; - -use args::Args; +// HACK +const PAGE_SIZE: u64 = 4096; -fn main() -> Result<()> { - let args = Args::parse()?; +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Cli { + in_file_path: PathBuf, + #[arg(short = 'o')] + out_file_path: PathBuf, +} - if args.verbose { - eprintln!("{args:#?}"); - } +fn main() -> Result<(), Error> { + let cli = Cli::parse(); - let in_file = fs::File::open(&args.in_file_path)?; - let in_file_cached = ReadCache::new(in_file); - let in_obj_file = File::parse(&in_file_cached)?; + let in_perms = fs::metadata(&cli.in_file_path)?.permissions(); + let in_bytes = fs::read(&cli.in_file_path)?; + let in_file = File::parse(in_bytes.as_slice())?; - match in_obj_file { - File::Elf32(elf) => continue_with_type(&args, &elf), - File::Elf64(elf) => continue_with_type(&args, &elf), + let out_bytes = match in_file { + File::Elf32(elf) => continue_with_type(&elf), + File::Elf64(elf) => continue_with_type(&elf), _ => { panic!() } - } + }?; + + fs::write(&cli.out_file_path, &out_bytes)?; + fs::set_permissions(&cli.out_file_path, in_perms)?; + + Ok(()) } -fn continue_with_type<'a, T, R>(args: &Args, elf: &'a ElfFile<'a, T, R>) -> Result<()> +fn continue_with_type<'a, T>(orig_elf: &'a ElfFile<'a, T>) -> Result, Error> where - R: ReadRef<'a>, - T: FileHeader, + T: FileHeader + PatchPhoff, { - let endian = elf.endian(); - - let persistent_ranges = { - let mut set = RangeSet::new(); - for s in elf.sections() { - if let Ok(name) = s.name() - && (name == ".persistent" || name.starts_with(".persistent.")) - { - set.insert(s.address()..(s.address() + s.size())); - } - } - set - }; - - let mut builder = Builder::empty(elf); - - let mut regions_builder = RegionsBuilder::::new(); - - for phdr in elf.elf_program_headers() { - if phdr.p_type(endian) == PT_LOAD { - let segment = Segment::from_phdr(phdr, endian, elf.data())?; - builder.add_segment(segment); - if phdr.p_flags(endian) & PF_W != 0 { - let vaddr = phdr.p_vaddr(endian).into(); - let memsz = phdr.p_memsz(endian).into(); - let data = phdr.data(endian, elf.data()).unwrap(); - let segment_range = vaddr..(vaddr + memsz); - let relevant_persistent_ranges = RangeSet::from_iter( - persistent_ranges.intersection(&RangeSet::from_iter([segment_range.clone()])), - ); - for ephermal in relevant_persistent_ranges.gaps(&segment_range) { - let region_memsz = ephermal.end - ephermal.start; - let region_offset_in_segment = ephermal.start - vaddr; - let region_data = if region_offset_in_segment < data.len().try_into().unwrap() { - &data[region_offset_in_segment.try_into().unwrap() - ..data.len().min((ephermal.end - vaddr).try_into().unwrap())] - } else { - &[] - }; - regions_builder.add_region(ephermal.start, region_memsz, region_data); - } - } - } - } - - let regions = regions_builder.build(endian); - - let vaddr = builder.next_vaddr().next_multiple_of(4096); - - builder.add_segment(Segment::simple(vaddr, regions.raw.into())); + let mut x = X::new(orig_elf); + x.add_regions(); + let data = x.finalize(); + Ok(data) +} - builder - .patch_word_with_cast("sel4_reset_regions_start", vaddr) - .unwrap(); - builder - .patch_word_with_cast("sel4_reset_regions_meta_offset", regions.meta_offset) - .unwrap(); - builder - .patch_word_with_cast("sel4_reset_regions_meta_count", regions.meta_count) - .unwrap(); - builder - .patch_word_with_cast("sel4_reset_regions_data_offset", regions.data_offset) - .unwrap(); - builder - .patch_word_with_cast("sel4_reset_regions_data_size", regions.data_size) - .unwrap(); +struct X<'a, T: FileHeader> { + orig_elf: &'a ElfFile<'a, T>, + phdrs: Vec, + data: Vec, +} - builder.discard_p_align(true); +pub trait PatchValue { + fn to_bytes(&self, endian: impl Endian) -> Vec; +} - let out_bytes = builder.build().unwrap(); +impl PatchValue for u32 { + fn to_bytes(&self, endian: impl Endian) -> Vec { + endian.write_u32_bytes(*self).to_vec() + } +} - let out_file_path = &args.out_file_path; +impl PatchValue for u64 { + fn to_bytes(&self, endian: impl Endian) -> Vec { + endian.write_u64_bytes(*self).to_vec() + } +} - fs::write(out_file_path, out_bytes)?; - Ok(()) +struct RegionMeta { + dst_vaddr: T::Word, + dst_size: T::Word, + src_vaddr: T::Word, + src_size: T::Word, } -struct RegionsBuilder { - meta: Vec>, - data: Vec, +impl> RegionMeta { + fn pack(&self, endian: impl Endian, buf: &mut Vec) { + buf.extend_from_slice(&self.dst_vaddr.to_bytes(endian)); + buf.extend_from_slice(&self.dst_size.to_bytes(endian)); + buf.extend_from_slice(&self.src_vaddr.to_bytes(endian)); + buf.extend_from_slice(&self.src_size.to_bytes(endian)); + } } -impl> RegionsBuilder { - fn new() -> Self { +impl<'a, T: FileHeader + PatchPhoff> X<'a, T> { + fn new(orig_elf: &'a ElfFile<'a, T>) -> Self { Self { - meta: vec![], - data: vec![], + orig_elf, + phdrs: orig_elf.elf_program_headers().to_vec(), + data: orig_elf.data().to_vec(), } } - fn add_region(&mut self, vaddr: u64, memsz: u64, data: &[u8]) { - let offset = self.data.len(); - let filesz = data.len(); + fn endian(&self) -> T::Endian { + self.orig_elf.endian() + } + + fn footprint(&self) -> Option> { + let start = self + .phdrs + .iter() + .map(|phdr| phdr.p_vaddr(self.endian()).into()) + .min()?; + let end = self + .phdrs + .iter() + .map(|phdr| phdr.p_vaddr(self.endian()).into() + phdr.p_memsz(self.endian()).into()) + .max()?; + Some(start..end) + } + + fn next_aligned_vaddr(&self, align: u64) -> u64 { + self.footprint() + .map(|footprint| footprint.end) + .unwrap_or(0) + .next_multiple_of(align.max(1)) + } + + fn align_data_cursor(&mut self, align: u64) { + self.data.resize( + self.data.len().next_multiple_of(align.try_into().unwrap()), + 0, + ); + } + + #[allow(dead_code)] + fn segment_data(&mut self, phdr: &T::ProgramHeader) -> &mut [u8] { + let endian = self.endian(); + let offset = phdr.p_offset(endian).to_usize().unwrap(); + let filesz = phdr.p_filesz(endian).to_usize().unwrap(); + &mut self.data[offset..][..filesz] + } + + fn add_segment( + &mut self, + p_type: u32, + p_flags: u32, + p_memsz: u64, + p_align: u64, + data_align: u64, + data: &[u8], + ) -> T::ProgramHeader { + assert!(data_align <= p_align); + self.align_data_cursor(data_align); + let p_offset = self.data.len().try_into().unwrap(); + let p_filesz = data.len().try_into().unwrap(); self.data.extend_from_slice(data); - self.meta.push(RegionMeta { - vaddr: NumCast::from(vaddr).unwrap(), - offset: NumCast::from(offset).unwrap(), - filesz: NumCast::from(filesz).unwrap(), - memsz: NumCast::from(memsz).unwrap(), + self.add_segment_raw(GenericProgramHeader { + p_type, + p_flags, + p_offset, + p_vaddr: 0, + p_paddr: 0, + p_filesz, + p_memsz, + p_align, }) } - fn build(&self, endian: impl Endian) -> Regions { - let mut raw = vec![]; - let meta_offset = raw.len(); - let meta_count = self.meta.len(); - for meta in self.meta.iter() { - meta.pack(endian, &mut raw); + fn add_segment_raw(&mut self, mut phdr: GenericProgramHeader) -> T::ProgramHeader { + let p_vaddr = self.next_aligned_vaddr(phdr.p_align) + phdr.p_offset % phdr.p_align.max(1); + phdr.p_vaddr = p_vaddr; + phdr.p_paddr = p_vaddr; + let phdr = T::convert_phdr(self.endian(), &phdr); + self.phdrs.push(phdr); + phdr + } + + fn patch_word(&mut self, symbol_name: &str, value: T::Word) { + let value_bytes = value.to_bytes(self.endian()); + let symbol = self.orig_elf.symbol_by_name(symbol_name).unwrap(); + let symbol_vaddr = symbol.address(); + assert_eq!(usize::try_from(symbol.size()).unwrap(), value_bytes.len()); + let offset_in_file = self + .orig_elf + .segments() + .find_map(|segment| { + let seg_mem_start = segment.address(); + let seg_mem_end = seg_mem_start + segment.size(); + if (seg_mem_start..seg_mem_end).contains(&symbol_vaddr) { + let offset_in_seg = symbol_vaddr - seg_mem_start; + let (seg_file_start, seg_file_size) = segment.file_range(); + assert!( + offset_in_seg + u64::try_from(value_bytes.len()).unwrap() <= seg_file_size + ); + Some(seg_file_start + offset_in_seg) + } else { + None + } + }) + .unwrap(); + self.data[usize::try_from(offset_in_file).unwrap()..][..value_bytes.len()] + .copy_from_slice(&value_bytes); + } + + pub fn patch_word_with_cast(&mut self, symbol_name: &str, value: impl ToPrimitive + Clone) + where + T::Word: PatchValue + NumCast, + { + self.patch_word( + symbol_name, + ::from(value.clone()).unwrap_or_else(|| { + panic!( + "value {:#x?} out of bounds for word type {}", + value.to_u64().unwrap(), + any::type_name::() + ) + }), + ) + } + + fn add_all_phdrs(&mut self) -> T::ProgramHeader { + let endian = self.endian(); + let phdrs_load_phdr = { + let data_align = align_of::().try_into().unwrap(); + let eventual_n = self.phdrs.len() + 1; + let data_size = size_of::() + eventual_n * size_of::(); + self.add_segment( + PT_LOAD, + PF_R, + data_size.try_into().unwrap(), + PAGE_SIZE, + data_align, + &vec![0; data_size], + ) + }; + let mut phdrs_phdr_phdr = phdrs_load_phdr; + T::set_p_type(&mut phdrs_phdr_phdr, endian, PT_PHDR); + T::take_offset( + &mut phdrs_phdr_phdr, + endian, + ::from(size_of::()).unwrap(), + ); + for phdr in self.phdrs.iter_mut() { + if phdr.p_type(endian) == PT_PHDR { + *phdr = phdrs_phdr_phdr; + } + } + { + let offset = phdrs_load_phdr.p_offset(endian).to_usize().unwrap(); + let filesz = phdrs_load_phdr.p_filesz(endian).to_usize().unwrap(); + let seg_data = &mut self.data[offset..][..filesz]; + let (ehdr_data, phdrs_data) = seg_data.split_at_mut(size_of::()); + let mut new_ehdr = *self.orig_elf.elf_header(); + new_ehdr.patch_fake_header(self.phdrs.len()); + ehdr_data.copy_from_slice(pod::bytes_of(&new_ehdr)); + phdrs_data.copy_from_slice(pod::bytes_of_slice(&self.phdrs)); } - let data_offset = raw.len(); - let data_size = self.data.len(); - raw.extend_from_slice(&self.data); - Regions { - raw, - meta_offset, - meta_count, - data_offset, - data_size, + self.patch_word_with_cast("HACK__ehdr_start", phdrs_load_phdr.p_vaddr(endian)); + phdrs_phdr_phdr + } + + fn add_regions(&mut self) { + let endian = self.endian(); + + let persistent_ranges = { + let mut set = RangeSet::new(); + for s in self.orig_elf.sections() { + if let Ok(name) = s.name() + && (name == ".persistent" || name.starts_with(".persistent.")) + { + set.insert(s.address()..(s.address() + s.size())); + } + } + set + }; + + let mut regions: Vec> = vec![]; + for seg in self.orig_elf.segments() { + let phdr = seg.elf_program_header(); + if phdr.p_type(endian) == PT_LOAD && phdr.p_flags(endian) & PF_W != 0 { + let p_align = phdr.p_align(endian).into(); + let p_filesz = phdr.p_filesz(endian).into(); + let alt_phdr = self.add_segment_raw(GenericProgramHeader { + p_type: PT_LOAD, + p_flags: PF_R, + p_offset: phdr.p_offset(endian).into(), + p_vaddr: 0, + p_paddr: 0, + p_filesz, + p_memsz: p_filesz, + p_align, + }); + { + let vaddr = phdr.p_vaddr(endian).into(); + let memsz = phdr.p_memsz(endian).into(); + let segment_range = vaddr..(vaddr + memsz); + let relevant_persistent_ranges = RangeSet::from_iter( + persistent_ranges + .intersection(&RangeSet::from_iter([segment_range.clone()])), + ); + for ephermal in relevant_persistent_ranges.gaps(&segment_range) { + let region_memsz = ephermal.end - ephermal.start; + let region_offset_in_segment = ephermal.start - vaddr; + let (src_vaddr, src_size) = if region_offset_in_segment + < alt_phdr.p_filesz(endian).into() + { + let start = alt_phdr.p_vaddr(endian).into() + region_offset_in_segment; + ( + start, + alt_phdr.p_filesz(endian).into().min(ephermal.end - vaddr), + ) + } else { + (0, 0) + }; + regions.push(RegionMeta { + dst_vaddr: ::from(ephermal.start).unwrap(), + dst_size: ::from(region_memsz).unwrap(), + src_vaddr: ::from(src_vaddr).unwrap(), + src_size: ::from(src_size).unwrap(), + }); + } + } + } } + let regions_meta_data = { + let mut v = vec![]; + for m in regions.iter() { + m.pack(endian, &mut v); + } + v + }; + let regions_meta_phdr = self.add_segment( + PT_LOAD, + PF_R, + regions_meta_data.len().try_into().unwrap(), + PAGE_SIZE, + align_of::>().try_into().unwrap(), + ®ions_meta_data, + ); + self.patch_word_with_cast( + "sel4_reset_regions_meta_vaddr", + regions_meta_phdr.p_vaddr(endian), + ); + self.patch_word_with_cast("sel4_reset_regions_meta_count", regions.len()); + } + + fn finalize(mut self) -> Vec { + let endian = self.endian(); + let all_phdrs_phdr = self.add_all_phdrs(); + let (ehdr, _) = pod::from_bytes_mut::(&mut self.data).unwrap(); + ehdr.patch_header(all_phdrs_phdr.p_offset(endian), self.phdrs.len()); + self.data } } -struct RegionMeta { - vaddr: T::Word, - offset: T::Word, - filesz: T::Word, - memsz: T::Word, +#[derive(Debug, Copy, Clone, Default)] +pub struct GenericProgramHeader { + pub p_type: u32, + pub p_flags: u32, + pub p_offset: u64, + pub p_vaddr: u64, + pub p_paddr: u64, + pub p_filesz: u64, + pub p_memsz: u64, + pub p_align: u64, } -impl> RegionMeta { - fn pack(&self, endian: impl Endian, buf: &mut Vec) { - buf.extend_from_slice(&self.vaddr.to_bytes(endian)); - buf.extend_from_slice(&self.offset.to_bytes(endian)); - buf.extend_from_slice(&self.filesz.to_bytes(endian)); - buf.extend_from_slice(&self.memsz.to_bytes(endian)); +trait PatchPhoff: FileHeader { + fn patch_header(&mut self, e_phoff: Self::Word, e_phnum: usize); + fn patch_fake_header(&mut self, e_phnum: usize); + fn convert_phdr(endian: Self::Endian, generic: &GenericProgramHeader) -> Self::ProgramHeader; + fn set_p_type(phdr: &mut Self::ProgramHeader, endian: Self::Endian, p_type: u32); + fn take_offset(phdr: &mut Self::ProgramHeader, endian: Self::Endian, n: Self::Word); +} + +impl PatchPhoff for FileHeader32 { + fn patch_header(&mut self, e_phoff: Self::Word, e_phnum: usize) { + self.e_phoff.set(self.endian().unwrap(), e_phoff); + self.e_phnum + .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); + self.e_phnum.set( + self.endian().unwrap(), + (e_phnum * size_of::()) + .try_into() + .unwrap(), + ); + } + + fn patch_fake_header(&mut self, e_phnum: usize) { + self.e_phnum + .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); + self.e_phnum.set( + self.endian().unwrap(), + (e_phnum * size_of::()) + .try_into() + .unwrap(), + ); + } + + fn convert_phdr(endian: Self::Endian, generic: &GenericProgramHeader) -> Self::ProgramHeader { + ProgramHeader32 { + p_type: U32::new(endian, generic.p_type), + p_offset: U32::new(endian, generic.p_offset.try_into().unwrap()), + p_vaddr: U32::new(endian, generic.p_vaddr.try_into().unwrap()), + p_paddr: U32::new(endian, generic.p_paddr.try_into().unwrap()), + p_filesz: U32::new(endian, generic.p_filesz.try_into().unwrap()), + p_memsz: U32::new(endian, generic.p_memsz.try_into().unwrap()), + p_flags: U32::new(endian, generic.p_flags), + p_align: U32::new(endian, generic.p_align.try_into().unwrap()), + } + } + + fn set_p_type(phdr: &mut Self::ProgramHeader, endian: Self::Endian, p_type: u32) { + phdr.p_type.set(endian, p_type) + } + + fn take_offset(phdr: &mut Self::ProgramHeader, endian: Self::Endian, n: Self::Word) { + phdr.p_offset.set(endian, phdr.p_offset.get(endian) + n); + phdr.p_vaddr.set(endian, phdr.p_vaddr.get(endian) + n); + phdr.p_paddr.set(endian, phdr.p_paddr.get(endian) + n); + phdr.p_filesz + .set(endian, phdr.p_filesz.get(endian).saturating_sub(n)); + phdr.p_memsz.set(endian, phdr.p_memsz.get(endian) - n); } } -struct Regions { - raw: Vec, - meta_offset: usize, - meta_count: usize, - data_offset: usize, - data_size: usize, +impl PatchPhoff for FileHeader64 { + fn patch_header(&mut self, e_phoff: Self::Word, e_phnum: usize) { + self.e_phoff.set(self.endian().unwrap(), e_phoff); + self.e_phnum + .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); + } + + fn patch_fake_header(&mut self, e_phnum: usize) { + self.e_phnum + .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); + self.e_phnum.set( + self.endian().unwrap(), + (e_phnum * size_of::()) + .try_into() + .unwrap(), + ); + } + + fn convert_phdr(endian: Self::Endian, generic: &GenericProgramHeader) -> Self::ProgramHeader { + ProgramHeader64 { + p_type: U32::new(endian, generic.p_type), + p_flags: U32::new(endian, generic.p_flags), + p_offset: U64::new(endian, generic.p_offset), + p_vaddr: U64::new(endian, generic.p_vaddr), + p_paddr: U64::new(endian, generic.p_paddr), + p_filesz: U64::new(endian, generic.p_filesz), + p_memsz: U64::new(endian, generic.p_memsz), + p_align: U64::new(endian, generic.p_align), + } + } + + fn set_p_type(phdr: &mut Self::ProgramHeader, endian: Self::Endian, p_type: u32) { + phdr.p_type.set(endian, p_type) + } + + fn take_offset(phdr: &mut Self::ProgramHeader, endian: Self::Endian, n: Self::Word) { + phdr.p_offset.set(endian, phdr.p_offset.get(endian) + n); + phdr.p_vaddr.set(endian, phdr.p_vaddr.get(endian) + n); + phdr.p_paddr.set(endian, phdr.p_paddr.get(endian) + n); + phdr.p_filesz + .set(endian, phdr.p_filesz.get(endian).saturating_sub(n)); + phdr.p_memsz.set(endian, phdr.p_memsz.get(endian) - n); + } } diff --git a/crates/sel4-reset/src/lib.rs b/crates/sel4-reset/src/lib.rs index 9e3484a67..94e86ff4d 100644 --- a/crates/sel4-reset/src/lib.rs +++ b/crates/sel4-reset/src/lib.rs @@ -26,41 +26,29 @@ compile_error!("unsupported architecture"); #[repr(C)] #[derive(Debug)] struct RegionMeta { - vaddr: usize, - offset: usize, - filesz: usize, - memsz: usize, + dst_vaddr: usize, + dst_size: usize, + src_vaddr: usize, + src_size: usize, } -struct Regions<'a> { - meta: &'a [RegionMeta], - data: &'a [u8], -} - -impl Regions<'_> { - unsafe fn reset_memory(&self) { - for meta in self.meta { - let dst = unsafe { slice::from_raw_parts_mut(meta.vaddr as *mut _, meta.memsz) }; - let (dst_data, dst_zero) = dst.split_at_mut(meta.filesz); - let src_data = &self.data[meta.offset..][..meta.filesz]; - dst_data.copy_from_slice(src_data); - dst_zero.fill(0); +unsafe fn reset_memory(regions: &'static [RegionMeta]) { + for meta in regions { + let dst = unsafe { slice::from_raw_parts_mut(meta.dst_vaddr as *mut u8, meta.dst_size) }; + let (dst_data, dst_zero) = dst.split_at_mut(meta.src_size); + if meta.src_vaddr != 0 { + let src = + unsafe { slice::from_raw_parts_mut(meta.src_vaddr as *mut u8, meta.src_size) }; + dst_data.copy_from_slice(src); } + dst_zero.fill(0); } } -unsafe fn get_regions() -> Regions<'static> { - let start = *rodata_static!(sel4_reset_regions_start: usize); - let meta_offset = *rodata_static!(sel4_reset_regions_meta_offset: usize); +unsafe fn get_regions() -> &'static [RegionMeta] { + let meta_vaddr = *rodata_static!(sel4_reset_regions_meta_vaddr: usize); let meta_count = *rodata_static!(sel4_reset_regions_meta_count: usize); - let data_offset = *rodata_static!(sel4_reset_regions_data_offset: usize); - let data_size = *rodata_static!(sel4_reset_regions_data_size: usize); - unsafe { - Regions { - meta: slice::from_raw_parts((start + meta_offset) as *const _, meta_count), - data: slice::from_raw_parts((start + data_offset) as *const _, data_size), - } - } + unsafe { slice::from_raw_parts(meta_vaddr as *const _, meta_count) } } // // // @@ -108,7 +96,7 @@ unsafe extern "C" fn __sel4_reset__rust_entrypoint( x3: usize, ) -> ! { unsafe { - get_regions().reset_memory(); + reset_memory(get_regions()); _start(x0, x1, x2, x3) } } diff --git a/crates/sel4-runtime-common/Cargo.nix b/crates/sel4-runtime-common/Cargo.nix index 66083bce3..6873bd519 100644 --- a/crates/sel4-runtime-common/Cargo.nix +++ b/crates/sel4-runtime-common/Cargo.nix @@ -13,6 +13,7 @@ mk { inherit (localCrates) sel4-panicking-env sel4-elf-header + sel4-immutable-cell sel4-stack sel4-ctors-dtors ; diff --git a/crates/sel4-runtime-common/Cargo.toml b/crates/sel4-runtime-common/Cargo.toml index a1ed6368a..0fcf2e44f 100644 --- a/crates/sel4-runtime-common/Cargo.toml +++ b/crates/sel4-runtime-common/Cargo.toml @@ -20,6 +20,7 @@ license = "BSD-2-Clause" cfg-if = "1.0.4" sel4-ctors-dtors = { path = "../sel4-ctors-dtors" } sel4-elf-header = { path = "../sel4-elf-header" } +sel4-immutable-cell = { path = "../sel4-immutable-cell" } sel4-panicking-env = { path = "../sel4-panicking/env" } sel4-stack = { path = "../sel4-stack" } diff --git a/crates/sel4-runtime-common/src/lib.rs b/crates/sel4-runtime-common/src/lib.rs index ad312b92d..e63b81034 100644 --- a/crates/sel4-runtime-common/src/lib.rs +++ b/crates/sel4-runtime-common/src/lib.rs @@ -10,10 +10,12 @@ #![feature(core_intrinsics)] #![feature(linkage)] #![allow(internal_features)] +#![feature(used_with_arg)] use core::sync::atomic::{AtomicBool, Ordering}; use sel4_elf_header::{ElfHeader, ProgramHeader}; +use sel4_immutable_cell::ImmutableCell; use sel4_panicking_env::abort; mod abort; @@ -64,17 +66,21 @@ pub fn global_init_complete() -> bool { GLOBAL_INIT_COMPLETE.load(Ordering::Acquire) } +unsafe extern "C" { + static __ehdr_start: ElfHeader; +} + +#[used(linker)] +#[unsafe(no_mangle)] +static HACK__ehdr_start: ImmutableCell<&ElfHeader> = ImmutableCell::new(unsafe { &__ehdr_start }); + #[allow(dead_code)] fn locate_phdrs() -> &'static [ProgramHeader] { - unsafe extern "C" { - static __ehdr_start: ElfHeader; - } - unsafe { - if !__ehdr_start.is_magic_valid() { - abort!("ELF header magic mismatch") - } - __ehdr_start.locate_phdrs() + let hdr = HACK__ehdr_start.get(); + if !hdr.is_magic_valid() { + abort!("ELF header magic mismatch") } + hdr.locate_phdrs() } #[cfg(target_arch = "arm")] From 44a80cd769401b8d31674391f159d6df53f4e603 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 22:07:01 -0700 Subject: [PATCH 18/22] Remove unnecessary supplementary object files Signed-off-by: Nick Spinale --- crates/private/support/sel4-test-runner/src/main.rs | 9 --------- crates/private/tests/microkit/reset/src/bin/system.xml | 2 +- hacking/nix/scope/world/instances/microkit/default.nix | 8 -------- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/crates/private/support/sel4-test-runner/src/main.rs b/crates/private/support/sel4-test-runner/src/main.rs index 056d97bec..297c7dcb9 100644 --- a/crates/private/support/sel4-test-runner/src/main.rs +++ b/crates/private/support/sel4-test-runner/src/main.rs @@ -222,15 +222,6 @@ impl<'a> Runner<'a> { .status()? .success() ); - let sup = self.exe.with_extension("sup.elf"); - ensure!( - Command::new("llvm-objcopy") - .arg("--only-keep-debug") - .arg(&orig) - .arg(&sup) - .status()? - .success() - ); } Ok(()) } diff --git a/crates/private/tests/microkit/reset/src/bin/system.xml b/crates/private/tests/microkit/reset/src/bin/system.xml index 82cbb7b00..bf9aa9899 100644 --- a/crates/private/tests/microkit/reset/src/bin/system.xml +++ b/crates/private/tests/microkit/reset/src/bin/system.xml @@ -6,6 +6,6 @@ --> - + diff --git a/hacking/nix/scope/world/instances/microkit/default.nix b/hacking/nix/scope/world/instances/microkit/default.nix index 481587f23..3f4f7b1fb 100644 --- a/hacking/nix/scope/world/instances/microkit/default.nix +++ b/hacking/nix/scope/world/instances/microkit/default.nix @@ -161,10 +161,6 @@ in { origELF = "${orig}/bin/test.elf"; patched = prepareResettable origELF; - - sup = runCommandCC "test.sup.elf" {} '' - $OBJCOPY --only-keep-debug ${origELF} $out - ''; }; in callPlatform { @@ -173,9 +169,6 @@ in { (linkFarm "pd" { "test.elf" = pd.patched; }) - (linkFarm "pd" { - "test.sup.elf" = pd.sup; - }) ]; systemXML = sources.srcRoot + "/crates/private/tests/microkit/reset/src/bin/system.xml"; }; @@ -185,7 +178,6 @@ in { extraDebuggingLinks = [ { name = "test.orig.elf"; path = pd.origELF; } { name = "test.patched.elf"; path = pd.patched; } - { name = "test.sup.elf"; path = pd.sup; } ]; } // { inherit pd; From e567762a44cb215d527c28fb52aa3998918f8047 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 22:09:48 -0700 Subject: [PATCH 19/22] runner: Support -n in Linux case Signed-off-by: Nick Spinale --- .../support/sel4-test-runner/src/main.rs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/crates/private/support/sel4-test-runner/src/main.rs b/crates/private/support/sel4-test-runner/src/main.rs index 297c7dcb9..f7d733c55 100644 --- a/crates/private/support/sel4-test-runner/src/main.rs +++ b/crates/private/support/sel4-test-runner/src/main.rs @@ -177,15 +177,19 @@ impl<'a> Runner<'a> { } fn run_not_sel4(&self) -> anyhow::Result<()> { - ensure!( - Command::new(self.get_qemu_exe()) - .args( - iter::once(self.exe.as_os_str()) - .chain(self.cli.simulate_args.iter().map(AsRef::as_ref)), - ) - .status()? - .success() - ); + if self.cli.no_run { + println!("{}", self.d.display()); + } else { + ensure!( + Command::new(self.get_qemu_exe()) + .args( + iter::once(self.exe.as_os_str()) + .chain(self.cli.simulate_args.iter().map(AsRef::as_ref)), + ) + .status()? + .success() + ); + } Ok(()) } From 44c4b9badff881d8f971e41e2fedc03f1a4a3df1 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 23:09:07 -0700 Subject: [PATCH 20/22] Revert back from sel4-rodata-static Back to ImmutableCell Signed-off-by: Nick Spinale --- Cargo.lock | 3 +- .../microkit/banscii/pds/artist/src/main.rs | 6 +- .../banscii/pds/assistant/src/main.rs | 8 +-- .../banscii/pds/serial-driver/src/main.rs | 4 +- .../pds/virtio-blk-driver/src/main.rs | 6 +- .../pds/virtio-net-driver/src/main.rs | 6 +- crates/sel4-microkit/base/Cargo.nix | 2 +- crates/sel4-microkit/base/Cargo.toml | 2 +- crates/sel4-microkit/base/src/lib.rs | 3 +- crates/sel4-microkit/base/src/symbols.rs | 61 ++++++++++++++----- crates/sel4-reset/Cargo.toml | 1 - 11 files changed, 67 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d22ab2eb0..8dcf012b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2762,7 +2762,7 @@ name = "sel4-microkit-base" version = "0.1.0" dependencies = [ "sel4", - "sel4-rodata-static", + "sel4-immutable-cell", ] [[package]] @@ -2909,7 +2909,6 @@ version = "0.1.0" dependencies = [ "cfg-if", "sel4-panicking-env", - "sel4-rodata-static", "sel4-stack", ] diff --git a/crates/examples/microkit/banscii/pds/artist/src/main.rs b/crates/examples/microkit/banscii/pds/artist/src/main.rs index 16da33996..18879a058 100644 --- a/crates/examples/microkit/banscii/pds/artist/src/main.rs +++ b/crates/examples/microkit/banscii/pds/artist/src/main.rs @@ -31,16 +31,16 @@ use artistic_secrets::Masterpiece; #[protection_domain(heap_size = 0x10000)] fn init() -> HandlerImpl { - let assistant = Channel::new(*var!(assistant_channel_id: usize)); + let assistant = Channel::new(*var!(assistant_channel_id: usize = usize::MAX)); - let region_in_size = *var!(region_in_size: usize); + let region_in_size = *var!(region_in_size: usize = 0); let region_in = unsafe { SharedMemoryRef::new_read_only( memory_region_symbol!(region_in_start: *mut [u8], n = region_in_size), ) }; - let region_out_size = *var!(region_out_size: usize); + let region_out_size = *var!(region_out_size: usize = 0); let region_out = unsafe { SharedMemoryRef::new( memory_region_symbol!(region_out_start: *mut [u8], n = region_out_size), diff --git a/crates/examples/microkit/banscii/pds/assistant/src/main.rs b/crates/examples/microkit/banscii/pds/assistant/src/main.rs index fb09d0d0e..cf7725b97 100644 --- a/crates/examples/microkit/banscii/pds/assistant/src/main.rs +++ b/crates/examples/microkit/banscii/pds/assistant/src/main.rs @@ -36,17 +36,17 @@ const MAX_SUBJECT_LEN: usize = 16; #[protection_domain(heap_size = 0x10000)] fn init() -> impl Handler { - let serial_driver = Channel::new(*var!(serial_driver_channel_id: usize)); - let artist = Channel::new(*var!(artist_channel_id: usize)); + let serial_driver = Channel::new(*var!(serial_driver_channel_id: usize = usize::MAX)); + let artist = Channel::new(*var!(artist_channel_id: usize = usize::MAX)); - let region_in_size = *var!(region_in_size: usize); + let region_in_size = *var!(region_in_size: usize = 0); let region_in = unsafe { SharedMemoryRef::new_read_only( memory_region_symbol!(region_in_start: *mut [u8], n = region_in_size), ) }; - let region_out_size = *var!(region_out_size: usize); + let region_out_size = *var!(region_out_size: usize = 0); let region_out = unsafe { SharedMemoryRef::new( memory_region_symbol!(region_out_start: *mut [u8], n = region_out_size), diff --git a/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs b/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs index 20b8cf6d0..ec70159b1 100644 --- a/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs +++ b/crates/examples/microkit/banscii/pds/serial-driver/src/main.rs @@ -17,7 +17,7 @@ use sel4_pl011_driver::Driver; fn init() -> impl Handler { let driver = unsafe { Driver::new(memory_region_symbol!(serial_register_block: *mut ()).as_ptr()) }; - let device = Channel::new(*var!(serial_irq_id: usize)); - let assistant = Channel::new(*var!(assistant_channel_id: usize)); + let device = Channel::new(*var!(serial_irq_id: usize = usize::MAX)); + let assistant = Channel::new(*var!(assistant_channel_id: usize = usize::MAX)); HandlerImpl::new(driver, device, assistant) } diff --git a/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs b/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs index 6ad5b64df..a303519f9 100644 --- a/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs +++ b/crates/examples/microkit/http-server/pds/virtio-blk-driver/src/main.rs @@ -48,13 +48,13 @@ const QUEUE_SIZE: usize = 4; fn init() -> HandlerImpl { HalImpl::init( config::VIRTIO_BLK_DRIVER_DMA_SIZE, - *var!(virtio_blk_driver_dma_vaddr: usize), - *var!(virtio_blk_driver_dma_paddr: usize), + *var!(virtio_blk_driver_dma_vaddr: usize = 0), + *var!(virtio_blk_driver_dma_paddr: usize = 0), ); let mut dev = { let header = NonNull::new( - (*var!(virtio_blk_mmio_vaddr: usize) + config::VIRTIO_BLK_MMIO_OFFSET) + (*var!(virtio_blk_mmio_vaddr: usize = 0) + config::VIRTIO_BLK_MMIO_OFFSET) as *mut VirtIOHeader, ) .unwrap(); diff --git a/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs b/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs index 4176b677a..a1d01310e 100644 --- a/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs +++ b/crates/examples/microkit/http-server/pds/virtio-net-driver/src/main.rs @@ -37,13 +37,13 @@ const NET_BUFFER_LEN: usize = 2048; fn init() -> HandlerImpl>> { HalImpl::init( config::VIRTIO_NET_DRIVER_DMA_SIZE, - *var!(virtio_net_driver_dma_vaddr: usize), - *var!(virtio_net_driver_dma_paddr: usize), + *var!(virtio_net_driver_dma_vaddr: usize = 0), + *var!(virtio_net_driver_dma_paddr: usize = 0), ); let mut dev = { let header = NonNull::new( - (*var!(virtio_net_mmio_vaddr: usize) + config::VIRTIO_NET_MMIO_OFFSET) + (*var!(virtio_net_mmio_vaddr: usize = 0) + config::VIRTIO_NET_MMIO_OFFSET) as *mut VirtIOHeader, ) .unwrap(); diff --git a/crates/sel4-microkit/base/Cargo.nix b/crates/sel4-microkit/base/Cargo.nix index 734c12694..f2c3e7a58 100644 --- a/crates/sel4-microkit/base/Cargo.nix +++ b/crates/sel4-microkit/base/Cargo.nix @@ -10,7 +10,7 @@ mk { package.name = "sel4-microkit-base"; dependencies = { inherit (localCrates) - sel4-rodata-static + sel4-immutable-cell sel4 ; }; diff --git a/crates/sel4-microkit/base/Cargo.toml b/crates/sel4-microkit/base/Cargo.toml index df8f35c06..6d14fca27 100644 --- a/crates/sel4-microkit/base/Cargo.toml +++ b/crates/sel4-microkit/base/Cargo.toml @@ -22,4 +22,4 @@ extern-symbols = [] [dependencies] sel4 = { path = "../../sel4" } -sel4-rodata-static = { path = "../../sel4-rodata-static" } +sel4-immutable-cell = { path = "../../sel4-immutable-cell" } diff --git a/crates/sel4-microkit/base/src/lib.rs b/crates/sel4-microkit/base/src/lib.rs index 02914478d..200f46a07 100644 --- a/crates/sel4-microkit/base/src/lib.rs +++ b/crates/sel4-microkit/base/src/lib.rs @@ -5,6 +5,7 @@ // #![no_std] +#![feature(used_with_arg)] #[cfg(feature = "alloc")] extern crate alloc; @@ -32,5 +33,5 @@ pub use symbols::{ipc_buffer_ptr, pd_is_passive, pd_name}; // For macros #[doc(hidden)] pub mod _private { - pub use sel4_rodata_static::rodata_static; + pub use sel4_immutable_cell::ImmutableCell; } diff --git a/crates/sel4-microkit/base/src/symbols.rs b/crates/sel4-microkit/base/src/symbols.rs index 841ddcf0d..77d8a96ed 100644 --- a/crates/sel4-microkit/base/src/symbols.rs +++ b/crates/sel4-microkit/base/src/symbols.rs @@ -16,9 +16,12 @@ use core::str::{self, Utf8Error}; /// The following fragment demonstrates its usage: /// /// ```rust -/// let my_var: &'static T = var!(my_var_symbol_name: T) +/// let my_var: &'static T = var!(my_var_symbol_name: T = MY_DEFAULT_VALUE) /// ``` /// +/// where `MY_DEFAULT_VALUE` is the value that the variable will be given at compile-time, before +/// the protection domain image is passed to the `microkit` tool. +/// /// The patching mechanism used by the `microkit` tool requires that the symbol be allocated space /// in the protection domain's ELF file, so we declare the symbol as part of the `.data` section. /// @@ -27,12 +30,39 @@ use core::str::{self, Utf8Error}; /// # Examples /// /// ```rust -/// let foo = bar + *var!(baz: usize); +/// let foo = bar + *var!(baz: usize = 0); +/// ``` +/// +/// # Note +/// +/// The `microkit` tool requires memory region address symbols to be present in protection domain +/// binaries. To prevent Rust from optimizing them out in cases where it is not used, add the +/// unstable `#[used(linker)]` attribute. For example: +/// +/// ```rust +/// #![feature(used_with_arg)] +/// +/// // might be optimized away if not used +/// memory_region_symbol!(foo: usize = 0) +/// +/// // won't be optimized away +/// memory_region_symbol! { +/// #[used(linker)] +/// foo: usize = 0 +/// } /// ``` #[macro_export] macro_rules! var { - ($(#[$attrs:meta])* $symbol:ident: $ty:ty) => {{ - $crate::_private::rodata_static!($symbol: $ty) + ($(#[$attrs:meta])* $symbol:ident: $ty:ty = $default:expr) => {{ + use $crate::_private::ImmutableCell; + + #[allow(non_upper_case_globals)] + $(#[$attrs])* + #[unsafe(no_mangle)] + #[unsafe(link_section = ".data")] + static $symbol: ImmutableCell<$ty> = ImmutableCell::new($default); + + $symbol.get() }} } @@ -98,7 +128,7 @@ macro_rules! memory_region_symbol { }}; ($(#[$attrs:meta])* $symbol:ident: *mut $ty:ty $(,)?) => {{ core::ptr::NonNull::new( - *$crate::var!($(#[$attrs])* $symbol: usize) as *mut $ty + *$crate::var!($(#[$attrs])* $symbol: usize = 0) as *mut $ty ).unwrap_or_else(|| { panic!("{} is null", stringify!($symbol)) }) @@ -107,14 +137,17 @@ macro_rules! memory_region_symbol { #[cfg(not(feature = "extern-symbols"))] macro_rules! maybe_extern_var { - ($symbol:ident: $ty:ty) => {{ - var!($symbol: $ty) + ($symbol:ident: $ty:ty = $default:expr) => {{ + var! { + #[used(linker)] + $symbol: $ty = $default + } }}; } #[cfg(feature = "extern-symbols")] macro_rules! maybe_extern_var { - ($symbol:ident: $ty:ty) => {{ + ($symbol:ident: $ty:ty = $default:expr) => {{ unsafe extern "C" { static $symbol: $ty; } @@ -125,31 +158,31 @@ macro_rules! maybe_extern_var { /// Returns whether this protection domain is a passive server. pub fn pd_is_passive() -> bool { - *maybe_extern_var!(microkit_passive: bool) + *maybe_extern_var!(microkit_passive: bool = false) } pub(crate) fn pd_irqs() -> usize { - *maybe_extern_var!(microkit_irqs: usize) + *maybe_extern_var!(microkit_irqs: usize = 0) } pub(crate) fn pd_notifications() -> usize { - *maybe_extern_var!(microkit_notifications: usize) + *maybe_extern_var!(microkit_notifications: usize = 0) } pub(crate) fn pd_pps() -> usize { - *maybe_extern_var!(microkit_pps: usize) + *maybe_extern_var!(microkit_pps: usize = 0) } #[allow(dead_code)] pub(crate) fn pd_ioports() -> usize { - *maybe_extern_var!(microkit_ioports: usize) + *maybe_extern_var!(microkit_ioports: usize = 0) } const PD_NAME_LENGTH: usize = 64; /// Returns the name of this protection domain without converting to unicode. pub fn pd_name_bytes() -> &'static [u8] { - let all_bytes = maybe_extern_var!(microkit_name: [u8; PD_NAME_LENGTH]); + let all_bytes = maybe_extern_var!(microkit_name: [u8; PD_NAME_LENGTH] = [0; PD_NAME_LENGTH]); let n = all_bytes.iter().take_while(|b| **b != 0).count(); &all_bytes[..n] } diff --git a/crates/sel4-reset/Cargo.toml b/crates/sel4-reset/Cargo.toml index 40db083fd..9e8945a41 100644 --- a/crates/sel4-reset/Cargo.toml +++ b/crates/sel4-reset/Cargo.toml @@ -19,5 +19,4 @@ license = "BSD-2-Clause" [dependencies] cfg-if = "1.0.4" sel4-panicking-env = { path = "../sel4-panicking/env" } -sel4-rodata-static = { path = "../sel4-rodata-static" } sel4-stack = { path = "../sel4-stack" } From 1c42cb18f8958b30b83914d233ca258b9687d743 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 23:17:58 -0700 Subject: [PATCH 21/22] sel4-elf-header: Use __ehdr_start Signed-off-by: Nick Spinale --- .../root-task/spawn-thread/src/main.rs | 15 ++++---- crates/sel4-elf-header/src/lib.rs | 35 +++++++++++++++++++ 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/crates/examples/root-task/spawn-thread/src/main.rs b/crates/examples/root-task/spawn-thread/src/main.rs index 42c9b83fa..2e846c9f3 100644 --- a/crates/examples/root-task/spawn-thread/src/main.rs +++ b/crates/examples/root-task/spawn-thread/src/main.rs @@ -19,7 +19,7 @@ use core::ptr; use cfg_if::cfg_if; -use sel4_elf_header::{ElfHeader, PT_TLS}; +use sel4_elf_header::{PT_TLS, locate_phdrs}; use sel4_initialize_tls::{TlsImage, UncheckedTlsImage}; use sel4_root_task::{ Never, abort, panicking::catch_unwind, root_task, set_global_allocator_mutex_notification, @@ -215,14 +215,11 @@ impl SecondaryThreadFn { // // // fn get_tls_image() -> TlsImage { - unsafe extern "C" { - static __ehdr_start: ElfHeader; - } - let phdrs = unsafe { - assert!(__ehdr_start.is_magic_valid()); - __ehdr_start.locate_phdrs() - }; - let phdr = phdrs.iter().find(|phdr| phdr.p_type == PT_TLS).unwrap(); + let phdr = locate_phdrs() + .iter() + .find(|phdr| phdr.p_type == PT_TLS) + .unwrap_or_else(|| abort!("missing PT_TLS program header")); + .unwrap(); let unchecked = UncheckedTlsImage { vaddr: phdr.p_vaddr, filesz: phdr.p_filesz, diff --git a/crates/sel4-elf-header/src/lib.rs b/crates/sel4-elf-header/src/lib.rs index c1e466511..8bab55890 100644 --- a/crates/sel4-elf-header/src/lib.rs +++ b/crates/sel4-elf-header/src/lib.rs @@ -6,6 +6,8 @@ #![no_std] +use core::error::Error; +use core::fmt; use core::ops::Range; use core::ptr; use core::slice; @@ -48,6 +50,16 @@ impl ElfHeader { self.e_ident.magic == ELFMAG } + pub fn check_magic(&self) -> Result<(), InvalidMagic> { + if self.is_magic_valid() { + Ok(()) + } else { + Err(InvalidMagic { + ehdr_addr: self as *const _ as usize, + }) + } + } + pub fn locate_phdrs(&'static self) -> &'static [ProgramHeader] { unsafe { let ptr = ptr::from_ref(self) @@ -59,6 +71,29 @@ impl ElfHeader { } } +pub fn locate_phdrs() -> Result<&'static [ProgramHeader], InvalidMagic> { + unsafe extern "C" { + static __ehdr_start: ElfHeader; + } + unsafe { + __ehdr_start.check_magic()?; + } + Ok(unsafe { __ehdr_start.locate_phdrs() }) +} + +#[derive(Debug, Copy, Clone)] +pub struct InvalidMagic { + ehdr_addr: usize, +} + +impl fmt::Display for InvalidMagic { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "invalid magic for ELF header at 0x{:x}", self.ehdr_addr) + } +} + +impl Error for InvalidMagic {} + #[repr(C)] #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct ProgramHeader { From 745f20bbe705eaf41823c501b354561f06073341 Mon Sep 17 00:00:00 2001 From: Nick Spinale Date: Thu, 16 Apr 2026 22:48:39 -0700 Subject: [PATCH 22/22] Switch to phdr placeholders approach to reset Signed-off-by: Nick Spinale --- Cargo.lock | 1 + .../root-task/spawn-thread/src/main.rs | 2 +- crates/sel4-elf-header/src/lib.rs | 25 + crates/sel4-reset/Cargo.nix | 2 +- crates/sel4-reset/Cargo.toml | 1 + crates/sel4-reset/cli/src/main.rs | 503 ++++-------------- crates/sel4-reset/cli/src/patch.rs | 250 +++++++++ crates/sel4-reset/src/lib.rs | 28 +- crates/sel4-runtime-common/src/lib.rs | 20 - crates/sel4-runtime-common/src/tls.rs | 4 +- crates/sel4-runtime-common/src/unwinding.rs | 6 +- 11 files changed, 404 insertions(+), 438 deletions(-) create mode 100644 crates/sel4-reset/cli/src/patch.rs diff --git a/Cargo.lock b/Cargo.lock index 8dcf012b2..1001ef9fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2908,6 +2908,7 @@ name = "sel4-reset" version = "0.1.0" dependencies = [ "cfg-if", + "sel4-elf-header", "sel4-panicking-env", "sel4-stack", ] diff --git a/crates/examples/root-task/spawn-thread/src/main.rs b/crates/examples/root-task/spawn-thread/src/main.rs index 2e846c9f3..d591428f3 100644 --- a/crates/examples/root-task/spawn-thread/src/main.rs +++ b/crates/examples/root-task/spawn-thread/src/main.rs @@ -216,10 +216,10 @@ impl SecondaryThreadFn { fn get_tls_image() -> TlsImage { let phdr = locate_phdrs() + .unwrap_or_else(|err| abort!("{err}")) .iter() .find(|phdr| phdr.p_type == PT_TLS) .unwrap_or_else(|| abort!("missing PT_TLS program header")); - .unwrap(); let unchecked = UncheckedTlsImage { vaddr: phdr.p_vaddr, filesz: phdr.p_filesz, diff --git a/crates/sel4-elf-header/src/lib.rs b/crates/sel4-elf-header/src/lib.rs index 8bab55890..14a1a0848 100644 --- a/crates/sel4-elf-header/src/lib.rs +++ b/crates/sel4-elf-header/src/lib.rs @@ -115,6 +115,9 @@ pub const PT_LOAD: u32 = 1; pub const PT_TLS: u32 = 7; pub const PT_GNU_EH_FRAME: u32 = 0x6474_e550; +// seL4-specific +pub const PT_SEL4_RESET_REGIONS: u32 = 0x64c3_4001; + impl ProgramHeader { pub fn vaddr_range(&self) -> Range { let start = self.p_vaddr; @@ -122,3 +125,25 @@ impl ProgramHeader { start..end } } + +#[macro_export] +macro_rules! add_placeholder_phdrs { + ($label:ident) => { + const _: () = { + #[unsafe(link_section = $crate::_private::concat!(".note.sel4.placeholder.", $crate::_private::stringify!($label), ".1"))] + static _1: [u32; 0] = []; + + #[unsafe(link_section = $crate::_private::concat!(".note.sel4.placeholder.", $crate::_private::stringify!($label), ".2"))] + static _2: [u64; 0] = []; + + #[unsafe(link_section = $crate::_private::concat!(".note.sel4.placeholder.", $crate::_private::stringify!($label), ".3"))] + static _3: [u32; 0] = []; + + }; + }; +} + +#[doc(hidden)] +pub mod _private { + pub use core::{concat, stringify}; +} diff --git a/crates/sel4-reset/Cargo.nix b/crates/sel4-reset/Cargo.nix index e38d8ce4a..ae2d43229 100644 --- a/crates/sel4-reset/Cargo.nix +++ b/crates/sel4-reset/Cargo.nix @@ -10,6 +10,6 @@ mk { package.name = "sel4-reset"; dependencies = { inherit (versions) cfg-if; - inherit (localCrates) sel4-stack sel4-rodata-static sel4-panicking-env; + inherit (localCrates) sel4-stack sel4-panicking-env sel4-elf-header; }; } diff --git a/crates/sel4-reset/Cargo.toml b/crates/sel4-reset/Cargo.toml index 9e8945a41..595ad9d9e 100644 --- a/crates/sel4-reset/Cargo.toml +++ b/crates/sel4-reset/Cargo.toml @@ -18,5 +18,6 @@ license = "BSD-2-Clause" [dependencies] cfg-if = "1.0.4" +sel4-elf-header = { path = "../sel4-elf-header" } sel4-panicking-env = { path = "../sel4-panicking/env" } sel4-stack = { path = "../sel4-stack" } diff --git a/crates/sel4-reset/cli/src/main.rs b/crates/sel4-reset/cli/src/main.rs index e6a95f1a8..1dec1d32a 100644 --- a/crates/sel4-reset/cli/src/main.rs +++ b/crates/sel4-reset/cli/src/main.rs @@ -4,20 +4,23 @@ // SPDX-License-Identifier: BSD-2-Clause // -use std::ops::Range; +use std::fs; use std::path::PathBuf; -use std::{any, fs}; - -use clap::Parser; use anyhow::Error; -use num::{NumCast, ToPrimitive}; -use object::elf::{FileHeader32, FileHeader64, PF_R, PT_PHDR, ProgramHeader32, ProgramHeader64}; -use object::elf::{PF_W, PT_LOAD}; +use clap::Parser; +use num::NumCast; +use object::elf::{PF_R, PF_W, PT_LOAD}; use object::read::elf::{ElfFile, FileHeader, ProgramHeader}; -use object::{Endian, File, Object, ObjectSection, ObjectSegment, ObjectSymbol, U32, U64, pod}; +use object::{File, Object, ObjectSection, Pod, pod}; use rangemap::RangeSet; +mod patch; + +use patch::{GenericProgramHeader, Patching, ProgramHeaderExt}; + +pub const PT_SEL4_RESET_REGIONS: u32 = 0x64c3_4001; + // HACK const PAGE_SIZE: u64 = 4096; @@ -52,34 +55,11 @@ fn main() -> Result<(), Error> { fn continue_with_type<'a, T>(orig_elf: &'a ElfFile<'a, T>) -> Result, Error> where - T: FileHeader + PatchPhoff, + T: FileHeader, { - let mut x = X::new(orig_elf); - x.add_regions(); - let data = x.finalize(); - Ok(data) -} - -struct X<'a, T: FileHeader> { - orig_elf: &'a ElfFile<'a, T>, - phdrs: Vec, - data: Vec, -} - -pub trait PatchValue { - fn to_bytes(&self, endian: impl Endian) -> Vec; -} - -impl PatchValue for u32 { - fn to_bytes(&self, endian: impl Endian) -> Vec { - endian.write_u32_bytes(*self).to_vec() - } -} - -impl PatchValue for u64 { - fn to_bytes(&self, endian: impl Endian) -> Vec { - endian.write_u64_bytes(*self).to_vec() - } + let mut patching = Patching::new(orig_elf); + add_regions(&mut patching)?; + Ok(patching.finalize()) } struct RegionMeta { @@ -89,389 +69,100 @@ struct RegionMeta { src_size: T::Word, } -impl> RegionMeta { - fn pack(&self, endian: impl Endian, buf: &mut Vec) { - buf.extend_from_slice(&self.dst_vaddr.to_bytes(endian)); - buf.extend_from_slice(&self.dst_size.to_bytes(endian)); - buf.extend_from_slice(&self.src_vaddr.to_bytes(endian)); - buf.extend_from_slice(&self.src_size.to_bytes(endian)); +impl> RegionMeta { + fn pack(&self, buf: &mut Vec) { + buf.extend_from_slice(pod::bytes_of(&self.dst_vaddr)); + buf.extend_from_slice(pod::bytes_of(&self.dst_size)); + buf.extend_from_slice(pod::bytes_of(&self.src_vaddr)); + buf.extend_from_slice(pod::bytes_of(&self.src_size)); } -} -impl<'a, T: FileHeader + PatchPhoff> X<'a, T> { - fn new(orig_elf: &'a ElfFile<'a, T>) -> Self { - Self { - orig_elf, - phdrs: orig_elf.elf_program_headers().to_vec(), - data: orig_elf.data().to_vec(), + fn pack_to_vec(regions: &[RegionMeta]) -> Vec { + let mut buf = vec![]; + for meta in regions.iter() { + meta.pack(&mut buf); } + buf } +} - fn endian(&self) -> T::Endian { - self.orig_elf.endian() - } - - fn footprint(&self) -> Option> { - let start = self - .phdrs - .iter() - .map(|phdr| phdr.p_vaddr(self.endian()).into()) - .min()?; - let end = self - .phdrs - .iter() - .map(|phdr| phdr.p_vaddr(self.endian()).into() + phdr.p_memsz(self.endian()).into()) - .max()?; - Some(start..end) - } - - fn next_aligned_vaddr(&self, align: u64) -> u64 { - self.footprint() - .map(|footprint| footprint.end) - .unwrap_or(0) - .next_multiple_of(align.max(1)) - } - - fn align_data_cursor(&mut self, align: u64) { - self.data.resize( - self.data.len().next_multiple_of(align.try_into().unwrap()), - 0, - ); - } - - #[allow(dead_code)] - fn segment_data(&mut self, phdr: &T::ProgramHeader) -> &mut [u8] { - let endian = self.endian(); - let offset = phdr.p_offset(endian).to_usize().unwrap(); - let filesz = phdr.p_filesz(endian).to_usize().unwrap(); - &mut self.data[offset..][..filesz] - } - - fn add_segment( - &mut self, - p_type: u32, - p_flags: u32, - p_memsz: u64, - p_align: u64, - data_align: u64, - data: &[u8], - ) -> T::ProgramHeader { - assert!(data_align <= p_align); - self.align_data_cursor(data_align); - let p_offset = self.data.len().try_into().unwrap(); - let p_filesz = data.len().try_into().unwrap(); - self.data.extend_from_slice(data); - self.add_segment_raw(GenericProgramHeader { - p_type, - p_flags, - p_offset, - p_vaddr: 0, - p_paddr: 0, - p_filesz, - p_memsz, - p_align, - }) - } - - fn add_segment_raw(&mut self, mut phdr: GenericProgramHeader) -> T::ProgramHeader { - let p_vaddr = self.next_aligned_vaddr(phdr.p_align) + phdr.p_offset % phdr.p_align.max(1); - phdr.p_vaddr = p_vaddr; - phdr.p_paddr = p_vaddr; - let phdr = T::convert_phdr(self.endian(), &phdr); - self.phdrs.push(phdr); - phdr - } - - fn patch_word(&mut self, symbol_name: &str, value: T::Word) { - let value_bytes = value.to_bytes(self.endian()); - let symbol = self.orig_elf.symbol_by_name(symbol_name).unwrap(); - let symbol_vaddr = symbol.address(); - assert_eq!(usize::try_from(symbol.size()).unwrap(), value_bytes.len()); - let offset_in_file = self - .orig_elf - .segments() - .find_map(|segment| { - let seg_mem_start = segment.address(); - let seg_mem_end = seg_mem_start + segment.size(); - if (seg_mem_start..seg_mem_end).contains(&symbol_vaddr) { - let offset_in_seg = symbol_vaddr - seg_mem_start; - let (seg_file_start, seg_file_size) = segment.file_range(); - assert!( - offset_in_seg + u64::try_from(value_bytes.len()).unwrap() <= seg_file_size - ); - Some(seg_file_start + offset_in_seg) - } else { - None - } - }) - .unwrap(); - self.data[usize::try_from(offset_in_file).unwrap()..][..value_bytes.len()] - .copy_from_slice(&value_bytes); - } - - pub fn patch_word_with_cast(&mut self, symbol_name: &str, value: impl ToPrimitive + Clone) - where - T::Word: PatchValue + NumCast, - { - self.patch_word( - symbol_name, - ::from(value.clone()).unwrap_or_else(|| { - panic!( - "value {:#x?} out of bounds for word type {}", - value.to_u64().unwrap(), - any::type_name::() - ) - }), - ) - } - - fn add_all_phdrs(&mut self) -> T::ProgramHeader { - let endian = self.endian(); - let phdrs_load_phdr = { - let data_align = align_of::().try_into().unwrap(); - let eventual_n = self.phdrs.len() + 1; - let data_size = size_of::() + eventual_n * size_of::(); - self.add_segment( - PT_LOAD, - PF_R, - data_size.try_into().unwrap(), - PAGE_SIZE, - data_align, - &vec![0; data_size], - ) - }; - let mut phdrs_phdr_phdr = phdrs_load_phdr; - T::set_p_type(&mut phdrs_phdr_phdr, endian, PT_PHDR); - T::take_offset( - &mut phdrs_phdr_phdr, - endian, - ::from(size_of::()).unwrap(), - ); - for phdr in self.phdrs.iter_mut() { - if phdr.p_type(endian) == PT_PHDR { - *phdr = phdrs_phdr_phdr; - } - } +fn get_all_persistent_ranges<'a, T>(elf: &'a ElfFile<'a, T>) -> RangeSet +where + T: FileHeader, +{ + let mut set = RangeSet::new(); + for s in elf.sections() { + if let Ok(name) = s.name() + && (name == ".persistent" || name.starts_with(".persistent.")) { - let offset = phdrs_load_phdr.p_offset(endian).to_usize().unwrap(); - let filesz = phdrs_load_phdr.p_filesz(endian).to_usize().unwrap(); - let seg_data = &mut self.data[offset..][..filesz]; - let (ehdr_data, phdrs_data) = seg_data.split_at_mut(size_of::()); - let mut new_ehdr = *self.orig_elf.elf_header(); - new_ehdr.patch_fake_header(self.phdrs.len()); - ehdr_data.copy_from_slice(pod::bytes_of(&new_ehdr)); - phdrs_data.copy_from_slice(pod::bytes_of_slice(&self.phdrs)); + set.insert(s.address()..(s.address() + s.size())); } - self.patch_word_with_cast("HACK__ehdr_start", phdrs_load_phdr.p_vaddr(endian)); - phdrs_phdr_phdr } + set +} - fn add_regions(&mut self) { - let endian = self.endian(); - - let persistent_ranges = { - let mut set = RangeSet::new(); - for s in self.orig_elf.sections() { - if let Ok(name) = s.name() - && (name == ".persistent" || name.starts_with(".persistent.")) - { - set.insert(s.address()..(s.address() + s.size())); - } - } - set - }; - - let mut regions: Vec> = vec![]; - for seg in self.orig_elf.segments() { - let phdr = seg.elf_program_header(); - if phdr.p_type(endian) == PT_LOAD && phdr.p_flags(endian) & PF_W != 0 { - let p_align = phdr.p_align(endian).into(); - let p_filesz = phdr.p_filesz(endian).into(); - let alt_phdr = self.add_segment_raw(GenericProgramHeader { - p_type: PT_LOAD, - p_flags: PF_R, - p_offset: phdr.p_offset(endian).into(), - p_vaddr: 0, - p_paddr: 0, - p_filesz, - p_memsz: p_filesz, - p_align, +fn add_regions<'a, T: FileHeader>( + this: &mut Patching<'a, T>, +) -> Result<(), Error> { + let endian = this.endian(); + + let mut regions: Vec> = vec![]; + for seg in this.orig_elf().segments() { + let phdr = seg.elf_program_header(); + if phdr.p_type(endian) == PT_LOAD && phdr.p_flags(endian) & PF_W != 0 { + let p_offset = phdr.p_offset(endian).into(); + let p_vaddr = phdr.p_vaddr(endian).into(); + let p_memsz = phdr.p_memsz(endian).into(); + let p_filesz = phdr.p_filesz(endian).into(); + let p_align = phdr.p_align(endian).into(); + let ro_phdr = this.add_segment_raw(GenericProgramHeader { + p_type: PT_LOAD, + p_flags: PF_R, + p_offset, + p_vaddr: 0, + p_paddr: 0, + p_filesz, + p_memsz: p_filesz, + p_align, + })?; + let ro_p_vaddr = ro_phdr.p_vaddr(endian).into(); + let ro_p_filesz = ro_phdr.p_filesz(endian).into(); + for ephermal_region in + get_all_persistent_ranges(this.orig_elf()).gaps(&(p_vaddr..(p_vaddr + p_memsz))) + { + let ephermal_region_size = ephermal_region.end - ephermal_region.start; + let ephermal_region_offset_in_segment = ephermal_region.start - p_vaddr; + let (src_vaddr, src_size) = if ephermal_region_offset_in_segment < ro_p_filesz { + ( + ro_p_vaddr + ephermal_region_offset_in_segment, + (ro_p_filesz - ephermal_region_offset_in_segment).min(ephermal_region_size), + ) + } else { + (0, 0) + }; + regions.push(RegionMeta { + dst_vaddr: ::from(ephermal_region.start).unwrap(), + dst_size: ::from(ephermal_region_size).unwrap(), + src_vaddr: ::from(src_vaddr).unwrap(), + src_size: ::from(src_size).unwrap(), }); - { - let vaddr = phdr.p_vaddr(endian).into(); - let memsz = phdr.p_memsz(endian).into(); - let segment_range = vaddr..(vaddr + memsz); - let relevant_persistent_ranges = RangeSet::from_iter( - persistent_ranges - .intersection(&RangeSet::from_iter([segment_range.clone()])), - ); - for ephermal in relevant_persistent_ranges.gaps(&segment_range) { - let region_memsz = ephermal.end - ephermal.start; - let region_offset_in_segment = ephermal.start - vaddr; - let (src_vaddr, src_size) = if region_offset_in_segment - < alt_phdr.p_filesz(endian).into() - { - let start = alt_phdr.p_vaddr(endian).into() + region_offset_in_segment; - ( - start, - alt_phdr.p_filesz(endian).into().min(ephermal.end - vaddr), - ) - } else { - (0, 0) - }; - regions.push(RegionMeta { - dst_vaddr: ::from(ephermal.start).unwrap(), - dst_size: ::from(region_memsz).unwrap(), - src_vaddr: ::from(src_vaddr).unwrap(), - src_size: ::from(src_size).unwrap(), - }); - } - } } } - let regions_meta_data = { - let mut v = vec![]; - for m in regions.iter() { - m.pack(endian, &mut v); - } - v - }; - let regions_meta_phdr = self.add_segment( - PT_LOAD, - PF_R, - regions_meta_data.len().try_into().unwrap(), - PAGE_SIZE, - align_of::>().try_into().unwrap(), - ®ions_meta_data, - ); - self.patch_word_with_cast( - "sel4_reset_regions_meta_vaddr", - regions_meta_phdr.p_vaddr(endian), - ); - self.patch_word_with_cast("sel4_reset_regions_meta_count", regions.len()); - } - - fn finalize(mut self) -> Vec { - let endian = self.endian(); - let all_phdrs_phdr = self.add_all_phdrs(); - let (ehdr, _) = pod::from_bytes_mut::(&mut self.data).unwrap(); - ehdr.patch_header(all_phdrs_phdr.p_offset(endian), self.phdrs.len()); - self.data - } -} - -#[derive(Debug, Copy, Clone, Default)] -pub struct GenericProgramHeader { - pub p_type: u32, - pub p_flags: u32, - pub p_offset: u64, - pub p_vaddr: u64, - pub p_paddr: u64, - pub p_filesz: u64, - pub p_memsz: u64, - pub p_align: u64, -} - -trait PatchPhoff: FileHeader { - fn patch_header(&mut self, e_phoff: Self::Word, e_phnum: usize); - fn patch_fake_header(&mut self, e_phnum: usize); - fn convert_phdr(endian: Self::Endian, generic: &GenericProgramHeader) -> Self::ProgramHeader; - fn set_p_type(phdr: &mut Self::ProgramHeader, endian: Self::Endian, p_type: u32); - fn take_offset(phdr: &mut Self::ProgramHeader, endian: Self::Endian, n: Self::Word); -} - -impl PatchPhoff for FileHeader32 { - fn patch_header(&mut self, e_phoff: Self::Word, e_phnum: usize) { - self.e_phoff.set(self.endian().unwrap(), e_phoff); - self.e_phnum - .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); - self.e_phnum.set( - self.endian().unwrap(), - (e_phnum * size_of::()) - .try_into() - .unwrap(), - ); - } - - fn patch_fake_header(&mut self, e_phnum: usize) { - self.e_phnum - .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); - self.e_phnum.set( - self.endian().unwrap(), - (e_phnum * size_of::()) - .try_into() - .unwrap(), - ); - } - - fn convert_phdr(endian: Self::Endian, generic: &GenericProgramHeader) -> Self::ProgramHeader { - ProgramHeader32 { - p_type: U32::new(endian, generic.p_type), - p_offset: U32::new(endian, generic.p_offset.try_into().unwrap()), - p_vaddr: U32::new(endian, generic.p_vaddr.try_into().unwrap()), - p_paddr: U32::new(endian, generic.p_paddr.try_into().unwrap()), - p_filesz: U32::new(endian, generic.p_filesz.try_into().unwrap()), - p_memsz: U32::new(endian, generic.p_memsz.try_into().unwrap()), - p_flags: U32::new(endian, generic.p_flags), - p_align: U32::new(endian, generic.p_align.try_into().unwrap()), - } - } - - fn set_p_type(phdr: &mut Self::ProgramHeader, endian: Self::Endian, p_type: u32) { - phdr.p_type.set(endian, p_type) - } - - fn take_offset(phdr: &mut Self::ProgramHeader, endian: Self::Endian, n: Self::Word) { - phdr.p_offset.set(endian, phdr.p_offset.get(endian) + n); - phdr.p_vaddr.set(endian, phdr.p_vaddr.get(endian) + n); - phdr.p_paddr.set(endian, phdr.p_paddr.get(endian) + n); - phdr.p_filesz - .set(endian, phdr.p_filesz.get(endian).saturating_sub(n)); - phdr.p_memsz.set(endian, phdr.p_memsz.get(endian) - n); - } -} - -impl PatchPhoff for FileHeader64 { - fn patch_header(&mut self, e_phoff: Self::Word, e_phnum: usize) { - self.e_phoff.set(self.endian().unwrap(), e_phoff); - self.e_phnum - .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); } - fn patch_fake_header(&mut self, e_phnum: usize) { - self.e_phnum - .set(self.endian().unwrap(), e_phnum.try_into().unwrap()); - self.e_phnum.set( - self.endian().unwrap(), - (e_phnum * size_of::()) - .try_into() - .unwrap(), - ); - } - - fn convert_phdr(endian: Self::Endian, generic: &GenericProgramHeader) -> Self::ProgramHeader { - ProgramHeader64 { - p_type: U32::new(endian, generic.p_type), - p_flags: U32::new(endian, generic.p_flags), - p_offset: U64::new(endian, generic.p_offset), - p_vaddr: U64::new(endian, generic.p_vaddr), - p_paddr: U64::new(endian, generic.p_paddr), - p_filesz: U64::new(endian, generic.p_filesz), - p_memsz: U64::new(endian, generic.p_memsz), - p_align: U64::new(endian, generic.p_align), - } - } - - fn set_p_type(phdr: &mut Self::ProgramHeader, endian: Self::Endian, p_type: u32) { - phdr.p_type.set(endian, p_type) - } - - fn take_offset(phdr: &mut Self::ProgramHeader, endian: Self::Endian, n: Self::Word) { - phdr.p_offset.set(endian, phdr.p_offset.get(endian) + n); - phdr.p_vaddr.set(endian, phdr.p_vaddr.get(endian) + n); - phdr.p_paddr.set(endian, phdr.p_paddr.get(endian) + n); - phdr.p_filesz - .set(endian, phdr.p_filesz.get(endian).saturating_sub(n)); - phdr.p_memsz.set(endian, phdr.p_memsz.get(endian) - n); - } + let regions_meta_data = RegionMeta::pack_to_vec(®ions); + let mut regions_meta_info_phdr = *this.add_segment( + GenericProgramHeader { + p_type: PT_LOAD, + p_flags: PF_R, + p_memsz: regions_meta_data.len().try_into().unwrap(), + p_align: PAGE_SIZE, + ..Default::default() + }, + align_of::>().try_into().unwrap(), + ®ions_meta_data, + )?; + regions_meta_info_phdr.set_p_type(endian, PT_SEL4_RESET_REGIONS); + this.add_phdr(regions_meta_info_phdr)?; + Ok(()) } diff --git a/crates/sel4-reset/cli/src/patch.rs b/crates/sel4-reset/cli/src/patch.rs new file mode 100644 index 000000000..5c1520bd9 --- /dev/null +++ b/crates/sel4-reset/cli/src/patch.rs @@ -0,0 +1,250 @@ +// +// Copyright 2026, Colias Group, LLC +// +// SPDX-License-Identifier: BSD-2-Clause +// + +use std::ops::Range; + +use anyhow::{Error, bail}; +use object::elf::{PT_NOTE, PT_NULL, ProgramHeader32, ProgramHeader64}; +use object::read::elf::{ElfFile, FileHeader, ProgramHeader}; +use object::{Endian, Pod, U32, U64, pod}; + +pub struct Patching<'a, T: FileHeader> { + orig_elf: &'a ElfFile<'a, T>, + data: Vec, +} + +impl<'a, T: FileHeader> Patching<'a, T> { + pub fn new(orig_elf: &'a ElfFile<'a, T>) -> Self { + let mut this = Self { + orig_elf, + data: orig_elf.data().to_vec(), + }; + this.clear_placeholder_phdrs(); + this + } + + pub fn orig_elf(&self) -> &'a ElfFile<'a, T> { + self.orig_elf + } + + pub fn endian(&self) -> T::Endian { + self.orig_elf().endian() + } + + fn phdrs_range(&self) -> Range { + let ehdr = self.orig_elf().elf_header(); + let phoff: usize = ehdr.e_phoff(self.endian()).into().try_into().unwrap(); + let phnum: usize = ehdr.e_phnum(self.endian()).into(); + let phentsize: usize = ehdr.e_phentsize(self.endian()).into(); + phoff..(phoff + phnum * phentsize) + } + + fn phdrs(&self) -> &[T::ProgramHeader] { + let range = self.phdrs_range(); + pod::slice_from_all_bytes(&self.data[range]).unwrap() + } + + fn phdrs_mut(&mut self) -> &mut [T::ProgramHeader] { + let range = self.phdrs_range(); + pod::slice_from_all_bytes_mut(&mut self.data[range]).unwrap() + } + + fn clear_placeholder_phdrs(&mut self) { + let endian = self.endian(); + for phdr_slot in self.phdrs_mut().iter_mut() { + if phdr_slot.p_type(endian) == PT_NOTE && phdr_slot.p_filesz(endian).into() == 0 { + pod::bytes_of_mut(phdr_slot).fill(0); + phdr_slot.set_p_type(endian, PT_NULL); + } + } + } + + pub fn add_phdr(&mut self, phdr: T::ProgramHeader) -> Result<&mut T::ProgramHeader, Error> { + let endian = self.endian(); + for phdr_slot in self.phdrs_mut().iter_mut() { + if phdr_slot.p_type(endian) == PT_NULL { + *phdr_slot = phdr; + return Ok(phdr_slot); + } + } + bail!("no placeholder phdrs") + } + + fn footprint(&self) -> Option> { + let start = self + .phdrs() + .iter() + .map(|phdr| phdr.p_vaddr(self.endian()).into()) + .min()?; + let end = self + .phdrs() + .iter() + .map(|phdr| phdr.p_vaddr(self.endian()).into() + phdr.p_memsz(self.endian()).into()) + .max()?; + Some(start..end) + } + + pub fn next_aligned_vaddr(&self, align: u64) -> u64 { + self.footprint() + .map(|footprint| footprint.end) + .unwrap_or(0) + .next_multiple_of(align.max(1)) + } + + pub fn align_data_cursor(&mut self, align: u64) { + self.data.resize( + self.data.len().next_multiple_of(align.try_into().unwrap()), + 0, + ); + } + + pub fn add_segment( + &mut self, + mut phdr: GenericProgramHeader, + data_align: u64, + data: &[u8], + ) -> Result<&T::ProgramHeader, Error> { + assert!(data_align <= phdr.p_align); + self.align_data_cursor(data_align); + phdr.p_offset = self.data.len().try_into().unwrap(); + phdr.p_filesz = data.len().try_into().unwrap(); + self.data.extend_from_slice(data); + self.add_segment_raw(phdr) + } + + pub fn add_segment_raw( + &mut self, + mut phdr: GenericProgramHeader, + ) -> Result<&T::ProgramHeader, Error> { + let p_vaddr = self.next_aligned_vaddr(phdr.p_align) + phdr.p_offset % phdr.p_align.max(1); + phdr.p_vaddr = p_vaddr; + phdr.p_paddr = p_vaddr; + Ok(&*self.add_phdr(T::ProgramHeader::from_generic(self.endian(), &phdr))?) + } + + pub fn finalize(self) -> Vec { + self.data + } +} + +#[derive(Debug, Copy, Clone, Default)] +pub struct GenericProgramHeader { + pub p_type: u32, + pub p_flags: u32, + pub p_offset: u64, + pub p_vaddr: u64, + pub p_paddr: u64, + pub p_filesz: u64, + pub p_memsz: u64, + pub p_align: u64, +} + +#[allow(dead_code)] +pub trait ProgramHeaderExt: ProgramHeader { + fn from_generic(endian: Self::Endian, generic: &GenericProgramHeader) -> Self; + fn set_p_type(&mut self, endian: Self::Endian, p_type: u32); + fn set_p_flags(&mut self, endian: Self::Endian, p_flags: u32); + fn set_p_offset(&mut self, endian: Self::Endian, p_offset: Self::Word); + fn set_p_vaddr(&mut self, endian: Self::Endian, p_vaddr: Self::Word); + fn set_p_paddr(&mut self, endian: Self::Endian, p_paddr: Self::Word); + fn set_p_filesz(&mut self, endian: Self::Endian, p_filesz: Self::Word); + fn set_p_memsz(&mut self, endian: Self::Endian, p_memsz: Self::Word); + fn set_p_align(&mut self, endian: Self::Endian, p_align: Self::Word); +} + +impl ProgramHeaderExt for ProgramHeader32 { + fn from_generic(endian: Self::Endian, generic: &GenericProgramHeader) -> Self { + ProgramHeader32 { + p_type: U32::new(endian, generic.p_type), + p_offset: U32::new(endian, generic.p_offset.try_into().unwrap()), + p_vaddr: U32::new(endian, generic.p_vaddr.try_into().unwrap()), + p_paddr: U32::new(endian, generic.p_paddr.try_into().unwrap()), + p_filesz: U32::new(endian, generic.p_filesz.try_into().unwrap()), + p_memsz: U32::new(endian, generic.p_memsz.try_into().unwrap()), + p_flags: U32::new(endian, generic.p_flags), + p_align: U32::new(endian, generic.p_align.try_into().unwrap()), + } + } + + fn set_p_type(&mut self, endian: Self::Endian, p_type: u32) { + self.p_type.set(endian, p_type) + } + + fn set_p_flags(&mut self, endian: Self::Endian, p_flags: u32) { + self.p_flags.set(endian, p_flags) + } + + fn set_p_offset(&mut self, endian: Self::Endian, p_offset: Self::Word) { + self.p_offset.set(endian, p_offset) + } + + fn set_p_vaddr(&mut self, endian: Self::Endian, p_vaddr: Self::Word) { + self.p_vaddr.set(endian, p_vaddr) + } + + fn set_p_paddr(&mut self, endian: Self::Endian, p_paddr: Self::Word) { + self.p_vaddr.set(endian, p_paddr) + } + + fn set_p_filesz(&mut self, endian: Self::Endian, p_filesz: Self::Word) { + self.p_offset.set(endian, p_filesz) + } + + fn set_p_memsz(&mut self, endian: Self::Endian, p_memsz: Self::Word) { + self.p_vaddr.set(endian, p_memsz) + } + + fn set_p_align(&mut self, endian: Self::Endian, p_align: Self::Word) { + self.p_vaddr.set(endian, p_align) + } +} + +impl ProgramHeaderExt for ProgramHeader64 { + fn from_generic(endian: Self::Endian, generic: &GenericProgramHeader) -> Self { + ProgramHeader64 { + p_type: U32::new(endian, generic.p_type), + p_flags: U32::new(endian, generic.p_flags), + p_offset: U64::new(endian, generic.p_offset), + p_vaddr: U64::new(endian, generic.p_vaddr), + p_paddr: U64::new(endian, generic.p_paddr), + p_filesz: U64::new(endian, generic.p_filesz), + p_memsz: U64::new(endian, generic.p_memsz), + p_align: U64::new(endian, generic.p_align), + } + } + + fn set_p_type(&mut self, endian: Self::Endian, p_type: u32) { + self.p_type.set(endian, p_type) + } + + fn set_p_flags(&mut self, endian: Self::Endian, p_flags: u32) { + self.p_flags.set(endian, p_flags) + } + + fn set_p_offset(&mut self, endian: Self::Endian, p_offset: Self::Word) { + self.p_offset.set(endian, p_offset) + } + + fn set_p_vaddr(&mut self, endian: Self::Endian, p_vaddr: Self::Word) { + self.p_vaddr.set(endian, p_vaddr) + } + + fn set_p_paddr(&mut self, endian: Self::Endian, p_paddr: Self::Word) { + self.p_vaddr.set(endian, p_paddr) + } + + fn set_p_filesz(&mut self, endian: Self::Endian, p_filesz: Self::Word) { + self.p_offset.set(endian, p_filesz) + } + + fn set_p_memsz(&mut self, endian: Self::Endian, p_memsz: Self::Word) { + self.p_vaddr.set(endian, p_memsz) + } + + fn set_p_align(&mut self, endian: Self::Endian, p_align: Self::Word) { + self.p_vaddr.set(endian, p_align) + } +} diff --git a/crates/sel4-reset/src/lib.rs b/crates/sel4-reset/src/lib.rs index 94e86ff4d..83ab20d4c 100644 --- a/crates/sel4-reset/src/lib.rs +++ b/crates/sel4-reset/src/lib.rs @@ -9,7 +9,8 @@ use core::arch::global_asm; use core::slice; -use sel4_rodata_static::rodata_static; +use sel4_elf_header::{PT_SEL4_RESET_REGIONS, locate_phdrs}; +use sel4_panicking_env::abort; use sel4_stack::{Stack, StackBottom}; #[cfg(not(any( @@ -21,6 +22,17 @@ use sel4_stack::{Stack, StackBottom}; )))] compile_error!("unsupported architecture"); +// 6 should be enough: +// - 1 PT_LOAD for region meta +// - 1 PT_SEL4_RESET_REGIONS for region meta +// - 4 for writeable PT_LOAD +sel4_elf_header::add_placeholder_phdrs!(reset1); +sel4_elf_header::add_placeholder_phdrs!(reset2); +sel4_elf_header::add_placeholder_phdrs!(reset3); +sel4_elf_header::add_placeholder_phdrs!(reset4); +sel4_elf_header::add_placeholder_phdrs!(reset5); +sel4_elf_header::add_placeholder_phdrs!(reset6); + // // // #[repr(C)] @@ -46,9 +58,17 @@ unsafe fn reset_memory(regions: &'static [RegionMeta]) { } unsafe fn get_regions() -> &'static [RegionMeta] { - let meta_vaddr = *rodata_static!(sel4_reset_regions_meta_vaddr: usize); - let meta_count = *rodata_static!(sel4_reset_regions_meta_count: usize); - unsafe { slice::from_raw_parts(meta_vaddr as *const _, meta_count) } + unsafe { + let phdr = locate_phdrs() + .unwrap_or_else(|err| abort!("{err}")) + .iter() + .find(|phdr| phdr.p_type == PT_SEL4_RESET_REGIONS) + .unwrap_or_else(|| abort!("missing PT_SEL4_RESET_REGIONS program header")); + slice::from_raw_parts( + phdr.p_vaddr as *const _, + phdr.p_memsz / size_of::(), + ) + } } // // // diff --git a/crates/sel4-runtime-common/src/lib.rs b/crates/sel4-runtime-common/src/lib.rs index e63b81034..141fd2cad 100644 --- a/crates/sel4-runtime-common/src/lib.rs +++ b/crates/sel4-runtime-common/src/lib.rs @@ -10,12 +10,9 @@ #![feature(core_intrinsics)] #![feature(linkage)] #![allow(internal_features)] -#![feature(used_with_arg)] use core::sync::atomic::{AtomicBool, Ordering}; -use sel4_elf_header::{ElfHeader, ProgramHeader}; -use sel4_immutable_cell::ImmutableCell; use sel4_panicking_env::abort; mod abort; @@ -66,23 +63,6 @@ pub fn global_init_complete() -> bool { GLOBAL_INIT_COMPLETE.load(Ordering::Acquire) } -unsafe extern "C" { - static __ehdr_start: ElfHeader; -} - -#[used(linker)] -#[unsafe(no_mangle)] -static HACK__ehdr_start: ImmutableCell<&ElfHeader> = ImmutableCell::new(unsafe { &__ehdr_start }); - -#[allow(dead_code)] -fn locate_phdrs() -> &'static [ProgramHeader] { - let hdr = HACK__ehdr_start.get(); - if !hdr.is_magic_valid() { - abort!("ELF header magic mismatch") - } - hdr.locate_phdrs() -} - #[cfg(target_arch = "arm")] #[linkage = "weak"] #[unsafe(no_mangle)] diff --git a/crates/sel4-runtime-common/src/tls.rs b/crates/sel4-runtime-common/src/tls.rs index d0e85b4bb..8133d6552 100644 --- a/crates/sel4-runtime-common/src/tls.rs +++ b/crates/sel4-runtime-common/src/tls.rs @@ -7,16 +7,16 @@ use cfg_if::cfg_if; use sel4_elf_header::PT_TLS; +use sel4_elf_header::locate_phdrs; use sel4_panicking_env::abort; #[allow(unused_imports)] use sel4_initialize_tls::{DEFAULT_SET_THREAD_POINTER_FN, SetThreadPointerFn, UncheckedTlsImage}; -use crate::locate_phdrs; - #[allow(clippy::missing_safety_doc)] pub(crate) unsafe fn with_tls(f: impl FnOnce() -> !) -> ! { let phdr = locate_phdrs() + .unwrap_or_else(|err| abort!("{err}")) .iter() .find(|phdr| phdr.p_type == PT_TLS) .unwrap_or_else(|| abort!("no PT_TLS segment")); diff --git a/crates/sel4-runtime-common/src/unwinding.rs b/crates/sel4-runtime-common/src/unwinding.rs index 51a6daea4..de362d7b2 100644 --- a/crates/sel4-runtime-common/src/unwinding.rs +++ b/crates/sel4-runtime-common/src/unwinding.rs @@ -10,15 +10,13 @@ use unwinding::custom_eh_frame_finder::{ EhFrameFinder, FrameInfo, FrameInfoKind, set_custom_eh_frame_finder, }; -use sel4_elf_header::{PT_GNU_EH_FRAME, PT_LOAD}; - -use crate::locate_phdrs; +use sel4_elf_header::{PT_GNU_EH_FRAME, PT_LOAD, locate_phdrs}; struct EhFrameFinderImpl; unsafe impl EhFrameFinder for EhFrameFinderImpl { fn find(&self, pc: usize) -> Option { - let phdrs = locate_phdrs(); + let phdrs = locate_phdrs().unwrap_or_else(|err| abort!("{err}")); let text_base = phdrs.iter().find_map(|phdr| { if phdr.p_type == PT_LOAD {