diff options
| author | Yonghong Song <yonghong.song@linux.dev> | 2026-08-18 22:52:49 -0700 |
|---|---|---|
| committer | Eduard Zingerman <eddyz87@gmail.com> | 2026-08-21 10:49:17 -0700 |
| commit | cf5b96d9554815780f864d6f0014ac384e9be59c (patch) | |
| tree | b7f8d92c85f44ae6242551786fc9421e12b9ac47 /scripts/Makefile.thinlto | |
| parent | da13c047cda6ef1bbc9355adb040d5b4eecea710 (diff) | |
| download | linux-next-cf5b96d9554815780f864d6f0014ac384e9be59c.tar.gz linux-next-cf5b96d9554815780f864d6f0014ac384e9be59c.zip | |
bpf: Add helpers to describe the R0: R2 return register pair
LLVM 23 added support for returning a value in two registers for an
__int128, or a struct/union whose size is greater than 8 but not more than
16 bytes: such a value comes back in the R0:R2 register pair, with R2
holding the upper half. See LLVM patches [1] and [2].
Later patches teach the JIT, live register analysis and the verifier itself
about that convention. They need to answer the same question: does this
subprogram return its value in a register pair? Add bpf_ret_reg_pair() up
front so it can be used in subsequent patches. It is answered from a
per-subprogram flag that bpf_compute_subprog_ret_regs() derives once from
the BTF prototype.
jit_requested only says that the JIT is enabled, not that it succeeded:
bpf_fixup_call_args() falls back to the interpreter when bpf_jit_subprogs()
fails with anything other than -EFAULT. So jit_required is still set once
the pair is modelled, which turns that fallback into a load failure rather
than a silent divergence from what was verified.
[1] https://github.com/llvm/llvm-project/pull/190894
[2] https://github.com/llvm/llvm-project/pull/206876
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://patch.msgid.link/20260819055249.3295283-1-yonghong.song@linux.dev
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
