Hi Piyush,

On 7/17/25 05:13, Piyush Raj wrote:
> This patch adds new DejaGnu target board for BPF that enables execution 
> testing
> of BPF programs using the `bpf-vmtest-tool` script in the contrib directory.

Sorry for the delay. I am hoping Thomas or Jose can chime in who know a bit more
about dejagnu integration than I do.

FWIW I think the approach is quite sensible.  A couple of little notes below.

> 
> Signed-off-by: Piyush Raj <piyushraj92...@gmail.com>
> ---
>  gcc/Makefile.in                               |  1 +
>  gcc/testsuite/boards/bpf.exp                  | 63 +++++++++++++++++++
>  .../gcc.target/bpf/bpf-testool-demo.c         | 25 ++++++++
>  3 files changed, 89 insertions(+)
>  create mode 100644 gcc/testsuite/boards/bpf.exp
>  create mode 100644 gcc/testsuite/gcc.target/bpf/bpf-testool-demo.c
> 
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 56fa5ac25ff..e3c4e6e14a3 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -4562,6 +4562,7 @@ site.exp: ./config.status Makefile
>       fi
>       echo "set tmpdir $(objdir)/testsuite" >> ./site.tmp
>       @echo "set srcdir \"\$${srcdir}/testsuite\"" >> ./site.tmp
> +     @echo "lappend boards_dir \"\$${srcdir}/boards\"" >> ./site.tmp
>       @if [ "X$(ALT_CC_UNDER_TEST)" != "X" ] ; then \
>         echo "set ALT_CC_UNDER_TEST \"$(ALT_CC_UNDER_TEST)\"" >> ./site.tmp; \
>       else true; \
> diff --git a/gcc/testsuite/boards/bpf.exp b/gcc/testsuite/boards/bpf.exp
> new file mode 100644
> index 00000000000..ed99d4a0b83
> --- /dev/null
> +++ b/gcc/testsuite/boards/bpf.exp
> @@ -0,0 +1,63 @@
> +load_lib "standard.exp"
> +set_board_info target_install {bpf-unknown-none}
> +set_board_info generic_name bpf
> +set_board_info mathlib ""
> +unset_board_info isremote
> +set_board_info isremote "0"
> +
> +set BPF_GCC_FLAGS "-D__TARGET_ARCH_x86_64 -gbtf -std=gnu17 
> -I/usr/local/include -I/usr/include"
> +proc bpf_compile {source destfile type options} {
> +    global BPF_GCC_FLAGS
> +
> +    if { $type == "executable" } {
> +        # We don't actually link now; we just need the object file
> +        set type "object"
> +        lappend options "additional_flags=$BPF_GCC_FLAGS"
> +        puts $options
> +        return [default_target_compile $source $destfile $type $options]
> +    }
> +    return [default_target_compile $source $destfile $type $options]
> +}
> +
> +proc bpf_load {dest prog args} {
> +    global srcdir
> +    # Construct command
> +    set python3 [find_python3]
> +    if {$python3 == ""} {
> +        error "Cannot find python3 in $PATH"
> +    }
> +    set script_path "$srcdir/../../contrib/bpf-vmtest-tool/main.py"
> +    set bpf_object $prog
> +
> +    set args [list $script_path -k 6.15 --bpf-obj $prog]

Probably we will want to be able to pass the kernel version as an arg,
even if just from RUNTESTFLAGS to override the default.

(I think having a default of e.g. 6.15 is perfectly sensible though) 

> +    set status [remote_exec $dest $python3 $args]
> +    set exit_code [lindex $status 0]
> +    set output [lindex $status 1]
> +
> +    if { $exit_code < 0 } {
> +        verbose -log "Couldn't execute $prog: $output"
> +        return "unresolved"
> +    }
> +
> +    verbose -log "Executed $prog, exit_code $exit_code" 
> +    if {$output ne ""} {
> +        verbose -log -- $output 2
> +    }
> +
> +    if { $exit_code == 0 } {
> +        return [list "pass" $output]
> +    } else {
> +        return [list "fail" $output]
> +    }
> +}
> +
> +
> +proc find_python3 {} {
> +    foreach candidate {python3 python} {
> +        set path [which $candidate]
> +        if {$path != ""} {
> +            return $path
> +        }
> +    }
> +    return ""
> +}
> \ No newline at end of file
> diff --git a/gcc/testsuite/gcc.target/bpf/bpf-testool-demo.c 
> b/gcc/testsuite/gcc.target/bpf/bpf-testool-demo.c
> new file mode 100644
> index 00000000000..8d3d0c56909
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/bpf/bpf-testool-demo.c
> @@ -0,0 +1,25 @@
> +// { dg-do run  }
> +// how to do tourture testing ?

I *think* you may just need to set ADDITIONAL_TORTURE_OPTIONS before loading 
gcc-dg.exp
in bpf.exp.  Looking in testsuite/lib/gcc-dg.exp, looks like gcc-dg-runtest may 
handle
the rest?

I have also seen some other targets running tests with multiple sets of options 
with a
simple loop in e.g. riscv.exp like

foreach opt {
  {-O2}
  {-O3}
  {-Ofast}
  ...
} {
  dg-runtest ...
}

> +/* { dg-options "-O2" }*/
> +> +#include "vmlinux.h"
> +#include <bpf/bpf_helpers.h>
> +#include <bpf/bpf_tracing.h>
> +#include <bpf/bpf_core_read.h>
> +
> +char LICENSE[] SEC("license") = "GPL";
> +
> +int example_pid = 0;
> +
> +SEC("tracepoint/syscalls/sys_enter_openat")
> +int handle_openat(struct trace_event_raw_sys_enter *ctx)
> +{
> +     int pid = bpf_get_current_pid_tgid() >> 32;
> +     char filename[256]; // filename buffer
> +     bpf_probe_read_user(&filename, sizeof(filename), (void *)ctx->args[1]);
> +     bpf_printk("sys_enter_openat() called from PID %d for file: %s\n", pid, 
> filename);
> +
> +     return 0;
> +}
> +
> +/* { dg-output "BPF programs succesfully loaded" } */

Reply via email to