selftests/bpf: Add ptr32 test.
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
diff --git a/tools/testing/selftests/bpf/prog_tests/ptr32.c b/tools/testing/selftests/bpf/prog_tests/ptr32.c
new file mode 100644
index 0000000..c08cdf5
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/ptr32.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
+
+#include <test_progs.h>
+#include <network_helpers.h>
+
+#include "ptr32.skel.h"
+
+static void test_ptr32_basic(void)
+{
+ LIBBPF_OPTS(bpf_test_run_opts, opts,
+ .data_in = &pkt_v4,
+ .data_size_in = sizeof(pkt_v4),
+ .repeat = 1,
+ );
+ struct ptr32 *skel;
+ int ret;
+
+ skel = ptr32__open_and_load();
+ if (!ASSERT_OK_PTR(skel, "rbtree__open_and_load"))
+ return;
+
+ ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.ptr32_basic), &opts);
+ ASSERT_OK(ret, "ret");
+ ASSERT_OK(opts.retval, "retval");
+
+ ptr32__destroy(skel);
+}
+
+void test_ptr32_success(void)
+{
+ if (test__start_subtest("ptr32_basic"))
+ test_ptr32_basic();
+}
+
diff --git a/tools/testing/selftests/bpf/progs/ptr32.c b/tools/testing/selftests/bpf/progs/ptr32.c
new file mode 100644
index 0000000..80622f7
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/ptr32.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
+#include <vmlinux.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_core_read.h>
+#include "bpf_experimental.h"
+
+#define _32 __attribute__((address_space(271))) __attribute__((btf_type_tag("ptr32")))
+
+struct list_node {
+ struct list_node _32* next;
+ struct list_node _32* _32* pprev;
+ int sz;
+};
+
+void _32* bpf_alloc32(__u32 size) __ksym;
+
+void set(struct list_node _32* node)
+{
+ node->next = bpf_alloc32(sizeof(*node));
+ node->sz = sizeof(*node);
+ *node->pprev = node;
+ node += 1ull<<20;
+ node->sz = sizeof(*node);
+}
+
+SEC("tc")
+int ptr32_basic(void *ctx)
+{
+ set(bpf_alloc32(128));
+ return 0;
+}
+
+char _license[] SEC("license") = "GPL";