Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Identifying user define function through llvm pass

Is there anyway by which I can identify whether the callee function is a user define or not? For example:

void foo()
{
   printf("hello world again");
}
int main()
{
   printf("hello world\n");
   foo();
}

As in this case foo() is a user define, whereas printf() is a library function.

The method I'm currently using is to iterate over all the modules and check if its size is greater than 0 or not. i.e:

for(Module::iterator F = M.begin(); F != M.end(); ++F)
{
    Function &Func = *F;
    if(F->size()>0)
        errs() << "User Define";
}

But am not sure about its accuracy?

like image 322
Abhinash Jain Avatar asked May 29 '14 08:05

Abhinash Jain


1 Answers

You can use the isDeclaration method to check whether the function is defined or just declared in the module. This will let you differentiate between functions whose implementation is in the module and function that are expected to be found outside it.

like image 171
Eli Bendersky Avatar answered Nov 13 '22 00:11

Eli Bendersky