Hi Jose, Thanks for pushing this :)
Regards, Piyush On Mon, 30 Mar 2026 at 22:15, Jose E. Marchesi <[email protected]> wrote: > > Hello Piyush. > > Now that the bpf-vmtest dejagnu board is in the dejagnu git repository > (even if in a feature branch) I have finally pushed this after a little > adjustment in the commit message. > > Thanks! > > > This patch adds runtime tests for BPF target. > > These tests are based on existing compile-time tests and depends on > > bpf.exp baseboard > > To run the testsuite: > > > > make check-gcc RUNTESTFLAGS="--target_board=bpf bpf-torture.exp > KERNEL_VERSION=6.15 LOG_LEVEL=ERROR" > > > > Options: > > KERNEL_VERSION (default: 6.15) > > LOG_LEVEL (default: ERROR) > > Note: VMTEST_DIR must be set in the environment. > > > > See the bpf-vmtest-tool README for details. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/bpf/torture/bpf-torture.exp: New testsuite. > > * gcc.target/bpf/torture/invalid-memory-access.c: New test. > > * gcc.target/bpf/torture/memcpy.c: New test. > > * gcc.target/bpf/torture/memmove.c: New test. > > * gcc.target/bpf/torture/memset.c: New test. > > * gcc.target/bpf/torture/naked.c: New test. > > * gcc.target/bpf/torture/nop.c: New test. > > * gcc.target/bpf/torture/trace_openat.c: New test. > > --- > > .../gcc.target/bpf/torture/bpf-torture.exp | 46 +++++++++++++++++++ > > .../bpf/torture/invalid-memory-access.c | 19 ++++++++ > > gcc/testsuite/gcc.target/bpf/torture/memcpy.c | 5 ++ > > .../gcc.target/bpf/torture/memmove.c | 5 ++ > > gcc/testsuite/gcc.target/bpf/torture/memset.c | 5 ++ > > gcc/testsuite/gcc.target/bpf/torture/naked.c | 3 ++ > > gcc/testsuite/gcc.target/bpf/torture/nop.c | 4 ++ > > .../gcc.target/bpf/torture/trace_openat.c | 24 ++++++++++ > > 8 files changed, 111 insertions(+) > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/bpf-torture.exp > > create mode 100644 > gcc/testsuite/gcc.target/bpf/torture/invalid-memory-access.c > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/memcpy.c > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/memmove.c > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/memset.c > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/naked.c > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/nop.c > > create mode 100644 gcc/testsuite/gcc.target/bpf/torture/trace_openat.c > > > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/bpf-torture.exp > b/gcc/testsuite/gcc.target/bpf/torture/bpf-torture.exp > > new file mode 100644 > > index 00000000000..ad5fa58fdc3 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/bpf-torture.exp > > @@ -0,0 +1,46 @@ > > +# Copyright (C) 2019-2025 Free Software Foundation, Inc. > > + > > +# This program is free software; you can redistribute it and/or modify > > +# it under the terms of the GNU General Public License as published by > > +# the Free Software Foundation; either version 3 of the License, or > > +# (at your option) any later version. > > +# > > +# This program is distributed in the hope that it will be useful, > > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > +# GNU General Public License for more details. > > +# > > +# You should have received a copy of the GNU General Public License > > +# along with GCC; see the file COPYING3. If not see > > +# <http://www.gnu.org/licenses/>. > > + > > +# GCC testsuite that uses the `dg.exp' driver. > > + > > +# Exit immediately if this isn't an eBPF target. > > +if ![istarget bpf-*-*] then { > > + return > > +} > > + > > +# Default values for torture testing > > +set TORTURE_OPTIONS [ list {-O1 -g} {-O2 -g} {-O3 -g} ] > > +set LTO_TORTURE_OPTIONS "" > > + > > +# Load support procs. > > +load_lib gcc-dg.exp > > + > > +# If a testcase doesn't have special options, use these. > > +global DEFAULT_CFLAGS > > +if ![info exists DEFAULT_CFLAGS] then { > > + set DEFAULT_CFLAGS "-Wall -Werror" > > +} > > + > > +# Initialize `dg'. > > +dg-init > > + > > + > > +# Main loop. > > +gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ > > + "" $DEFAULT_CFLAGS > > + > > +# All done. > > +dg-finish > > diff --git > a/gcc/testsuite/gcc.target/bpf/torture/invalid-memory-access.c > b/gcc/testsuite/gcc.target/bpf/torture/invalid-memory-access.c > > new file mode 100644 > > index 00000000000..f50adc86e72 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/invalid-memory-access.c > > @@ -0,0 +1,19 @@ > > +// { dg-do run { xfail *-*-* } } > > +// { dg-options -Wall } > > + > > +#include "vmlinux.h" > > +#include <bpf/bpf_helpers.h> > > +#include <bpf/bpf_tracing.h> > > + > > +char LICENSE[] SEC("license") = "GPL"; > > + > > +SEC("tracepoint/syscalls/sys_enter_openat") > > +int bpf_prog(struct trace_event_raw_sys_enter *ctx) { > > + int arr[4] = {1, 2, 3, 4}; > > + > > + // Invalid memory access: out-of-bounds > > + int val = arr[5]; // This causes the verifier to fail > > + > > + return val; > > +} > > + > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/memcpy.c > b/gcc/testsuite/gcc.target/bpf/torture/memcpy.c > > new file mode 100644 > > index 00000000000..b58c8729439 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/memcpy.c > > @@ -0,0 +1,5 @@ > > +/* Ensure memcpy is expanded inline rather than emitting a libcall. */ > > + > > +/* { dg-do run } */ > > + > > +#include "../memcpy-1.c" > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/memmove.c > b/gcc/testsuite/gcc.target/bpf/torture/memmove.c > > new file mode 100644 > > index 00000000000..2ac9abcf9ef > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/memmove.c > > @@ -0,0 +1,5 @@ > > +/* Ensure memmove is expanded inline rather than emitting a libcall. */ > > + > > +/* { dg-do run } */ > > + > > +#include "../memmove-1.c" > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/memset.c > b/gcc/testsuite/gcc.target/bpf/torture/memset.c > > new file mode 100644 > > index 00000000000..041cb457827 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/memset.c > > @@ -0,0 +1,5 @@ > > +/* Ensure memset is expanded inline rather than emitting a libcall. */ > > + > > +/* { dg-do run } */ > > + > > +#include "../memset-1.c" > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/naked.c > b/gcc/testsuite/gcc.target/bpf/torture/naked.c > > new file mode 100644 > > index 00000000000..802201d6e24 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/naked.c > > @@ -0,0 +1,3 @@ > > +/* { dg-do run } */ > > + > > +#include "../naked-2.c" > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/nop.c > b/gcc/testsuite/gcc.target/bpf/torture/nop.c > > new file mode 100644 > > index 00000000000..3e4f81b6754 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/nop.c > > @@ -0,0 +1,4 @@ > > +/* { dg-do run } */ > > +/* { dg-options "--patchable-function-entry=2,1 -masm=normal" } */ > > + > > +#include "../nop-1.c" > > diff --git a/gcc/testsuite/gcc.target/bpf/torture/trace_openat.c > b/gcc/testsuite/gcc.target/bpf/torture/trace_openat.c > > new file mode 100644 > > index 00000000000..ced1892f6ef > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/bpf/torture/trace_openat.c > > @@ -0,0 +1,24 @@ > > +// { dg-do run } > > +// { dg-options -Wall } > > + > > +#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 successfully loaded" } */ >
