On Thu, Aug 8, 2024 at 6:05 PM Eduard Zingerman <eddyz87@xxxxxxxxx> wrote: > > Allow to verify jit behaviour by writing tests as below: > > SEC("tp") > __jit_x86("endbr64") > __jit_x86("movabs $0x.*,%r9") > __jit_x86("add %gs:0x.*,%r9") > __jit_x86("mov $0x1,%edi") > __jit_x86("mov %rdi,-0x8(%r9)") > __jit_x86("mov -0x8(%r9),%rdi") > __jit_x86("xor %eax,%eax") > __jit_x86("lock xchg %rax,-0x8(%r9)") > __jit_x86("lock xadd %rax,-0x8(%r9)") > __naked void stack_access_insns(void) > { > asm volatile (... ::: __clobber_all); > } > > Use regular expressions by default, use basic regular expressions > class in order to avoid escaping symbols like $(), often used in AT&T > disassembly syntax. > > Signed-off-by: Eduard Zingerman <eddyz87@xxxxxxxxx> > --- > tools/testing/selftests/bpf/progs/bpf_misc.h | 2 + > tools/testing/selftests/bpf/test_loader.c | 156 +++++++++++++------ > 2 files changed, 112 insertions(+), 46 deletions(-) > [...] > @@ -817,6 +866,21 @@ void run_subtest(struct test_loader *tester, > validate_msgs(tester->log_buf, &subspec->expect_xlated, emit_xlated); > } > > + if (arch > 0 && subspec->jited[arch].cnt) { > + err = get_jited_program_text(bpf_program__fd(tprog), > + tester->log_buf, tester->log_buf_sz); > + if (err == -ENOTSUP) { nit: let's use EOPNOTSUPP, ENOTSUP is internal Linux error > + printf("%s:SKIP: jited programs disassembly is not supported,\n", __func__); > + printf("%s:SKIP: tests are built w/o LLVM development libs\n", __func__); > + test__skip(); > + goto tobj_cleanup; > + } > + if (!ASSERT_EQ(err, 0, "get_jited_program_text")) > + goto tobj_cleanup; > + emit_jited(tester->log_buf, false /*force*/); > + validate_msgs(tester->log_buf, &subspec->jited[arch], emit_jited); > + } > + > if (should_do_test_run(spec, subspec)) { > /* For some reason test_verifier executes programs > * with all capabilities restored. Do the same here. > -- > 2.45.2 >