Message ID | 20201006043427.1891742-1-yhs@fb.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9618bde489b2d23779b1e2d04c10983da21f3818 |
Headers | show |
Series | [bpf-next,v2,1/2] samples/bpf: change Makefile to cope with latest llvm | expand |
Hello: This series was applied to bpf/bpf-next.git (refs/heads/master): On Mon, 5 Oct 2020 21:34:26 -0700 you wrote: > With latest llvm trunk, bpf programs under samples/bpf > directory, if using CORE, may experience the following > errors: > > LLVM ERROR: Cannot select: intrinsic %llvm.preserve.struct.access.index > PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace. > Stack dump: > 0. Program arguments: llc -march=bpf -filetype=obj -o samples/bpf/test_probe_write_user_kern.o > 1. Running pass 'Function Pass Manager' on module '<stdin>'. > 2. Running pass 'BPF DAG->DAG Pattern Instruction Selection' on function '@bpf_prog1' > #0 0x000000000183c26c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) > (/data/users/yhs/work/llvm-project/llvm/build.cur/install/bin/llc+0x183c26c) > ... > #7 0x00000000017c375e (/data/users/yhs/work/llvm-project/llvm/build.cur/install/bin/llc+0x17c375e) > #8 0x00000000016a75c5 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) > (/data/users/yhs/work/llvm-project/llvm/build.cur/install/bin/llc+0x16a75c5) > #9 0x00000000016ab4f8 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, > unsigned int) (/data/users/yhs/work/llvm-project/llvm/build.cur/install/bin/llc+0x16ab4f8) > ... > Aborted (core dumped) | llc -march=bpf -filetype=obj -o samples/bpf/test_probe_write_user_kern.o > > [...] Here is the summary with links: - [bpf-next,v2,1/2] samples/bpf: change Makefile to cope with latest llvm https://git.kernel.org/bpf/bpf-next/c/9618bde489b2 - [bpf-next,v2,2/2] samples/bpf: fix a compilation error with fallthrough marking https://git.kernel.org/bpf/bpf-next/c/544d6adf3c3d You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile index 4f1ed0e3cf9f..e29b1e89dd3e 100644 --- a/samples/bpf/Makefile +++ b/samples/bpf/Makefile @@ -211,6 +211,8 @@ TPROGLDLIBS_xsk_fwd += -pthread # make M=samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang LLC ?= llc CLANG ?= clang +OPT ?= opt +LLVM_DIS ?= llvm-dis LLVM_OBJCOPY ?= llvm-objcopy BTF_PAHOLE ?= pahole @@ -303,6 +305,11 @@ $(obj)/hbm_edt_kern.o: $(src)/hbm.h $(src)/hbm_kern.h # asm/sysreg.h - inline assembly used by it is incompatible with llvm. # But, there is no easy way to fix it, so just exclude it since it is # useless for BPF samples. +# below we use long chain of commands, clang | opt | llvm-dis | llc, +# to generate final object file. 'clang' compiles the source into IR +# 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. $(obj)/%.o: $(src)/%.c @echo " CLANG-bpf " $@ $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(BPF_EXTRA_CFLAGS) \ @@ -314,7 +321,9 @@ $(obj)/%.o: $(src)/%.c -Wno-address-of-packed-member -Wno-tautological-compare \ -Wno-unknown-warning-option $(CLANG_ARCH_ARGS) \ -I$(srctree)/samples/bpf/ -include asm_goto_workaround.h \ - -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ + -O2 -emit-llvm -Xclang -disable-llvm-passes -c $< -o - | \ + $(OPT) -O2 -mtriple=bpf-pc-linux | $(LLVM_DIS) | \ + $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ ifeq ($(DWARF2BTF),y) $(BTF_PAHOLE) -J $@ endif