Explicitly mark b functions as nounwind
authorBrenden Blanco <bblanco@gmail.com>
Thu, 9 Feb 2017 18:53:29 +0000 (10:53 -0800)
committerBrenden Blanco <bblanco@gmail.com>
Thu, 9 Feb 2017 18:59:50 +0000 (10:59 -0800)
Without marking as nounwind, recent llvm started generating .eh_frame
section, which is invalid for bpf target jit.

Signed-off-by: Brenden Blanco <bblanco@gmail.com>
src/cc/frontends/b/codegen_llvm.cc

index 410bfd6..62ed389 100644 (file)
@@ -1163,6 +1163,8 @@ StatusTuple CodegenLLVM::visit_func_decl_stmt_node(FuncDeclStmtNode *n) {
   Function *fn = mod_->getFunction(n->id_->name_);
   if (fn) return mkstatus_(n, "Function %s already defined", n->id_->c_str());
   fn = Function::Create(fn_type, GlobalValue::ExternalLinkage, n->id_->name_, mod_);
+  fn->setCallingConv(CallingConv::C);
+  fn->addFnAttr(Attribute::NoUnwind);
   fn->setSection(BPF_FN_PREFIX + n->id_->name_);
 
   BasicBlock *label_entry = BasicBlock::Create(ctx(), "entry", fn);