As of the latest nightly ( nightly-2018-04-08 ) the expansion of #![no_std] contains extern crate compiler_builtins . This unstable crate contains compiler intrinsics, like addsf3 , which LLVM uses (calls) to perform operations, like addition of single precision floats, when they can’t be performed using native instructions. Some targets need this crate to link properly.

This is a breaking change:

If you had a crate that directly depended on the compiler_builtins crate you’ll have to remove the extern crate bit:

#![no_std] -#![feature(compiler_builtins_lib)] -extern crate compiler_builtins; // ..

But this also means you can drop the compiler_builtins_lib feature gate, which is a good thing.

Also, if you were using Xargo (which requires nightly) v0.3.11 or older (NOTE that you don’t need Xargo if you are cross compiling for ARM Cortex-M) and you were building a sysroot that only contained core you’ll have to add / modify Xargo.toml to also (cross) compile the compiler_builtins crate.

$ cat Xargo.toml

[dependencies.core] stage = 0 [dependencies.compiler_builtins] features = ["mem"] stage = 1

Alternatively, you can use the upcoming Xargo v0.3.12 which will compile both core and compiler_builtins by default.

This change is part of the effort towards making embedded development possible on the stable channel.

See this issue for previous discussion regarding this change.