Gary Guo <[email protected]> writes: > On Tue, 02 Dec 2025 20:27:59 +0000 > Alice Ryhl <[email protected]> wrote: > >> From: Gary Guo <[email protected]> >> >> A new experimental Kconfig option, `RUST_INLINE_HELPERS` is added to >> allow C helpers (which were created to allow Rust to call into >> inline/macro C functions without having to re-implement the logic in >> Rust) to be inlined into Rust crates without performing global LTO. >> >> If the option is enabled, the following is performed: >> * For helpers, instead of compiling them to an object file to be linked >> into vmlinux, they're compiled to LLVM IR. >> * The LLVM IR is compiled to bitcode (This is step is not necessary, but >> is a performance optimisation to prevent LLVM from always have to >> reparse the same IR). >> * When a Rust crate is compiled, instead of generating an object file, we >> ask LLVM bitcode to be generated. >> * llvm-link is invoked with --internalize to combine the helper bitcode >> with the crate bitcode. This step is similar to LTO, but this is much >> faster since it only needs to inline the helpers. >> * clang is invoked to turn the combined bitcode into a final object file. >> >> The --internalize flag tells llvm-link to treat all symbols in >> helpers.bc using `internal` linkage. This matches the behavior of >> `clang` on `static inline` functions, and avoids exporting the symbol >> from the object file. > > Huge shout-out to Matthew for discovering this option, this makes thing > so much nicer and it feels way less hacky and more reliable now. > >> >> To ensure that RUST_INLINE_HELPERS is not incompatible with BTF, we pass >> the -g0 flag when building helpers. See commit 5daa0c35a1f0 ("rust: >> Disallow BTF generation with Rust + LTO") for details. > > Again this is a much nicer way to workaround the issue than changing > the language name in the DWARF info using text replacement that I come > up with :) > >> >> We have an intended triple mismatch of `aarch64-unknown-none` vs >> `aarch64-unknown-linux-gnu`, so we suppress the warning. >> >> Co-developed-by: Boqun Feng <[email protected]> >> Signed-off-by: Boqun Feng <[email protected]> >> Co-developed-by: Matthew Maurer <[email protected]> >> Signed-off-by: Matthew Maurer <[email protected]> >> Signed-off-by: Gary Guo <[email protected]> >> Co-developed-by: Alice Ryhl <[email protected]> >> Signed-off-by: Alice Ryhl <[email protected]> >> --- >> Makefile | 4 +++- >> lib/Kconfig.debug | 15 +++++++++++++++ >> rust/Makefile | 26 ++++++++++++++++++++++---- >> rust/exports.c | 5 ++++- >> scripts/Makefile.build | 5 ++++- >> 5 files changed, 48 insertions(+), 7 deletions(-) >> >> diff --git a/Makefile b/Makefile >> index >> 96ddbaae7e12de71bcfabef4639de3a13a6e4815..5834bfd568548d1bee34b328dccce5d60f85526f >> 100644 >> --- a/Makefile >> +++ b/Makefile >> @@ -517,6 +517,8 @@ OBJCOPY = >> $(LLVM_PREFIX)llvm-objcopy$(LLVM_SUFFIX) >> OBJDUMP = $(LLVM_PREFIX)llvm-objdump$(LLVM_SUFFIX) >> READELF = $(LLVM_PREFIX)llvm-readelf$(LLVM_SUFFIX) >> STRIP = $(LLVM_PREFIX)llvm-strip$(LLVM_SUFFIX) >> +LLVM_LINK = $(LLVM_PREFIX)llvm-link$(LLVM_SUFFIX) >> +LLVM_AS = $(LLVM_PREFIX)llvm-as$(LLVM_SUFFIX) > > I think this is no longer needed as we only use LLVM BC now without > having to round-trip between LLVM IR. >
We should update the commit message to reflect this as well. Best regards, Andreas Hindborg
