* [PATCH v2 bpf-next 0/3] Fixes for bpftool-prog-profile @ 2020-03-11 22:18 Song Liu 2020-03-11 22:18 ` [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang Song Liu ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Song Liu @ 2020-03-11 22:18 UTC (permalink / raw) To: netdev, bpf Cc: john.fastabend, quentin, kernel-team, ast, daniel, arnaldo.melo, jolsa, Song Liu 1. Fix build for older clang; 2. Fix skeleton's dependency on libbpf; 3. Add files to .gitignore. Changes v1 => v2: 1. Rewrite patch 1 with real feature detection (Quentin, Alexei). 2. Add files to .gitignore (Andrii). Song Liu (3): bpftool: only build bpftool-prog-profile if supported by clang bpftool: skeleton should depend on libbpf bpftool: add _bpftool and profiler.skel.h to .gitignore tools/bpf/bpftool/.gitignore | 2 ++ tools/bpf/bpftool/Makefile | 17 ++++++++++++----- tools/bpf/bpftool/prog.c | 2 ++ tools/build/feature/Makefile | 9 ++++++++- tools/build/feature/test-clang-bpf-global-var.c | 4 ++++ 5 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 tools/build/feature/test-clang-bpf-global-var.c -- 2.17.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang 2020-03-11 22:18 [PATCH v2 bpf-next 0/3] Fixes for bpftool-prog-profile Song Liu @ 2020-03-11 22:18 ` Song Liu 2020-03-12 11:46 ` Quentin Monnet 2020-03-11 22:18 ` [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf Song Liu 2020-03-11 22:18 ` [PATCH v2 bpf-next 3/3] bpftool: add _bpftool and profiler.skel.h to .gitignore Song Liu 2 siblings, 1 reply; 8+ messages in thread From: Song Liu @ 2020-03-11 22:18 UTC (permalink / raw) To: netdev, bpf Cc: john.fastabend, quentin, kernel-team, ast, daniel, arnaldo.melo, jolsa, Song Liu bpftoo-prog-profile requires clang to generate BTF for global variables. When compared with older clang, skip this command. This is achieved by adding a new feature, clang-bpf-global-var, to tools/build/feature. Signed-off-by: Song Liu <songliubraving@fb.com> --- tools/bpf/bpftool/Makefile | 15 +++++++++++---- tools/bpf/bpftool/prog.c | 2 ++ tools/build/feature/Makefile | 9 ++++++++- tools/build/feature/test-clang-bpf-global-var.c | 4 ++++ 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 tools/build/feature/test-clang-bpf-global-var.c diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile index 20a90d8450f8..0d9ede8e7340 100644 --- a/tools/bpf/bpftool/Makefile +++ b/tools/bpf/bpftool/Makefile @@ -62,8 +62,9 @@ RM ?= rm -f CLANG ?= clang FEATURE_USER = .bpftool -FEATURE_TESTS = libbfd disassembler-four-args reallocarray zlib -FEATURE_DISPLAY = libbfd disassembler-four-args zlib +FEATURE_TESTS = libbfd disassembler-four-args reallocarray zlib \ + clang-bpf-global-var +FEATURE_DISPLAY = libbfd disassembler-four-args zlib clang-bpf-global-var check_feat := 1 NON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall @@ -113,6 +114,12 @@ endif OBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o _OBJS = $(filter-out $(OUTPUT)prog.o,$(OBJS)) $(OUTPUT)_prog.o +ifeq ($(feature-clang-bpf-global-var),1) + __OBJS = $(OBJS) +else + __OBJS = $(_OBJS) +endif + $(OUTPUT)_prog.o: prog.c $(QUIET_CC)$(COMPILE.c) -MMD -DBPFTOOL_WITHOUT_SKELETONS -o $@ $< @@ -133,8 +140,8 @@ $(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c $(OUTPUT)feature.o: | zdep -$(OUTPUT)bpftool: $(OBJS) $(LIBBPF) - $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) +$(OUTPUT)bpftool: $(__OBJS) $(LIBBPF) + $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(__OBJS) $(LIBS) $(OUTPUT)%.o: %.c $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $< diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 576ddd82bc96..03b1979dfad8 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -1545,6 +1545,8 @@ static int do_loadall(int argc, char **argv) static int do_profile(int argc, char **argv) { + fprintf(stdout, "bpftool prog profile command is not supported.\n" + "Please build bpftool with clang >= 10.0.0\n"); return 0; } diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 7ac0d8088565..ab8e89a7009c 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -67,7 +67,8 @@ FILES= \ test-llvm.bin \ test-llvm-version.bin \ test-libaio.bin \ - test-libzstd.bin + test-libzstd.bin \ + test-clang-bpf-global-var.bin FILES := $(addprefix $(OUTPUT),$(FILES)) @@ -75,6 +76,7 @@ CC ?= $(CROSS_COMPILE)gcc CXX ?= $(CROSS_COMPILE)g++ PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config LLVM_CONFIG ?= llvm-config +CLANG ?= clang all: $(FILES) @@ -321,6 +323,11 @@ $(OUTPUT)test-libaio.bin: $(OUTPUT)test-libzstd.bin: $(BUILD) -lzstd +$(OUTPUT)test-clang-bpf-global-var.bin: + $(CLANG) -S -g -target bpf -o - $(patsubst %.bin,%.c,$(@F)) | \ + grep BTF_KIND_VAR + + ############################### clean: diff --git a/tools/build/feature/test-clang-bpf-global-var.c b/tools/build/feature/test-clang-bpf-global-var.c new file mode 100644 index 000000000000..221f1481d52e --- /dev/null +++ b/tools/build/feature/test-clang-bpf-global-var.c @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2020 Facebook + +volatile int global_value_for_test = 1; -- 2.17.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang 2020-03-11 22:18 ` [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang Song Liu @ 2020-03-12 11:46 ` Quentin Monnet 0 siblings, 0 replies; 8+ messages in thread From: Quentin Monnet @ 2020-03-12 11:46 UTC (permalink / raw) To: Song Liu, netdev, bpf Cc: john.fastabend, kernel-team, ast, daniel, arnaldo.melo, jolsa 2020-03-11 15:18 UTC-0700 ~ Song Liu <songliubraving@fb.com> > bpftoo-prog-profile requires clang to generate BTF for global variables. Typo: bpftool (missing "l") > When compared with older clang, skip this command. This is achieved by > adding a new feature, clang-bpf-global-var, to tools/build/feature. > > Signed-off-by: Song Liu <songliubraving@fb.com> Works great when clang is either too old or missing, thanks! > diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c > index 576ddd82bc96..03b1979dfad8 100644 > --- a/tools/bpf/bpftool/prog.c > +++ b/tools/bpf/bpftool/prog.c > @@ -1545,6 +1545,8 @@ static int do_loadall(int argc, char **argv) > > static int do_profile(int argc, char **argv) > { > + fprintf(stdout, "bpftool prog profile command is not supported.\n" > + "Please build bpftool with clang >= 10.0.0\n"); Nit: Can we use p_err() instead of fprintf(), and a single-line error message please? To remain consistent and work with JSON output. Thanks, Quentin ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf 2020-03-11 22:18 [PATCH v2 bpf-next 0/3] Fixes for bpftool-prog-profile Song Liu 2020-03-11 22:18 ` [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang Song Liu @ 2020-03-11 22:18 ` Song Liu 2020-03-12 11:46 ` Quentin Monnet 2020-03-11 22:18 ` [PATCH v2 bpf-next 3/3] bpftool: add _bpftool and profiler.skel.h to .gitignore Song Liu 2 siblings, 1 reply; 8+ messages in thread From: Song Liu @ 2020-03-11 22:18 UTC (permalink / raw) To: netdev, bpf Cc: john.fastabend, quentin, kernel-team, ast, daniel, arnaldo.melo, jolsa, Song Liu Add the dependency to libbpf, to fix build errors like: In file included from skeleton/profiler.bpf.c:5: .../bpf_helpers.h:5:10: fatal error: 'bpf_helper_defs.h' file not found #include "bpf_helper_defs.h" ^~~~~~~~~~~~~~~~~~~ 1 error generated. make: *** [skeleton/profiler.bpf.o] Error 1 make: *** Waiting for unfinished jobs.... Fixes: 47c09d6a9f67 ("bpftool: Introduce "prog profile" command") Acked-by: John Fastabend <john.fastabend@gmail.com> Signed-off-by: Song Liu <songliubraving@fb.com> --- tools/bpf/bpftool/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile index 0d9ede8e7340..45a37e2fb6e6 100644 --- a/tools/bpf/bpftool/Makefile +++ b/tools/bpf/bpftool/Makefile @@ -126,7 +126,7 @@ $(OUTPUT)_prog.o: prog.c $(OUTPUT)_bpftool: $(_OBJS) $(LIBBPF) $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(_OBJS) $(LIBS) -skeleton/profiler.bpf.o: skeleton/profiler.bpf.c +skeleton/profiler.bpf.o: skeleton/profiler.bpf.c $(LIBBPF) $(QUIET_CLANG)$(CLANG) -I$(srctree)/tools/lib -g -O2 -target bpf -c $< -o $@ profiler.skel.h: $(OUTPUT)_bpftool skeleton/profiler.bpf.o -- 2.17.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf 2020-03-11 22:18 ` [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf Song Liu @ 2020-03-12 11:46 ` Quentin Monnet 2020-03-12 12:34 ` Quentin Monnet 0 siblings, 1 reply; 8+ messages in thread From: Quentin Monnet @ 2020-03-12 11:46 UTC (permalink / raw) To: Song Liu, netdev, bpf Cc: john.fastabend, kernel-team, ast, daniel, arnaldo.melo, jolsa 2020-03-11 15:18 UTC-0700 ~ Song Liu <songliubraving@fb.com> > Add the dependency to libbpf, to fix build errors like: > > In file included from skeleton/profiler.bpf.c:5: > .../bpf_helpers.h:5:10: fatal error: 'bpf_helper_defs.h' file not found > #include "bpf_helper_defs.h" > ^~~~~~~~~~~~~~~~~~~ > 1 error generated. > make: *** [skeleton/profiler.bpf.o] Error 1 > make: *** Waiting for unfinished jobs.... > > Fixes: 47c09d6a9f67 ("bpftool: Introduce "prog profile" command") > Acked-by: John Fastabend <john.fastabend@gmail.com> > Signed-off-by: Song Liu <songliubraving@fb.com> Reviewed-by: Quentin Monnet <quentin@isovalent.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf 2020-03-12 11:46 ` Quentin Monnet @ 2020-03-12 12:34 ` Quentin Monnet 0 siblings, 0 replies; 8+ messages in thread From: Quentin Monnet @ 2020-03-12 12:34 UTC (permalink / raw) To: Song Liu, netdev, bpf Cc: john.fastabend, kernel-team, ast, daniel, arnaldo.melo, jolsa 2020-03-12 11:46 UTC+0000 ~ Quentin Monnet <quentin@isovalent.com> > 2020-03-11 15:18 UTC-0700 ~ Song Liu <songliubraving@fb.com> >> Add the dependency to libbpf, to fix build errors like: >> >> In file included from skeleton/profiler.bpf.c:5: >> .../bpf_helpers.h:5:10: fatal error: 'bpf_helper_defs.h' file not found >> #include "bpf_helper_defs.h" >> ^~~~~~~~~~~~~~~~~~~ >> 1 error generated. >> make: *** [skeleton/profiler.bpf.o] Error 1 >> make: *** Waiting for unfinished jobs.... >> >> Fixes: 47c09d6a9f67 ("bpftool: Introduce "prog profile" command") >> Acked-by: John Fastabend <john.fastabend@gmail.com> >> Signed-off-by: Song Liu <songliubraving@fb.com> > > Reviewed-by: Quentin Monnet <quentin@isovalent.com> > Sorry, I gave the tag too fast. This one is not solved on my machine, I still observe the same error when building out of tree, e.g. if I compile with e.g. "make O=/tmp/foo". This is because make does not know where to find bpf_helper_defs.h in that case. I could solve it with the additional diff: ---- diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile index 45a37e2fb6e6..8b765993598b 100644 --- a/tools/bpf/bpftool/Makefile +++ b/tools/bpf/bpftool/Makefile @@ -127,7 +127,7 @@ $(OUTPUT)_bpftool: $(_OBJS) $(LIBBPF) $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(_OBJS) $(LIBS) skeleton/profiler.bpf.o: skeleton/profiler.bpf.c $(LIBBPF) - $(QUIET_CLANG)$(CLANG) -I$(srctree)/tools/lib -g -O2 -target bpf -c $< -o $@ + $(QUIET_CLANG)$(CLANG) -I$(srctree)/tools/lib -I$(LIBBPF_PATH) -g -O2 -target bpf -c $< -o $@ profiler.skel.h: $(OUTPUT)_bpftool skeleton/profiler.bpf.o $(QUIET_GEN)$(OUTPUT)./_bpftool gen skeleton skeleton/profiler.bpf.o > $@ ---- tools/testing/selftests/bpf/test_bpftool_build.sh seems happy on my setup with the above. Best regards, Quentin ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 bpf-next 3/3] bpftool: add _bpftool and profiler.skel.h to .gitignore 2020-03-11 22:18 [PATCH v2 bpf-next 0/3] Fixes for bpftool-prog-profile Song Liu 2020-03-11 22:18 ` [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang Song Liu 2020-03-11 22:18 ` [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf Song Liu @ 2020-03-11 22:18 ` Song Liu 2020-03-12 11:47 ` Quentin Monnet 2 siblings, 1 reply; 8+ messages in thread From: Song Liu @ 2020-03-11 22:18 UTC (permalink / raw) To: netdev, bpf Cc: john.fastabend, quentin, kernel-team, ast, daniel, arnaldo.melo, jolsa, Song Liu These files are generated, so ignore them. Signed-off-by: Song Liu <songliubraving@fb.com> --- tools/bpf/bpftool/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/bpf/bpftool/.gitignore b/tools/bpf/bpftool/.gitignore index b13926432b84..8d6e8901ed2b 100644 --- a/tools/bpf/bpftool/.gitignore +++ b/tools/bpf/bpftool/.gitignore @@ -1,7 +1,9 @@ *.d +/_bpftool /bpftool bpftool*.8 bpf-helpers.* FEATURE-DUMP.bpftool feature libbpf +profiler.skel.h -- 2.17.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 bpf-next 3/3] bpftool: add _bpftool and profiler.skel.h to .gitignore 2020-03-11 22:18 ` [PATCH v2 bpf-next 3/3] bpftool: add _bpftool and profiler.skel.h to .gitignore Song Liu @ 2020-03-12 11:47 ` Quentin Monnet 0 siblings, 0 replies; 8+ messages in thread From: Quentin Monnet @ 2020-03-12 11:47 UTC (permalink / raw) To: Song Liu, netdev, bpf Cc: john.fastabend, kernel-team, ast, daniel, arnaldo.melo, jolsa 2020-03-11 15:18 UTC-0700 ~ Song Liu <songliubraving@fb.com> > These files are generated, so ignore them. > > Signed-off-by: Song Liu <songliubraving@fb.com> Reviewed-by: Quentin Monnet <quentin@isovalent.com> ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-03-12 12:34 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-03-11 22:18 [PATCH v2 bpf-next 0/3] Fixes for bpftool-prog-profile Song Liu 2020-03-11 22:18 ` [PATCH v2 bpf-next 1/3] bpftool: only build bpftool-prog-profile if supported by clang Song Liu 2020-03-12 11:46 ` Quentin Monnet 2020-03-11 22:18 ` [PATCH v2 bpf-next 2/3] bpftool: skeleton should depend on libbpf Song Liu 2020-03-12 11:46 ` Quentin Monnet 2020-03-12 12:34 ` Quentin Monnet 2020-03-11 22:18 ` [PATCH v2 bpf-next 3/3] bpftool: add _bpftool and profiler.skel.h to .gitignore Song Liu 2020-03-12 11:47 ` Quentin Monnet
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).