[llvm-dev] Finding callees of a function

mayuyu.io via llvm-dev llvm-dev at lists.llvm.org
Wed Jan 15 02:02:58 PST 2020


——-If you need to handle indirect calls

Zhang

> 在 2020年1月15日,17:58,Tim Northover via llvm-dev <llvm-dev at lists.llvm.org> 写道:
> 
> Hi Marc,
> 
>> On Wed, 15 Jan 2020 at 09:52, Marc via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>  bool Foo:runOnModule(Module &M) {
>>    LLVMContext &C = M.getContext();
>>    for (auto &F : M) {
>>      // magic here
>> 
>> if I want to know from which function (callee) each function is called -
>> how can I do this?
> 
> To get the direct callers you would iterate through the users of F,
> and check whether it's being used as the callee operand in a CallInst
> or InvokeInst. Fortunately there's a CallSite class that abstracts
> away many of the differences. So something like:
> 
>    for (auto &U : F.getUsers()) {
>      if (auto CS = CallSite(U)) {
>        if (CS->getCalledFunction() == F)
>          doStuff(CS);
>      }
>    }
> 
>> I am aware that this will not work for calls that are made outside of
>> the analyzed module.
> 
> Also indirect calls.
> 
> Cheers.
> 
> Tim.
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev





More information about the llvm-dev mailing list