File bcc-compilation-error-with-latest-llvm.patch of Package bcc.13112
From 11d3c773a87167a5ce57839e083d14c85cd4f525 Mon Sep 17 00:00:00 2001
From: Yonghong Song <yhs@fb.com>
Date: Tue, 3 Apr 2018 10:57:19 -0700
Subject: [PATCH] fix compilation error with latest llvm
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The latest llvm (7.0) changed the interface for
IRBuilder/CreateMemCpy as in https://reviews.llvm.org/rL328317.
This caused the compilation error like below:
[ 30%] Built target bcc-loader-static
/home/yhs/work/bcc/src/cc/frontends/b/codegen_llvm.cc: In member function ‘virtual ebpf::StatusTuple
ebpf::cc::CodegenLLVM::visit_string_expr_node(ebpf::cc::StringExprNode*)’:
/home/yhs/work/bcc/src/cc/frontends/b/codegen_llvm.cc:428:52: error: no matching function for call t$
‘llvm::IRBuilder<>::CreateMemCpy(llvm::Value*&, llvm::Value*&, std::basic_string<char>::size_type, $
nt)’
B.CreateMemCpy(ptr, global, n->val_.size() + 1, 1);
^
/home/yhs/work/bcc/src/cc/frontends/b/codegen_llvm.cc:428:52: note: candidates are:
In file included from /home/yhs/work/bcc/src/cc/frontends/b/codegen_llvm.cc:31:0:
/home/yhs/work/llvm/build/install/include/llvm/IR/IRBuilder.h:422:13: note: llvm::CallInst* llvm::IR$
uilderBase::CreateMemCpy(llvm::Value*, unsigned int, llvm::Value*, unsigned int, uint64_t, bool, llv$
::MDNode*, llvm::MDNode*, llvm::MDNode*, llvm::MDNode*)
CallInst *CreateMemCpy(Value *Dst, unsigned DstAlign, Value *Src,
^
Now the interfaces between 7.0 and 6.0 CreateMemCpy
are completely disjoint and we are not able to find a common
interface suitable for both.
This patch fixed the issue by separating two cases based on
llvm compiler version.
Signed-off-by: Yonghong Song <yhs@fb.com>
---
src/cc/frontends/b/codegen_llvm.cc | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/cc/frontends/b/codegen_llvm.cc b/src/cc/frontends/b/codegen_llvm.cc
index 854fe780..54645846 100644
--- a/src/cc/frontends/b/codegen_llvm.cc
+++ b/src/cc/frontends/b/codegen_llvm.cc
@@ -425,7 +425,11 @@ StatusTuple CodegenLLVM::visit_string_expr_node(StringExprNode *n) {
Value *global = B.CreateGlobalString(n->val_);
Value *ptr = make_alloca(resolve_entry_stack(), B.getInt8Ty(), "",
B.getInt64(n->val_.size() + 1));
+#if LLVM_MAJOR_VERSION >= 7
+ B.CreateMemCpy(ptr, 1, global, 1, n->val_.size() + 1);
+#else
B.CreateMemCpy(ptr, global, n->val_.size() + 1, 1);
+#endif
expr_ = ptr;
return StatusTuple(0);
--
2.16.4