llvm-project
00dd9b86 - BPF: Stop lowering unwinding through nonexistent unwinder calls (#239899)

Commit
7 days ago
BPF: Stop lowering unwinding through nonexistent unwinder calls (#239899) BPF borrowed the DWARF EH pipeline in an unsound way. DwarfEHPrepare turned resume into a call of _Unwind_Resume, which will never be linked in. BPFUnwindLower later replaced it, and calls of _Unwind_RaiseException, by matching callee names after register allocation. This fixes the pass pipeline relying on these transient calls to phantom functions. Instead add an invokable llvm.bpf.unwind.exit intrinsic, similar to wasm's throw intrinsics. BPFUnwindPrepare replaces resume with it so no impossible call to _Unwind_Resume reaches selection. The intrinsic selects to a pseudo which BPFUnwindLower turns into either unwind_exit or a branch to the landing pad when invoked. The pseudo clobbers nothing, so register allocation can be more aggressive than when the function looked like an ordinary call. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Author
Parents
Loading