bpf-headers: switch to mips64 for 64 bit targets
authorFelix Fietkau <nbd@nbd.name>
Thu, 18 Nov 2021 21:25:47 +0000 (22:25 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 19 Nov 2021 22:51:20 +0000 (23:51 +0100)
BTF pointer data has a different size on 32 vs 64 bit targets,
and while the generated eBPF code works, the BTF data fails to validate
on mismatch

Signed-off-by: Felix Fietkau <nbd@nbd.name>
include/bpf.mk
package/kernel/bpf-headers/Makefile

index 61e5b534ab2ba538357ee3db95344d4282422da1..411763c4a20f3860f93b98ca67537b1b17a150f5 100644 (file)
@@ -27,7 +27,7 @@ LLVM_OPT:=$(LLVM_PATH)/opt$(LLVM_VER)
 LLVM_STRIP:=$(LLVM_PATH)/llvm-strip$(LLVM_VER)
 
 BPF_KARCH:=mips
-BPF_ARCH:=mips$(if $(CONFIG_BIG_ENDIAN),,el)
+BPF_ARCH:=mips$(if $(CONFIG_ARCH_64BIT),64)$(if $(CONFIG_BIG_ENDIAN),,el)
 BPF_TARGET:=bpf$(if $(CONFIG_BIG_ENDIAN),eb,el)
 
 BPF_HEADERS_DIR:=$(STAGING_DIR)/bpf-headers
@@ -49,7 +49,7 @@ BPF_KERNEL_INCLUDE := \
 
 BPF_CFLAGS := \
        $(BPF_KERNEL_INCLUDE) -I$(PKG_BUILD_DIR) \
-       -D__KERNEL__ -D__BPF_TRACING__ \
+       -D__KERNEL__ -D__BPF_TRACING__ -DCONFIG_GENERIC_CSUM \
        -D__TARGET_ARCH_${BPF_KARCH} \
        -m$(if $(CONFIG_BIG_ENDIAN),big,little)-endian \
        -fno-stack-protector -Wall \
index df24bfa13f74702bd798c6b0b52e086a0ecb73cd..f3c058400716cb895bc8d314b9e4bb0626912eb3 100644 (file)
@@ -63,9 +63,15 @@ endef
 
 BPF_DOC = $(PKG_BUILD_DIR)/scripts/bpf_helpers_doc.py
 
+define Build/Configure/64
+       echo 'CONFIG_CPU_MIPS64_R2=y' >> $(PKG_BUILD_DIR)/.config
+       echo 'CONFIG_64BIT=y' >> $(PKG_BUILD_DIR)/.config
+endef
+
 define Build/Configure
        grep -vE 'CONFIG_(CPU_.*ENDIAN|HZ)' $(PKG_BUILD_DIR)/arch/mips/configs/generic_defconfig > $(PKG_BUILD_DIR)/.config
        echo 'CONFIG_CPU_$(if $(CONFIG_BIG_ENDIAN),BIG,LITTLE)_ENDIAN=y' >> $(PKG_BUILD_DIR)/.config
+       $(if $(CONFIG_ARCH_64BIT),$(Build/Configure/64))
        grep CONFIG_HZ $(REAL_LINUX_DIR)/.config >> $(PKG_BUILD_DIR)/.config
        yes '' | $(KERNEL_MAKE) oldconfig
        grep 'CONFIG_HZ=' $(REAL_LINUX_DIR)/.config | \