In previous discussion ([1]), it is agreed that we should introduce cpu version 4 (llvm flag -mcpu=v4) which contains some instructions which can simplify code, make code easier to understand, fix the existing problem, or simply for feature completeness. More specifically, the following new insns are proposed: . sign extended load . sign extended mov . bswap . signed div/mod . ja with 32-bit offset This patch set added kernel support for insns proposed in [1] except BPF_ST which already has full kernel support. Beside the above proposed insns, LLVM will generate BPF_ST insn as well under -mcpu=v4. The llvm patch ([2]) has been merged into llvm-project 'main' branch. The patchset implements interpreter, jit and verifier support for these new insns. For this patch set, I tested cpu v2/v3/v4 and the selftests are all passed. I also tested selftests introduced in this patch set with additional changes beside normal jit testing (bpf_jit_enable = 1 and bpf_jit_harden = 0) - bpf_jit_enable = 0 - bpf_jit_enable = 1 and bpf_jit_harden = 1 and both testing passed. [1] https://lore.kernel.org/bpf/4bfe98be-5333-1c7e-2f6d-42486c8ec039@xxxxxxxx/ [2] https://reviews.llvm.org/D144829 Changelogs: v4 -> v5: . for v4, patch 8/17 missed in mailing list and patchwork, so resend. . rebase on top of master v3 -> v4: . some minor asm syntax adjustment based on llvm change. . add clang version and target arch guard for new tests so they can still compile with old llvm compilers. . some changes to the bpf doc. v2 -> v3: . add missed disasm change from v2. . handle signed load of ctx fields properly. . fix some interpreter sdiv/smod error when bpf_jit_enable = 0. . fix some verifier range bounding errors. . add more C tests. RFCv1 -> v2: . add more verifier supports for signed extend load and mov insns. . rename some insn names to be more consistent with intel practice. . add cpuv4 test runner for test progs. . add more unit and C tests. . add documentation. Yonghong Song (17): bpf: Support new sign-extension load insns bpf: Support new sign-extension mov insns bpf: Handle sign-extenstin ctx member accesses bpf: Support new unconditional bswap instruction bpf: Support new signed div/mod instructions. bpf: Fix jit blinding with new sdiv/smov insns bpf: Support new 32bit offset jmp instruction bpf: Add kernel/bpftool asm support for new instructions selftests/bpf: Fix a test_verifier failure selftests/bpf: Add a cpuv4 test runner for cpu=v4 testing selftests/bpf: Add unit tests for new sign-extension load insns selftests/bpf: Add unit tests for new sign-extension mov insns selftests/bpf: Add unit tests for new bswap insns selftests/bpf: Add unit tests for new sdiv/smod insns selftests/bpf: Add unit tests for new gotol insn selftests/bpf: Test ldsx with more complex cases docs/bpf: Add documentation for new instructions Documentation/bpf/bpf_design_QA.rst | 5 - .../bpf/standardization/instruction-set.rst | 115 ++- arch/x86/net/bpf_jit_comp.c | 141 +++- include/linux/filter.h | 17 +- include/uapi/linux/bpf.h | 1 + kernel/bpf/core.c | 196 ++++- kernel/bpf/disasm.c | 57 +- kernel/bpf/verifier.c | 348 ++++++-- tools/include/uapi/linux/bpf.h | 1 + tools/testing/selftests/bpf/.gitignore | 2 + tools/testing/selftests/bpf/Makefile | 28 +- .../selftests/bpf/bpf_testmod/bpf_testmod.c | 9 +- .../selftests/bpf/prog_tests/test_ldsx_insn.c | 139 ++++ .../selftests/bpf/prog_tests/verifier.c | 10 + .../selftests/bpf/progs/test_ldsx_insn.c | 118 +++ .../selftests/bpf/progs/verifier_bswap.c | 59 ++ .../selftests/bpf/progs/verifier_gotol.c | 44 + .../selftests/bpf/progs/verifier_ldsx.c | 131 +++ .../selftests/bpf/progs/verifier_movsx.c | 213 +++++ .../selftests/bpf/progs/verifier_sdiv.c | 781 ++++++++++++++++++ .../selftests/bpf/verifier/basic_instr.c | 6 +- 21 files changed, 2251 insertions(+), 170 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/test_ldsx_insn.c create mode 100644 tools/testing/selftests/bpf/progs/test_ldsx_insn.c create mode 100644 tools/testing/selftests/bpf/progs/verifier_bswap.c create mode 100644 tools/testing/selftests/bpf/progs/verifier_gotol.c create mode 100644 tools/testing/selftests/bpf/progs/verifier_ldsx.c create mode 100644 tools/testing/selftests/bpf/progs/verifier_movsx.c create mode 100644 tools/testing/selftests/bpf/progs/verifier_sdiv.c -- 2.34.1