[LLVMdev] How to detect all free() calls

Xi Wang xi.wang at gmail.com
Sun Mar 10 21:24:27 PDT 2013


Try isFreeCall() defined in "llvm/Analysis/MemoryBuiltins.h".

On Mon, Mar 11, 2013 at 12:17 AM, Jane <270611649 at qq.com> wrote:
>
> Hi,
>     I'm trying to write a pass to detect all free()/delete() call
> instructions in LLVM IR.The method is as follows.
>     First I find Call Instructions: CallInst *CI=dyn_cast<CallInst>(&*i);
>     then see if the Function name matches:
>                         name=CI->getCalledFunction()->getName();
> if(name=="_ZdlPv"||name=="_ZdaPv"||name=="free")
>     It worked but when  something like this occurs
>     %call2 = call i32 bitcast (i32 (...)* @free to i32 (i8*)*)(i8* %call1)
> nounwind, !dbg !16
>     It seems like a indirect function call and I don't know how to detect
> free() in such situation.
>     By the way, is there any way that is more convenient to detect all
> free()/delete() call instructions in a module except by matching the
> function name?
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



More information about the llvm-dev mailing list