rust-embedded / rust-embedded/cortex-m

`static mut` transform is unsound on multi-core systems

Open
#411 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

I-unsound
Dominant language
Rust
Stars
1k
Forks
202
Avg merge
6d 2h
Merged PRs (30d)
2

Description

RP2040 starts execution on both cores. If entry function contains a "special" definition of static mut variable, each core takes a mutable reference to it, which is illegal from the Rust point of view.

Here is the relevant piece of #[entry] code:
https://github.com/rust-embedded/cortex-m-rt/blob/ca4790f40738bcc770285c8080955a2077682078/macros/src/lib.rs#L87-L88

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at macros/src/lib.rs lines 87-88 and trace the special static mut transformation used by #[entry]. Reproduce or reason through RP2040 dual-core startup, then identify the project’s existing tests or validation path for entry macros. Done means the transformation no longer permits simultaneous mutable references across cores without violating Rust’s safety model.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
embedded-iot
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.