llvm
8b21fe60 - [LTO][LLD] Prevent invalid LTO libfunc transforms (#164916)

Commit
10 hours ago
[LTO][LLD] Prevent invalid LTO libfunc transforms (#164916) In LTO, part of LLVM's middle-end runs after linking has finished. LTO's semantics depend on the complete set of extracted bitcode files being known at this time. If the middle-end inserts new calls to library functions (libfuncs) that are implemented in bitcode, this could extract new bitcode object files into the link. These cannot be compiled, leading to undefined symbol references. Additionally, the middle-end in LTO may reason that such library functions have no references, and it may internalize them, then manipulate their API or even delete them. Afterwards, it may emit a call to them, again producing undefined symbol references. This patch resolves the former issue by ensuring that the middle end emits no new references to symbols defined in bitcode, and it resolves the latter issue by ensuring that extracted bitcode for libfuncs is considered external, since new calls may be emitted to them at any time. The new semantics are not yet established for MachO LLD, which does not yet appear to have any special handling for libcalls in LTO. It also does not yet support distributed ThinLTO; doing so would require additional (de)serialization work. This is the patch referenced in @ilovepi's and my talk at the last LLVM devmeeting: "LT-Uh-Oh" Gemini 3.1 was used in porting to COFF and WASM LLDs.
Author
Parents
Loading