BPF programs include arch-specific headers, which use address space
qualifiers for percpu variables via __seg_gs / __seg_fs, however those
are meaningless for BPF compiler and will raise a warning

Fix this by redefining __seg_gs and __seg_fs to a no-op attribute

Additionally, enable ms-extensions, as generated vmlinux.h uses these
for structure layout inheritance, an acceptable practice in upstream

https://virtuozzo.atlassian.net/browse/VSTOR-127585
feature: fix kselftests

Signed-off-by: Eva Kurchatova <[email protected]>
---
 samples/bpf/Makefile | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 7afe040cf43b..fa92d2494b96 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -363,9 +363,11 @@ CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))
 
 $(obj)/xdp_router_ipv4.bpf.o: $(obj)/xdp_sample.bpf.o
 
+# Generated vmlinux.h uses ms-extensions to inherit struct layout
 $(obj)/%.bpf.o: $(src)/%.bpf.c $(obj)/vmlinux.h $(src)/xdp_sample.bpf.h 
$(src)/xdp_sample_shared.h
        @echo "  CLANG-BPF " $@
        $(Q)$(CLANG) -g -O2 --target=bpf -D__TARGET_ARCH_$(SRCARCH) \
+               -fms-extensions -Wno-microsoft-anon-tag \
                -Wno-compare-distinct-pointer-types -I$(srctree)/include \
                -I$(srctree)/samples/bpf -I$(srctree)/tools/include \
                -I$(LIBBPF_INCLUDE) $(CLANG_SYS_INCLUDES) \
@@ -396,11 +398,13 @@ $(BPF_SKELS_LINKED): $(BPF_OBJS_LINKED) $(BPFTOOL)
 # with native target, e.g., x64, arm64, etc. 'opt' does bpf CORE IR builtin
 # processing (llvm12) and IR optimizations. 'llvm-dis' converts
 # 'opt' output to IR, and finally 'llc' generates bpf byte code.
+# Additionally, __seg_gs and __seg_fs are ignored in BPF code
 $(obj)/%.o: $(src)/%.c
        @echo "  CLANG-bpf " $@
        $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(BPF_EXTRA_CFLAGS) \
                -I$(obj) -I$(srctree)/tools/testing/selftests/bpf/ \
                -I$(LIBBPF_INCLUDE) \
+               -U__seg_gs -D__seg_gs= -U__seg_fs -D__seg_fs= \
                -D__KERNEL__ -D__BPF_TRACING__ -Wno-unused-value 
-Wno-pointer-sign \
                -D__TARGET_ARCH_$(SRCARCH) -Wno-compare-distinct-pointer-types \
                -Wno-gnu-variable-sized-type-not-at-end \
-- 
2.54.0

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to