mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
Merge branch 'tools-build-bpf-append-extra_cflags-and-host_extracflags'
Leo Yan says:
====================
tools build: bpf: Append EXTRA_CFLAGS and HOST_EXTRACFLAGS
Append EXTRA_CFLAGS and HOST_EXTRACFLAGS to the BPF build.
This mitigates an issue introduced in GCC 15, where a {0} initializer
does not guarantee zeroing the entire union [1].
The common changes under tools to support EXTRA_CFLAGS and
HOST_EXTRACFLAGS are sent separately [2]. As suggested, BPF patches
would be picked up via the bpf tree, so this series only includes BPF
related changes.
Verification on bpf-ci (with tools changes [2]:
https://github.com/kernel-patches/bpf/actions/runs/26815163486
[1] https://gcc.gnu.org/gcc-15/changes.html
[2] https://lore.kernel.org/all/20260602-tools_build_fix_zero_init-v7-0-631baf679fe7@arm.com/
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
Changes in v2:
- Used strscpy() instead in patch 06 (Ihor).
- Added prefix "bpf-next" in subject (Alexei).
- Added patch 01 to pass host cflags to bootstrap libbpf.
- Added patch 08 to avoid static LLVM linking for cross build.
- Link to v1: https://lore.kernel.org/r/20260323-tools_build_fix_zero_init_bpf_only-v1-0-d1cfad2f4cd1@arm.com
====================
Link: https://patch.msgid.link/20260602-tools_build_fix_zero_init_bpf_only-v2-0-c76e5250ea1c@arm.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
commit
cf750df538
|
|
@ -11,6 +11,7 @@ INSTALL ?= install
|
|||
CFLAGS += -Wall -O2
|
||||
CFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi \
|
||||
-I$(srctree)/tools/include
|
||||
CFLAGS += $(EXTRA_CFLAGS)
|
||||
|
||||
# This will work when bpf is built in tools env. where srctree
|
||||
# isn't set and when invoked from selftests build, where srctree
|
||||
|
|
|
|||
|
|
@ -47,7 +47,8 @@ $(LIBBPF_INTERNAL_HDRS): $(LIBBPF_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_HDRS_
|
|||
$(LIBBPF_BOOTSTRAP): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_BOOTSTRAP_OUTPUT)
|
||||
$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) \
|
||||
DESTDIR=$(LIBBPF_BOOTSTRAP_DESTDIR:/=) prefix= \
|
||||
ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" $@ install_headers
|
||||
ARCH= CROSS_COMPILE= CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \
|
||||
CFLAGS="$(LIBBPF_BOOTSTRAP_CFLAGS)" EXTRA_CFLAGS= $@ install_headers
|
||||
|
||||
$(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR)
|
||||
$(call QUIET_INSTALL, $@)
|
||||
|
|
@ -81,6 +82,13 @@ CFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \
|
|||
ifneq ($(BPFTOOL_VERSION),)
|
||||
CFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"'
|
||||
endif
|
||||
|
||||
# This must be done before appending EXTRA_CFLAGS to CFLAGS to avoid
|
||||
# including flags that are not applicable to the host compiler.
|
||||
HOST_CFLAGS := $(subst -I$(LIBBPF_INCLUDE),-I$(LIBBPF_BOOTSTRAP_INCLUDE),\
|
||||
$(subst $(CLANG_CROSS_FLAGS),,$(CFLAGS)))
|
||||
HOST_CFLAGS += $(HOST_EXTRACFLAGS)
|
||||
|
||||
ifneq ($(EXTRA_CFLAGS),)
|
||||
CFLAGS += $(EXTRA_CFLAGS)
|
||||
endif
|
||||
|
|
@ -88,10 +96,11 @@ ifneq ($(EXTRA_LDFLAGS),)
|
|||
LDFLAGS += $(EXTRA_LDFLAGS)
|
||||
endif
|
||||
|
||||
HOST_CFLAGS := $(subst -I$(LIBBPF_INCLUDE),-I$(LIBBPF_BOOTSTRAP_INCLUDE),\
|
||||
$(subst $(CLANG_CROSS_FLAGS),,$(CFLAGS)))
|
||||
HOST_LDFLAGS := $(LDFLAGS)
|
||||
|
||||
# Remove warnings for libbpf bootstrap build
|
||||
LIBBPF_BOOTSTRAP_CFLAGS := $(filter-out -W -Wall -Wextra -Wformat -Wformat-signedness,$(HOST_CFLAGS))
|
||||
|
||||
INSTALL ?= install
|
||||
RM ?= rm -f
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,14 @@ man_dir_SQ = '$(subst ','\'',$(man_dir))'
|
|||
export man_dir man_dir_SQ INSTALL
|
||||
export DESTDIR DESTDIR_SQ
|
||||
|
||||
# Defer assigning EXTRA_CFLAGS to CFLAGS until after including
|
||||
# tools/scripts/Makefile.include, as it may add flags to EXTRA_CFLAGS.
|
||||
ifdef EXTRA_CFLAGS
|
||||
CFLAGS :=
|
||||
else
|
||||
CFLAGS := -g -O2
|
||||
endif
|
||||
|
||||
include $(srctree)/tools/scripts/Makefile.include
|
||||
|
||||
# copy a bit from Linux kbuild
|
||||
|
|
@ -70,13 +78,6 @@ LIB_TARGET = libbpf.a libbpf.so.$(LIBBPF_VERSION)
|
|||
LIB_FILE = libbpf.a libbpf.so*
|
||||
PC_FILE = libbpf.pc
|
||||
|
||||
# Set compile option CFLAGS
|
||||
ifdef EXTRA_CFLAGS
|
||||
CFLAGS := $(EXTRA_CFLAGS)
|
||||
else
|
||||
CFLAGS := -g -O2
|
||||
endif
|
||||
|
||||
# Append required CFLAGS
|
||||
override CFLAGS += -std=gnu89
|
||||
override CFLAGS += $(EXTRA_WARNINGS) -Wno-switch-enum
|
||||
|
|
@ -84,7 +85,7 @@ override CFLAGS += -Werror -Wall
|
|||
override CFLAGS += $(INCLUDES)
|
||||
override CFLAGS += -fvisibility=hidden
|
||||
override CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
|
||||
override CFLAGS += $(CLANG_CROSS_FLAGS)
|
||||
override CFLAGS += $(EXTRA_CFLAGS)
|
||||
|
||||
# flags specific for shared library
|
||||
SHLIB_FLAGS := -DSHARED -fPIC
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ srctree := $(patsubst %/,%,$(dir $(srctree)))
|
|||
srctree := $(patsubst %/,%,$(dir $(srctree)))
|
||||
endif
|
||||
|
||||
CFLAGS += -g $(OPT_FLAGS) -rdynamic -std=gnu11 \
|
||||
COMMON_CFLAGS = -g $(OPT_FLAGS) -rdynamic -std=gnu11 \
|
||||
-Wall -Werror -fno-omit-frame-pointer \
|
||||
-Wno-unused-but-set-variable \
|
||||
$(GENFLAGS) $(SAN_CFLAGS) $(LIBELF_CFLAGS) \
|
||||
|
|
@ -70,7 +70,7 @@ LDLIBS += $(LIBELF_LIBS) -lz -lrt -lpthread
|
|||
PCAP_CFLAGS := $(shell $(PKG_CONFIG) --cflags libpcap 2>/dev/null && echo "-DTRAFFIC_MONITOR=1")
|
||||
PCAP_LIBS := $(shell $(PKG_CONFIG) --libs libpcap 2>/dev/null)
|
||||
LDLIBS += $(PCAP_LIBS)
|
||||
CFLAGS += $(PCAP_CFLAGS)
|
||||
CFLAGS += $(COMMON_CFLAGS) $(PCAP_CFLAGS)
|
||||
|
||||
# Some utility functions use LLVM libraries
|
||||
jit_disasm_helpers.c-CFLAGS = $(LLVM_CFLAGS)
|
||||
|
|
@ -194,8 +194,15 @@ ifeq ($(feature-llvm),1)
|
|||
LLVM_CONFIG_LIB_COMPONENTS := mcdisassembler all-targets
|
||||
# both llvm-config and lib.mk add -D_GNU_SOURCE, which ends up as conflict
|
||||
LLVM_CFLAGS += $(filter-out -D_GNU_SOURCE,$(shell $(LLVM_CONFIG) --cflags))
|
||||
# Prefer linking statically if it's available, otherwise fallback to shared
|
||||
ifeq ($(shell $(LLVM_CONFIG) --link-static --libs >/dev/null 2>&1 && echo static),static)
|
||||
# Cross compilation must use dynamic linking to avoid unresolved library
|
||||
# dependencies. For native build, prefer linking statically if it's
|
||||
# available, otherwise fallback to shared.
|
||||
ifneq ($(ARCH), $(HOSTARCH))
|
||||
LLVM_LINK_STATIC :=
|
||||
else
|
||||
LLVM_LINK_STATIC := $(shell $(LLVM_CONFIG) --link-static --libs >/dev/null 2>&1 && echo y)
|
||||
endif
|
||||
ifeq ($(LLVM_LINK_STATIC),y)
|
||||
LLVM_LDLIBS += $(shell $(LLVM_CONFIG) --link-static --libs $(LLVM_CONFIG_LIB_COMPONENTS))
|
||||
LLVM_LDLIBS += $(filter-out -lxml2,$(shell $(LLVM_CONFIG) --link-static --system-libs $(LLVM_CONFIG_LIB_COMPONENTS)))
|
||||
LLVM_LDLIBS += -lstdc++
|
||||
|
|
@ -267,7 +274,7 @@ endif
|
|||
$(OUTPUT)/liburandom_read.so: urandom_read_lib1.c urandom_read_lib2.c liburandom_read.map
|
||||
$(call msg,LIB,,$@)
|
||||
$(Q)$(CLANG) $(CLANG_TARGET_ARCH) \
|
||||
$(filter-out -static,$(CFLAGS) $(LDFLAGS)) \
|
||||
$(filter-out -static,$(COMMON_CFLAGS) $(LDFLAGS)) \
|
||||
$(filter %.c,$^) $(filter-out -static,$(LDLIBS)) \
|
||||
-Wno-unused-command-line-argument \
|
||||
-fuse-ld=$(LLD) -Wl,-znoseparate-code -Wl,--build-id=sha1 \
|
||||
|
|
@ -277,7 +284,7 @@ $(OUTPUT)/liburandom_read.so: urandom_read_lib1.c urandom_read_lib2.c liburandom
|
|||
$(OUTPUT)/urandom_read: urandom_read.c urandom_read_aux.c $(OUTPUT)/liburandom_read.so
|
||||
$(call msg,BINARY,,$@)
|
||||
$(Q)$(CLANG) $(CLANG_TARGET_ARCH) \
|
||||
$(filter-out -static,$(CFLAGS) $(LDFLAGS)) $(filter %.c,$^) \
|
||||
$(filter-out -static,$(COMMON_CFLAGS) $(LDFLAGS)) $(filter %.c,$^) \
|
||||
-Wno-unused-command-line-argument \
|
||||
-lurandom_read $(filter-out -static,$(LDLIBS)) -L$(OUTPUT) \
|
||||
-fuse-ld=$(LLD) -Wl,-znoseparate-code -Wl,--build-id=sha1 \
|
||||
|
|
|
|||
|
|
@ -317,6 +317,7 @@ static void verif_btf_log_subtest(bool bad_btf)
|
|||
res = load_btf(&opts, true);
|
||||
ASSERT_EQ(res, -ENOSPC, "half_log_fd");
|
||||
ASSERT_EQ(strlen(logs.buf), 24, "log_fixed_25");
|
||||
strscpy(op_name, "log_fixed", sizeof(op_name));
|
||||
ASSERT_STRNEQ(logs.buf, logs.reference, 24, op_name);
|
||||
|
||||
/* validate rolling verifier log logic: try all variations of log buf
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user