Thank you for your help<br>I found the problem, <br>as hook() is a no paramter function,so <br><br>                            for(Function::arg_iterator i = hook->arg_begin(), e = hook->arg_end(); i != e; ++i)<br>                            {<br>
                                Args.push_back(i); /////////////Wong       <br>                            }<br>
<br>we can add a call by  <br>Instruction *newInst = CallInst::Create(hook, "");<br>BB->getInstList().insert((Instruction*)BI, newInst); <br><br><br>If you want to insert the function with a paramter, you should add a real value to Args<br>
<br><div class="gmail_quote">在 2011年11月20日 下午3:07,Duncan Sands <span dir="ltr"><<a href="mailto:baldrick@free.fr">baldrick@free.fr</a>></span>写道:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi 赵夏, please don't send emails only to me: CC the mailing<br>
list too.  That way others can join in and the discussion is<br>
archived for the benefit of people with similar questions in<br>
the future.<br>
<div class="im"><br>
On 20/11/11 01:29, 赵夏 wrote:<br>
> Thank you for your reply,<br>
> But after I remove the second Type::getVoidTy(M.getContext()),Another problem<br>
> occured<br>
><br>
> opt: Value.cpp:175: void llvm::Value::setName(const llvm::Twine&): Assertion<br>
> `!getType()->isVoidTy() && "Cannot assign a name to void values!"' failed.<br>
<br>
</div>Probably you are trying to give a name to the call to your function, i.e. to<br>
the value returned by it.  Since your function doesn't return a value (since it<br>
"returns" void), giving the returned value a name makes no sense, thus this<br>
assertion.<br>
<div class="im"><br>
> 0 opt 0x000000000082f5cf<br>
> 1 opt 0x000000000083181a<br>
> 2 libpthread.so.0 0x00000033f460f4c0<br>
> 3 libc.so.6 0x00000033f42329a5 gsignal + 53<br>
> 4 libc.so.6 0x00000033f4234185 abort + 373<br>
> 5 libc.so.6 0x00000033f422b935 __assert_fail + 245<br>
> 6 opt 0x00000000007d866b<br>
> 7 bishe_insert.so 0x00007f94c62a2b3f<br>
> 8 opt 0x00000000007c47d7 llvm::MPPassManager::runOnModule(llvm::Module&) + 503<br>
> 9 opt 0x00000000007c4957 llvm::PassManagerImpl::run(llvm::Module&) + 167<br>
> 10 opt 0x00000000004a43be main + 2734<br>
> 11 libc.so.6 0x00000033f421ec5d __libc_start_main + 253<br>
> 12 opt 0x0000000000499d19<br>
> Stack dump:<br>
> 0. Program arguments: opt -load<br>
> /home/kain/Documents/bishe/llvm-2.8/Release+Asserts/lib/bishe_insert.so<br>
> -bishe_insert<br>
> 1. Running pass 'test function exist' on module '<stdin>'.<br>
> Aborted (core dumped)<br>
><br>
><br>
> And If I want to insert a function such as void hook(int ),the first problem<br>
> occured<br>
<br>
</div>I'm not sure what you mean by "the first problem".  If your function takes<br>
an integer parameter, you need to pass the appropriate integer type when<br>
you create the function.<br>
<br>
Ciao, Duncan.<br>
<br>
><br>
><br>
><br>
> 2011/11/19 Duncan Sands <<a href="mailto:baldrick@free.fr">baldrick@free.fr</a> <mailto:<a href="mailto:baldrick@free.fr">baldrick@free.fr</a>>><br>
<div class="im">><br>
>     Hi 赵夏,<br>
><br>
>      > hookFunc = M.getOrInsertFunction("hook",<br>
>      > Type::getVoidTy(M.getContext()), Type::getVoidTy(M.getContext()), (Type*)0);<br>
><br>
>     try removing the second Type::getVoidTy. Your function doesn't take any<br>
>     parameters, so you should simply pass an empty list of parameter types.<br>
>     Unlike in C++, a function foo(void) taking no parameters shouldn't be<br>
>     declared as taking one parameter of void type, it takes no parameters.<br>
><br>
>     Ciao, Duncan.<br>
>     _______________________________________________<br>
>     LLVM Developers mailing list<br>
</div>>     <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <mailto:<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>> <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>

>     <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
><br>
><br>
<br>
</blockquote></div><br>