[PATCH v5 2/2] testsuite: bpf: Add initial BPF runtime tests
Piyush Raj
piyushraj92739@gmail.com
Mon Mar 30 18:01:56 GMT 2026
Hi Jose,
Thanks for pushing this :)
Regards,
Piyush
On Mon, 30 Mar 2026 at 22:15, Jose E. Marchesi <jemarch@gnu.org> 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" } */
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/bpf/attachments/20260330/f15fb38c/attachment-0001.htm>
More information about the bpf
mailing list