tc-testing: fix build of eBPF programs
rely on uAPI headers in the current kernel tree, rather than requiring the correct version installed on the test system. While at it, group all sections in a single binary and test the 'section' parameter. Reported-by: Lucas Bates <lucasb@mojatatu.com> Signed-off-by: Davide Caratti <dcaratti@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
4a84810eaa
commit
cf5eafbfa5
29
tools/testing/selftests/tc-testing/bpf/Makefile
Normal file
29
tools/testing/selftests/tc-testing/bpf/Makefile
Normal file
@@ -0,0 +1,29 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
APIDIR := ../../../../include/uapi
|
||||
TEST_GEN_FILES = action.o
|
||||
|
||||
top_srcdir = ../../../../..
|
||||
include ../../lib.mk
|
||||
|
||||
CLANG ?= clang
|
||||
LLC ?= llc
|
||||
PROBE := $(shell $(LLC) -march=bpf -mcpu=probe -filetype=null /dev/null 2>&1)
|
||||
|
||||
ifeq ($(PROBE),)
|
||||
CPU ?= probe
|
||||
else
|
||||
CPU ?= generic
|
||||
endif
|
||||
|
||||
CLANG_SYS_INCLUDES := $(shell $(CLANG) -v -E - </dev/null 2>&1 \
|
||||
| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')
|
||||
|
||||
CLANG_FLAGS = -I. -I$(APIDIR) \
|
||||
$(CLANG_SYS_INCLUDES) \
|
||||
-Wno-compare-distinct-pointer-types
|
||||
|
||||
$(OUTPUT)/%.o: %.c
|
||||
$(CLANG) $(CLANG_FLAGS) \
|
||||
-O2 -target bpf -emit-llvm -c $< -o - | \
|
||||
$(LLC) -march=bpf -mcpu=$(CPU) $(LLC_FLAGS) -filetype=obj -o $@
|
23
tools/testing/selftests/tc-testing/bpf/action.c
Normal file
23
tools/testing/selftests/tc-testing/bpf/action.c
Normal file
@@ -0,0 +1,23 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0
|
||||
* Copyright (c) 2018 Davide Caratti, Red Hat inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License as published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/bpf.h>
|
||||
#include <linux/pkt_cls.h>
|
||||
|
||||
__attribute__((section("action-ok"),used)) int action_ok(struct __sk_buff *s)
|
||||
{
|
||||
return TC_ACT_OK;
|
||||
}
|
||||
|
||||
__attribute__((section("action-ko"),used)) int action_ko(struct __sk_buff *s)
|
||||
{
|
||||
s->data = 0x0;
|
||||
return TC_ACT_OK;
|
||||
}
|
||||
|
||||
char _license[] __attribute__((section("license"),used)) = "GPL";
|
Reference in New Issue
Block a user