This is a P-high embedded-WG issue that needs to be fixed to make embedded Rust work on stable.
Background:
The compiler-builtins crate contains compiler intrinsics that LLVM may call when lowering operations like i64 multiplication to machine code. This crate currently is its own crate due to these requirements: its object file needs to appear at the end of the linker argument list and it needs be marked with the #![compiler_builtins] attribute (symbol visibility, etc.).
On #![no_std] compiler-builtins needs to appear in the dependency graph to avoid linker errors but that requires the #[feature(compiler_builtins_lib)] feature gate because the crate is unstable -- it's a compiler implementation detail.
The fix is to put the compiler intrinsics into core and eliminate the compiler-builtins crate from the std facade. This has become possible thanks to recent progress in multiple codegen units.
What roughly needs to be done
-
Include compiler-builtins as source code into core using something like #[path = "../compiler-builtins/src/lib.rs"] mod intrinsics.
-
Create some attribute to mark the whole intrinsics module as #![compiler_builtins] and to force the whole module to be into its own codegen unit so it gets its own object file.
cc @michaelwoerister @eddyb @alexcrichton
This is a P-high embedded-WG issue that needs to be fixed to make embedded Rust work on stable.
Background:
The
compiler-builtinscrate contains compiler intrinsics that LLVM may call when lowering operations likei64multiplication to machine code. This crate currently is its own crate due to these requirements: its object file needs to appear at the end of the linker argument list and it needs be marked with the#![compiler_builtins]attribute (symbol visibility, etc.).On
#![no_std]compiler-builtinsneeds to appear in the dependency graph to avoid linker errors but that requires the#[feature(compiler_builtins_lib)]feature gate because the crate is unstable -- it's a compiler implementation detail.The fix is to put the compiler intrinsics into
coreand eliminate thecompiler-builtinscrate from thestdfacade. This has become possible thanks to recent progress in multiple codegen units.What roughly needs to be done
Include
compiler-builtinsas source code intocoreusing something like#[path = "../compiler-builtins/src/lib.rs"] mod intrinsics.Create some attribute to mark the whole
intrinsicsmodule as#![compiler_builtins]and to force the whole module to be into its own codegen unit so it gets its own object file.cc @michaelwoerister @eddyb @alexcrichton