Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
9c4a933
Network working group call notes: March 30, 2026
brghena Mar 30, 2026
363bf84
capsules: gpio: ensure grant created
bradjc Apr 1, 2026
89b9173
kernel: upcall: update schedule doc
bradjc Apr 1, 2026
f2f2df4
doc: trd104: add note about YWF race condition avoidance
bradjc Apr 1, 2026
a5b2a0f
doc: kernel: sysdriver: add not about grants
bradjc Apr 1, 2026
8e801c8
kernel: upcall: doc queue full behavior with YWF
bradjc Apr 6, 2026
f4934ae
Core working group call notes: April 08, 2026
brghena Apr 8, 2026
355d24b
doc: wg-cryptography: 2026-04-03 notes
tyler-potyondy Apr 10, 2026
3ecefde
Network working group call notes: April 13, 2026
brghena Apr 13, 2026
0900042
capsule: gpio: return err if no grant on interrupt
bradjc Apr 17, 2026
c15bbfc
Merge pull request #4786 from tock/dev/core-notes-2026-04-08.md
lschuermann Apr 20, 2026
8ab192e
Merge pull request #4768 from tock/dev/network-notes-2026-03-30
bradjc Apr 20, 2026
ff85044
Merge pull request #4775 from tock/doc/syscall-driver-grant-allocation
brghena Apr 20, 2026
f273493
Merge pull request #4773 from tock/dev/upcall-schedule-doc
brghena Apr 20, 2026
7c84183
Merge pull request #4774 from tock/doc/trd104-ywf-race
lschuermann Apr 20, 2026
9b97dd4
Prototype specialized PanicWriter for nrf52dk
alevy Nov 26, 2025
0e59c7b
kernel: debug: panic writer: add comments
bradjc Nov 27, 2025
c1d7ef6
kernel: move PanicWriter to platform/chip
bradjc Dec 5, 2025
04579f3
kernel: debug: use PanicWriter in panic_print
bradjc Dec 5, 2025
d5abd7b
boards: nrf52dk: update panic call
bradjc Dec 5, 2025
701cb24
chips: nrf52: comment uart panic writer
bradjc Dec 5, 2025
a94566e
chips: sifive: uart: implement PanicWriter
bradjc Dec 5, 2025
ecec8da
boards: arty: new PanicWriter
bradjc Dec 5, 2025
024ab55
boards: wm1110dev: use PanicWriter
bradjc Dec 5, 2025
7898e01
IoWrite: update use paths
bradjc Dec 23, 2025
dc9abe9
boards: io.rs: use panic_old
bradjc Dec 23, 2025
575f181
chips: qemu rv32: implement panic writer
bradjc Dec 24, 2025
05fca97
boards: qemu rv32: use panic writer
bradjc Dec 24, 2025
ef33c8a
chips: segger: add panic writer for rtt
bradjc Jan 9, 2026
0596431
boards: nrf52840dk: update panic to panicwriter
bradjc Jan 9, 2026
492f1ed
chips: segger: rtt: fix lifetime
bradjc Jan 9, 2026
04787d5
esp32: uart: implement `PanicWriter`
bradjc Mar 11, 2026
d47d232
boards: esp32-c3: use PanicWriter for io.rs
bradjc Mar 11, 2026
e113729
boards: lpc55s69-evk on old panic
bradjc Apr 9, 2026
e8f49a1
boards: esp32: fix test panic handler
bradjc Apr 9, 2026
247b06e
kernel: PanicWriter: improve comments
bradjc Apr 16, 2026
978e606
iowrite: do not depend on core::fmt::Write
bradjc Apr 16, 2026
13dfb40
chips: add todo about validating the sync writers
bradjc Apr 20, 2026
01a31f1
boards: lora_e5_mini: update to panic_old
bradjc Apr 20, 2026
407cec4
Core working group call notes: April 15, 2026
brghena Apr 17, 2026
36197e1
Merge pull request #4788 from tyler-potyondy/crypto-wg-notes
bradjc Apr 21, 2026
ff25535
kernel: move write to binary to capsules
bradjc Oct 16, 2025
1e1d8dd
clippy: deny empty_line_after_doc_comments
bradjc Oct 2, 2025
5a5d431
lpc55s6x: remove empty line below comment
bradjc Apr 21, 2026
89a3630
boards: tutorials: nrf52840-hotp: fix storage permissions
tyler-potyondy Apr 20, 2026
b037ee4
Merge pull request #4684 from tock/dev/panic-writer2
alevy Apr 22, 2026
c2bb85b
kernel/SingleThreadValue: don't move `T: !Send` across threads
lschuermann Feb 1, 2026
45244f7
kernel: STV: move value arg to bind_to_thread
bradjc Mar 11, 2026
8e3f7c6
kernel: update debug, deff. call to new STV
bradjc Mar 11, 2026
c6910f1
boards: nordic: nrf52: update STV
bradjc Mar 11, 2026
9d09224
kernel/SingleThreadValue: update doc to reflect deferred initialization
lschuermann Mar 15, 2026
0315738
kernel: unwrap on SingleThreadValue::bind_to_thread
lschuermann Mar 15, 2026
3e77583
boards: port to new SingleThreadValue deferred initialization APIs
lschuermann Mar 15, 2026
a4b0beb
boards: ignore bind to thread error
bradjc Apr 16, 2026
2bb95f3
kernel/single_thread_value: add safety doc
lschuermann Apr 22, 2026
e641f01
boards/lora_e5_mini: port to new SingleThreadValue constructor API
lschuermann Apr 22, 2026
aa57808
kernel/single_thread_value: add safety docs
lschuermann Apr 22, 2026
22012c7
kernel/deferred_call: discard SingleThreadValue::bind_to_thread errors
lschuermann Apr 22, 2026
001a8b2
Merge pull request #4771 from tock/dev/gpio-use-grant
alevy Apr 22, 2026
b352820
boards: fix handful of STV/bind/static mut issues
bradjc Apr 22, 2026
3b78289
boards: lora_e5_mini: setup panic resources
bradjc Apr 22, 2026
74d3a77
boards: rpi pico: need STV bind unsafe
bradjc Apr 22, 2026
1339da1
Merge pull request #4805 from tock/dev/stv-no-unsound-send-boards
lschuermann Apr 22, 2026
c28c0fb
Merge pull request #4800 from tock/clippy/deny/empty_line_after_doc_c…
lschuermann Apr 22, 2026
732f5ce
Merge pull request #4797 from tyler-potyondy/hotp-tutorial
bradjc Apr 22, 2026
10ea49f
build(deps): bump lxml from 6.0.0 to 6.1.0 in /tools/svd2regs
dependabot[bot] Apr 22, 2026
09ace8e
boards: imxrt1050-evkb: use crate name
bradjc Apr 23, 2026
4c24b4a
Merge pull request #4740 from tock/dev/stv-no-unsound-send
alevy Apr 23, 2026
1907be4
doc: wg-crypto: 4-17-26 meeting notes
tyler-potyondy Apr 17, 2026
d752e18
kernel/utilities: add CopyRange, a copyable twin of `core::ops::Range`
lschuermann Jan 4, 2026
6554e95
kernel/leasable_buffer: implement Copy for SubSlice
lschuermann Jan 4, 2026
5034021
kernel/leasable_buffer: implement Debug for SubSliceMutImmut
lschuermann Jan 5, 2026
0b60853
kernel/utilities: add DmaSlice types for sound DMA to Rust slices
lschuermann Jan 4, 2026
6d2084f
arch/riscv: implement DmaFence for cache-coherent RISC-V targets
lschuermann Jan 4, 2026
ef25b0f
arch/x86: implement X86DmaFence
lschuermann Jan 5, 2026
9b4a5dc
chips/virtio: use SubSlice and DmaSlice types
lschuermann Jan 5, 2026
9e84928
arch/cortex-m: implement CortexMDmaFence
alevy Feb 26, 2026
fe923f8
kernel/DmaSlice: add ImmutableFromIntoBytes trait bound
lschuermann Mar 9, 2026
45969cf
arch: cortex-m: dma slice format as rest of cortex-m crate
bradjc Mar 11, 2026
875926f
kernel: dmaslice: rework comments/names
bradjc Mar 11, 2026
3f683c3
kernel: utilities: propose JustBytes
bradjc Mar 11, 2026
9725807
kernel/dma_slice: reword module-level comments
lschuermann Mar 31, 2026
b1057f0
kernel/dma_slice: fix partially updated function names
lschuermann Mar 31, 2026
ff370e8
kernel/dma_slice: change usage example to proper doctest
lschuermann Mar 31, 2026
662de45
kernel/dma_slice: fix clippy lints
lschuermann Mar 31, 2026
7d2f5e4
arch: m4f: expose dma_fence
bradjc Mar 12, 2026
52ed2fc
kernel: dma_slice: continue renames
bradjc Mar 12, 2026
bb0b2ce
chips: virtio: splitqueue: update names
bradjc Apr 20, 2026
5471d01
kernel/dma_slice: rename new_unsafe -> new; fix tests & docs
lschuermann Apr 20, 2026
c4d32c6
chips: nrf52: uart: use DmaSlice
bradjc Mar 12, 2026
8ae96b4
chips: nrf52: uart: check if dma already started
bradjc Apr 20, 2026
95cdc4c
kernel/dma_fence: improve documentation
lschuermann Apr 22, 2026
92e4fba
chips: rp2040: hold reference to clock, not cell
bradjc Aug 27, 2025
54c5d10
all rp2040 boards build
bradjc Apr 24, 2026
32a9abd
rp2040: rename resolve_dependencies to init
bradjc Apr 24, 2026
e22945b
rp2350: use static ref for clocks
bradjc Apr 24, 2026
dc7774c
doc: fix rustdoc links
bradjc Apr 24, 2026
ac2f044
cannot rustdoc link to things not available on all boards
bradjc Apr 24, 2026
3a5fa22
Merge pull request #4812 from tock/doc/misc-link-fixes
lschuermann Apr 24, 2026
49ee2fa
kernel: debug: remove flush pub unsafe
bradjc Apr 24, 2026
5c4240e
Merge pull request #4813 from tock/dev/kernel/debug-rm-unsafe
brghena Apr 25, 2026
a45f842
Merge pull request #4791 from tock/dev/core-notes-2026-04-15
lschuermann Apr 27, 2026
364d352
arch: riscv: cfg to match all other arch crates
bradjc Apr 22, 2026
f999195
arch: x86: cfg to match all other arch crates
bradjc Apr 22, 2026
505292d
arch: riscv: format asm to unofficial style guide
bradjc Apr 22, 2026
173b0db
arch: x86: format asm to unofficial style guide
bradjc Apr 22, 2026
ee2bf02
arch/riscv/dma_fence: cfg() for all RISC-V machines, don't select tar…
lschuermann Apr 27, 2026
ea8e617
kernel/{dma_fence,dma_slice}: fix & improve documentation & formatting
lschuermann Apr 27, 2026
9449d53
Network working group call notes: April 27, 2026
brghena Apr 27, 2026
514faab
Need to ignore license in uv.lock file
brghena Apr 27, 2026
c7ac3a4
Merge pull request #4806 from tock/dependabot/uv/tools/svd2regs/lxml-…
lschuermann Apr 27, 2026
546c54c
Merge pull request #4702 from tock/dev/dmaslice
bradjc Apr 29, 2026
33c947b
Merge pull request #4809 from tyler-potyondy/crypto-wg-notes
brghena Apr 29, 2026
fec1e32
Merge pull request #4789 from tock/dev/network-notes-2026-04-13
bradjc Apr 29, 2026
ea5ae44
Merge pull request #4815 from tock/dev/network-notes-2026-04-27
lschuermann Apr 29, 2026
0f1c6af
kernel: migrate to Rust 2024 edition using `cargo fix --edition`
lschuermann Nov 26, 2025
f004bca
kernel: grant: more nuanced safety info
bradjc Nov 27, 2025
ef23409
kernel: macros: resolve expr_2021
bradjc Apr 20, 2026
7a0883a
kernel: 2024 improve safety docs
bradjc Apr 20, 2026
4605db6
kernel: process standard: fine-grained safety doc
bradjc Apr 20, 2026
e3791b3
kernel: processbuffer: fine-grained unsafe docs
bradjc Apr 20, 2026
47b2cb2
kernel: kernel.rs: remove spurious 2024 artifact
bradjc Apr 20, 2026
a0706c3
kernel: debug: fmt
bradjc Apr 23, 2026
e41fddf
kernel: grant: fmt
bradjc Apr 23, 2026
ab9b31c
kernel: process_standard: fmt
bradjc Apr 23, 2026
a839295
kernel: processbuffer: fmt
bradjc Apr 23, 2026
bca8cff
Core working group call notes: April 29, 2026
brghena May 4, 2026
0841508
kernel: dma_slice: unsafe code in tests
bradjc May 4, 2026
73f49a7
Merge pull request #4808 from tock/dev/imxrt1050-evkb-crate-name
brghena May 5, 2026
3342912
Merge pull request #4799 from tock/dev/write-to-binary
brghena May 5, 2026
48b7e39
lpc55s6x: use static refs, not optionalcells
bradjc May 5, 2026
7a84faf
Merge pull request #4820 from tock/dev/core-notes-2026-04-29
jrvanwhy May 7, 2026
08c4d1c
Merge pull request #4677 from tock/dev/kernel-crate-rust-2024
bradjc May 8, 2026
e9ac8c1
flux-ci-runner: pin fixpoint to nightly-01-14-2026.
jrvanwhy May 11, 2026
a039377
Merge pull request #4830 from jrvanwhy/fix-fixpoint
bradjc May 12, 2026
ae75b43
build(deps): bump urllib3 from 2.6.3 to 2.7.0 in /tools/ci/tockbot
dependabot[bot] May 12, 2026
32c1a87
rust: update to 2026-04-21
bradjc Apr 21, 2026
f0f3b84
riscv: cast as extern "C" fn() first, then usize
bradjc Apr 21, 2026
7bcd244
kernel: match: use built-in functions
bradjc Apr 21, 2026
4761739
clippy fixes
bradjc Apr 21, 2026
eca7331
rustfmt
lschuermann Apr 21, 2026
e552957
boards: cargo: include is now stable
bradjc Apr 23, 2026
accd09d
boards: i486: using custom .json target requires cargo flag
bradjc Apr 23, 2026
a46ecb2
makefile: include rpi pico for clippy
bradjc Apr 23, 2026
3046b81
arch: use .add() instead of .offset() for constants
bradjc Apr 23, 2026
da345c7
Remove `-> !` from earlgrey and esp32-c3's start trap functions.
jrvanwhy Apr 23, 2026
7c2ca59
Remove the --arch-name=thumb objdump parameter.
jrvanwhy Apr 24, 2026
a212772
Switch the RISC-V start trap's signature to diverging.
jrvanwhy Apr 24, 2026
801d2f7
Merge pull request #4828 from tock/dependabot/pip/tools/ci/tockbot/ur…
brghena May 12, 2026
3806ce0
Merge pull request #4801 from tock/dev/rust-2026-04
lschuermann May 13, 2026
afebaaf
Merge pull request #4811 from tock/rp2040-fixed-clocks
ppannuto May 13, 2026
b35fad8
Merge pull request #4824 from tock/dev/lpc55s69-uart-no-optionalcell
ppannuto May 13, 2026
745434d
Merge upstream Tock, May-22-2026 into ents
tyler-potyondy May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .lcignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,4 @@

# Files that are autogenerated and cannot be modified to add the header.
/Cargo.lock
/tools/svd2regs/uv.lock
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"editor.defaultFormatter": "rust-lang.rust-analyzer",
"editor.formatOnSave": true,
"rust-analyzer.server.extraEnv": {
"RUSTUP_TOOLCHAIN": "nightly-2025-11-03"
"RUSTUP_TOOLCHAIN": "nightly-2026-04-21"
},
"rust-analyzer.check.allTargets": false,
}
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,8 @@ result_unit_err = "allow"
unusual-byte-groupings = "allow"
# We widely use upper case acronyms for hardware registers and fields.
upper_case_acronyms = "allow"

# Condensing match statements can make code harder to read and inconsistent.
collapsible-match = "allow"

missing_safety_doc = "allow"
doc_lazy_continuation = "allow"
Expand Down Expand Up @@ -280,7 +281,6 @@ or_fun_call = "allow"
missing_const_for_fn = "allow"
equatable_if_let = "allow"
derive_partial_eq_without_eq = "allow"
empty_line_after_doc_comments = "allow"
trait_duplication_in_bounds = "allow"
useless_let_if_seq = "allow"

Expand Down
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -407,9 +407,15 @@ ci-job-clippy:
@cargo clippy -- -D warnings
# Run `cargo clippy` in select boards so we run clippy with targets that
# actually check the arch-specific functions.
#
# - nrf52840dk: cortex-m4
# - raspberry_pi_pico: cortex-m0
# - hifive1: riscv
# - qemu_i486_q35: x86
@cd boards/nordic/nrf52840dk && cargo clippy -- -D warnings
@cd boards/raspberry_pi_pico && cargo clippy -- -D warnings
@cd boards/hifive1 && cargo clippy -- -D warnings
@cd boards/qemu_i486_q35 && cargo clippy -- -D warnings
@cd boards/qemu_i486_q35 && cargo clippy -Zjson-target-spec -- -D warnings



Expand Down
87 changes: 87 additions & 0 deletions arch/cortex-m/src/dma_fence.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Licensed under the Apache License, Version 2.0 or the MIT License.
// SPDX-License-Identifier: Apache-2.0 OR MIT
// Copyright Tock Contributors 2026.

//! Cortex-M synchronization implementation for Rust when using DMA.

use kernel::platform::dma_fence::DmaFence;

#[derive(Debug, Copy, Clone)]
pub struct CortexMDmaFence {
_private: (),
}

/// An implementation of [DmaFence] for ARM Cortex-M systems.
///
/// The provided `release` and `acquire` methods use opaque assembly
/// blocks and the THUMB `DMB` instructions to make prior writes to
/// shared buffers visible to DMA devices, and DMA writes visible
/// subsequent memory reads, as specified in the ARM Cortex-M
/// Programming Guide to Memory Barrier Instructions [1].
///
/// [1]: https://developer.arm.com/documentation/dai0321/a/
impl CortexMDmaFence {
/// Construct a new [CortexMDmaFence].
///
/// # Safety
///
/// Users of this function guarantee that this fence is an appropriate
/// implementation of [`DmaFence`] for the platform on which this code is
/// running. In practice, this means that users must assert to be running on
/// an ARM Cortex-M (ARM-v6m / ARM-v7m) CPU.
pub unsafe fn new() -> Self {
Self { _private: () }
}
}

#[cfg(all(target_arch = "arm", target_os = "none"))]
unsafe impl DmaFence for CortexMDmaFence {
fn release<T>(self, slice_ptr: *mut [T]) {
let slice_start_ptr: *mut T = slice_ptr.cast();
unsafe {
core::arch::asm!(
"
// This block is opaque to the compiler; the compiler must assume
// that the block could read to the entire buffer from which the
// pointer stored in {dma_buffer_ptr_reg} was derived.
//
// Do not reorder prior memory reads or writes over subsequent
// I/O reads or writes.
dmb
",
dma_buffer_ptr_reg = in(reg) slice_start_ptr,
);
}
}

fn acquire<T>(self, slice_ptr: *mut [T]) {
let slice_start_ptr: *mut T = slice_ptr.cast();
unsafe {
core::arch::asm!(
"
// This block is opaque to the compiler; the compiler must assume
// that the block could write to the entire buffer from which the
// pointer stored in {dma_buffer_ptr_reg} was derived.
//
// Do not reorder prior I/O reads or writes over subsequent
// memory reads or writes.
dmb
",
dma_buffer_ptr_reg = in(reg) slice_start_ptr,
);
}
}
}

#[cfg(not(all(target_arch = "arm", target_os = "none")))]
unsafe impl DmaFence for CortexMDmaFence {
fn release<T>(self, _buf: *mut [T]) {
// When building for another architecture, such as for tests or CI:
unimplemented!("CortexMDmaFence can only be used on cortex-m targets");
}

fn acquire<T>(self, _buf: *mut [T]) {
// When building for another architecture, such as for tests or CI:
unimplemented!("CortexMDmaFence can only be used on cortex-m targets");
}
}
1 change: 1 addition & 0 deletions arch/cortex-m/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use core::fmt::Write;

pub mod dcb;
pub mod dma_fence;
pub mod dwt;
pub mod mpu;
pub mod nvic;
Expand Down
50 changes: 25 additions & 25 deletions arch/cortex-m/src/syscall.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const SVC_FRAME_SIZE: usize = 32;
/// Values for encoding the stored state buffer in a binary slice.
const VERSION: usize = 1;
const STORED_STATE_SIZE: usize = size_of::<CortexMStoredState>();
const TAG: [u8; 4] = [b'c', b't', b'x', b'm'];
const TAG: [u8; 4] = *b"ctxm";
const METADATA_LEN: usize = 3;

const VERSION_IDX: usize = 0;
Expand Down Expand Up @@ -181,7 +181,7 @@ impl<A: CortexMVariant> kernel::syscall::UserspaceKernelBoundary for SysCall<A>
}

let sp = state.psp as *mut u32;
let (r0, r1, r2, r3) = (sp.offset(0), sp.offset(1), sp.offset(2), sp.offset(3));
let (r0, r1, r2, r3) = (sp.add(0), sp.add(1), sp.add(2), sp.add(3));

// These operations are only safe so long as
// - the pointers are properly aligned. This is guaranteed because the
Expand Down Expand Up @@ -245,13 +245,13 @@ impl<A: CortexMVariant> kernel::syscall::UserspaceKernelBoundary for SysCall<A>
// - Instruction addresses require `|1` to indicate thumb code
// - Stack offset 4 is R12, which the syscall interface ignores
let stack_bottom = state.psp as *mut usize;
ptr::write(stack_bottom.offset(7), state.psr); //......... -> APSR
ptr::write(stack_bottom.offset(6), callback.pc.addr() | 1); //... -> PC
ptr::write(stack_bottom.offset(5), state.yield_pc | 1); // -> LR
ptr::write(stack_bottom.offset(3), callback.argument3.as_usize()); // -> R3
ptr::write(stack_bottom.offset(2), callback.argument2); // -> R2
ptr::write(stack_bottom.offset(1), callback.argument1); // -> R1
ptr::write(stack_bottom.offset(0), callback.argument0); // -> R0
ptr::write(stack_bottom.add(7), state.psr); //......... -> APSR
ptr::write(stack_bottom.add(6), callback.pc.addr() | 1); //... -> PC
ptr::write(stack_bottom.add(5), state.yield_pc | 1); // -> LR
ptr::write(stack_bottom.add(3), callback.argument3.as_usize()); // -> R3
ptr::write(stack_bottom.add(2), callback.argument2); // -> R2
ptr::write(stack_bottom.add(1), callback.argument1); // -> R1
ptr::write(stack_bottom.add(0), callback.argument0); // -> R0

Ok(())
}
Expand Down Expand Up @@ -296,26 +296,26 @@ impl<A: CortexMVariant> kernel::syscall::UserspaceKernelBoundary for SysCall<A>
// syscall (i.e. we return a value to the app immediately) then this
// will have no effect. If we are doing something like `yield()`,
// however, then we need to have this state.
state.yield_pc = ptr::read(new_stack_pointer.offset(6));
state.psr = ptr::read(new_stack_pointer.offset(7));
state.yield_pc = ptr::read(new_stack_pointer.add(6));
state.psr = ptr::read(new_stack_pointer.add(7));

// Get the syscall arguments and return them along with the syscall.
// It's possible the app did something invalid, in which case we put
// the app in the fault state.
let r0 = ptr::read(new_stack_pointer.offset(0));
let r1 = ptr::read(new_stack_pointer.offset(1));
let r2 = ptr::read(new_stack_pointer.offset(2));
let r3 = ptr::read(new_stack_pointer.offset(3));
let r0 = ptr::read(new_stack_pointer.add(0));
let r1 = ptr::read(new_stack_pointer.add(1));
let r2 = ptr::read(new_stack_pointer.add(2));
let r3 = ptr::read(new_stack_pointer.add(3));

// Get the actual SVC number.
// Read the PC from the stack as a *const u16 (i.e. we're treating instructions as
// u16).
let pcptr_ptr: *const usize = new_stack_pointer;
let pcptr_ptr: *const *const u16 = pcptr_ptr.cast();
let pcptr = ptr::read(pcptr_ptr.offset(6));
let pcptr = ptr::read(pcptr_ptr.add(6));
// The svc instruction is the last instruction before the PC, and should be 16 bits.
// Read it by offsetting the PC.
let svc_instr = ptr::read(pcptr.offset(-1));
let svc_instr = ptr::read(pcptr.sub(1));
let svc_num = (svc_instr & 0xff) as u8;

// Use the helper function to convert these raw values into a Tock
Expand Down Expand Up @@ -367,14 +367,14 @@ impl<A: CortexMVariant> kernel::syscall::UserspaceKernelBoundary for SysCall<A>
0xBAD00BAD,
)
} else {
let r0 = ptr::read(stack_pointer.offset(0));
let r1 = ptr::read(stack_pointer.offset(1));
let r2 = ptr::read(stack_pointer.offset(2));
let r3 = ptr::read(stack_pointer.offset(3));
let r12 = ptr::read(stack_pointer.offset(4));
let lr = ptr::read(stack_pointer.offset(5));
let pc = ptr::read(stack_pointer.offset(6));
let xpsr = ptr::read(stack_pointer.offset(7));
let r0 = ptr::read(stack_pointer.add(0));
let r1 = ptr::read(stack_pointer.add(1));
let r2 = ptr::read(stack_pointer.add(2));
let r3 = ptr::read(stack_pointer.add(3));
let r12 = ptr::read(stack_pointer.add(4));
let lr = ptr::read(stack_pointer.add(5));
let pc = ptr::read(stack_pointer.add(6));
let xpsr = ptr::read(stack_pointer.add(7));
(r0, r1, r2, r3, r12, lr, pc, xpsr)
};

Expand Down
16 changes: 8 additions & 8 deletions arch/cortex-m0/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ struct HardFaultStackedRegisters {
/// by the naked hard_fault_handler function.
unsafe extern "C" fn hard_fault_handler_kernel(faulting_stack: *mut u32) -> ! {
let hardfault_stacked_registers = HardFaultStackedRegisters {
r0: *faulting_stack.offset(0),
r1: *faulting_stack.offset(1),
r2: *faulting_stack.offset(2),
r3: *faulting_stack.offset(3),
r12: *faulting_stack.offset(4),
lr: *faulting_stack.offset(5),
pc: *faulting_stack.offset(6),
xpsr: *faulting_stack.offset(7),
r0: *faulting_stack.add(0),
r1: *faulting_stack.add(1),
r2: *faulting_stack.add(2),
r3: *faulting_stack.add(3),
r12: *faulting_stack.add(4),
lr: *faulting_stack.add(5),
pc: *faulting_stack.add(6),
xpsr: *faulting_stack.add(7),
};

panic!(
Expand Down
1 change: 1 addition & 0 deletions arch/cortex-m4f/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ pub mod mpu {
}
}

pub use cortexm::dma_fence;
pub use cortexm::dwt;
pub use cortexm::initialize_ram_jump_to_main;
pub use cortexm::nvic;
Expand Down
16 changes: 8 additions & 8 deletions arch/cortex-v7m/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,14 +288,14 @@ unsafe extern "C" fn hard_fault_handler_arm_v7m_kernel(
panic!("kernel stack overflow");
} else {
// Show the normal kernel hardfault message.
let stacked_r0: u32 = *faulting_stack.offset(0);
let stacked_r1: u32 = *faulting_stack.offset(1);
let stacked_r2: u32 = *faulting_stack.offset(2);
let stacked_r3: u32 = *faulting_stack.offset(3);
let stacked_r12: u32 = *faulting_stack.offset(4);
let stacked_lr: u32 = *faulting_stack.offset(5);
let stacked_pc: u32 = *faulting_stack.offset(6);
let stacked_xpsr: u32 = *faulting_stack.offset(7);
let stacked_r0: u32 = *faulting_stack.add(0);
let stacked_r1: u32 = *faulting_stack.add(1);
let stacked_r2: u32 = *faulting_stack.add(2);
let stacked_r3: u32 = *faulting_stack.add(3);
let stacked_r12: u32 = *faulting_stack.add(4);
let stacked_lr: u32 = *faulting_stack.add(5);
let stacked_pc: u32 = *faulting_stack.add(6);
let stacked_xpsr: u32 = *faulting_stack.add(7);

let mode_str = "Kernel";

Expand Down
Loading
Loading