2021-01-22 09:29:21 +00:00
|
|
|
#![no_main]
|
|
|
|
#![no_std]
|
|
|
|
|
|
|
|
use cortex_m::asm;
|
|
|
|
use cortex_m_rt::entry;
|
|
|
|
use panic_log as _; // panic handler
|
|
|
|
|
|
|
|
#[entry]
|
|
|
|
fn main() -> ! {
|
|
|
|
// board initialization
|
|
|
|
dk::init().unwrap();
|
|
|
|
|
2021-01-22 11:40:17 +00:00
|
|
|
log::info!("provoking stack overflow...");
|
2021-01-22 14:59:13 +00:00
|
|
|
spam(0);
|
2021-01-22 09:29:21 +00:00
|
|
|
|
|
|
|
loop {
|
|
|
|
asm::bkpt();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline(never)]
|
2021-01-22 14:59:13 +00:00
|
|
|
fn spam(n: u32) {
|
2021-01-22 14:21:47 +00:00
|
|
|
// allocate and initialize 4 kilobytes of stack memory to provoke stack overflow
|
2021-01-22 14:59:13 +00:00
|
|
|
let use_stack = [n; 1024];
|
2021-01-22 09:29:21 +00:00
|
|
|
|
2021-01-22 14:18:18 +00:00
|
|
|
log::info!(
|
2021-01-22 14:59:13 +00:00
|
|
|
"address of current `use_stack` at recursion depth {:?}: {:?}",
|
|
|
|
use_stack[1023], // "use" use_stack to prevent it from being optimized out
|
2021-01-22 14:18:18 +00:00
|
|
|
&use_stack as *const u32
|
|
|
|
);
|
2021-01-22 11:40:17 +00:00
|
|
|
|
2021-01-22 14:59:13 +00:00
|
|
|
let next = n + 1;
|
|
|
|
spam(next); // infinite recursion
|
2021-01-22 09:29:21 +00:00
|
|
|
}
|