@huonw: No. [The workaround is not that simple.](https://github.com/pczarn/rustboot/blob/3b9a10385d1ebd465cf7a7e8a4165c700c8b3f80/arch/x86/cpu/exception.rs#L62-L84) This freestanding statement must be reachable from Rust code so that it is not recognized as dead code and optimized away.

I believe a new ABI string should be supported. (`unsafe` could be implied by `extern "naked"`, and extern "ABI" unsafe fn can't be declared as per https://github.com/mozilla/rust/issues/10025)
```rust
pub extern "naked" unsafe fn isr_handler() { // alternatively extern "bare"
    asm!("mrs r0, psp
          stmdb r0!, {r4-r11}
          msr psp, r0" :::: "volatile");
    switch_stack();
}
```