<div dir="ltr">Hi<div><br></div><div>I reviewed some questions about instrumentation and try to learn from them to do a simple instrumentation by writing a new pass.</div><div><br></div><div>For example, for every basicblock, I would like to assign a block id and call the printf or my own print function to handle the block id. Suppose the block id is a string. </div><div><br></div><div>My code is below:</div><div>





<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">  </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(175,215,255)">int</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> inst_blocks = </span><span class="gmail-s4" style="font-variant-ligatures:no-common-ligatures;color:rgb(215,175,95)">0</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">;</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">  </span>LLVMContext& Ctx = M.getContext();</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">  </span>Constant* c = M.getOrInsertFunction(</span><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(135,175,215)">"printf"</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">,Type::getVoidTy(Ctx), Type::getInt32Ty(Ctx), </span><span class="gmail-s5" style="font-variant-ligatures:no-common-ligatures;color:rgb(135,175,215)">NULL</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">);</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">  </span>Function* myprint = cast<Function>(c);</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">  </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(175,215,255)">for</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> (</span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(175,215,255)">auto</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> &F : M)</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span></span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(175,215,255)">for</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> (</span><span class="gmail-s3" style="font-variant-ligatures:no-common-ligatures;color:rgb(175,215,255)">auto</span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"> &BB : F) {</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s6" style="font-variant-ligatures:no-common-ligatures;color:rgb(40,254,20)"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">inst_blocks++;</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s6" style="font-variant-ligatures:no-common-ligatures;color:rgb(40,254,20)"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">BasicBlock::iterator IP = BB.getFirstInsertionPt();</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s6" style="font-variant-ligatures:no-common-ligatures;color:rgb(40,254,20)"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">IRBuilder<> IRB(&(*IP));</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s6" style="font-variant-ligatures:no-common-ligatures;color:rgb(40,254,20)"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">Value * ID = IRB.CreateGlobalStringPtr(StringRef(std::to_string(inst_blocks)));</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s6" style="font-variant-ligatures:no-common-ligatures;color:rgb(40,254,20)"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">Value* args[] = {ID};</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s6" style="font-variant-ligatures:no-common-ligatures;color:rgb(40,254,20)"><span class="gmail-Apple-converted-space">        </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures">IRB.CreateCall(myprint, args);</span></p>
<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(208,208,208);background-color:rgb(28,28,28)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures;color:rgb(108,108,108)"><span class="gmail-Apple-converted-space"> </span></span><span class="gmail-s2" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space">    </span>}                                                                                                                </span></p><br class="gmail-Apple-interchange-newline">I compiled the pass successfully and then try to use -Xclang -load -Xclang pass.so to compile my target C code. However, I come across the below exception</div><div><br></div><div>





<p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:12px;line-height:normal;font-family:"Andale Mono";color:rgb(40,254,20);background-color:rgba(0,0,0,0.9)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">clang-4.0: /home/jmh/Downloads/llvm-4/llvm/lib/IR/Instructions.cpp:263: void llvm::CallInst::init(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, const llvm::Twine&): Assertion `(i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"' failed.</span></p></div><div><br></div><div>I even do not know how to debug. Do I miss anything important? Thank you so much for your help</div><div><br></div><div>Regards</div><div>Muhui</div></div>