# Function rustc_codegen_llvm::back::write::embed_bitcode

source ·

    unsafe fn embed_bitcode(
        cgcx: &CodegenContext<LlvmCodegenBackend>,
        llcx: &Context,
        llmod: &Module,
        cmdline: &str,
        bitcode: &[u8],
    )

Expand description

Embed the bitcode of an LLVM module in the LLVM module itself.

This is done primarily for iOS where it appears to be standard to compile C code at least with `-fembed-bitcode` which creates two sections in the executable:

- __LLVM,__bitcode
- __LLVM,__cmdline

It appears both of these sections are necessary to get the linker to recognize what’s going on. A suitable cmdline value is taken from the target spec.

Furthermore debug/O1 builds don’t actually embed bitcode but rather just embed an empty section.

Basically all of this is us attempting to follow in the footsteps of clang on iOS. See #35968 for lots more info.