From 25eb06c08966986192ab498717d5617abba193b4 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Mon, 7 Sep 2020 19:09:36 +0200 Subject: [PATCH] add stack overflow protection --- .cargo/config.toml | 1 + src/bin/overflow.rs | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/bin/overflow.rs diff --git a/.cargo/config.toml b/.cargo/config.toml index a6fd2d5..c549fd0 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -2,6 +2,7 @@ # TODO(2) replace `$CHIP` with your chip's name (see `probe-run --list-chips` output) runner = "probe-run --chip $CHIP --defmt" rustflags = [ + "-C", "linker=flip-link", "-C", "link-arg=-Tlink.x", "-C", "link-arg=-Tdefmt.x", ] diff --git a/src/bin/overflow.rs b/src/bin/overflow.rs new file mode 100644 index 0000000..03c2a47 --- /dev/null +++ b/src/bin/overflow.rs @@ -0,0 +1,25 @@ +#![no_main] +#![no_std] + +use {{crate_name}} as _; // global logger + panicking-behavior + memory layout + +#[cortex_m_rt::entry] +fn main() -> ! { + ack(10, 10); + {{crate_name}}::exit() +} + +fn ack(m: u32, n: u32) -> u32 { + defmt::info!("ack(m={:u32}, n={:u32})", m, n); + let mut big = [2; 512]; + if m == 0 { + n + 1 + } else { + big[100] += 1; + if n == 0 { + ack(m - 1, 1) + } else { + ack(m - 1, ack(m, n - 1)) + } + } +}