Идентификация определяющей пользователя функции через lvm pass

Есть ли способ, с помощью которого я могу определить, является ли функция вызываемого абонента пользовательской или нет? Например:

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

Как и в этом случае, foo() является пользовательским определением, тогда как printf() является библиотечной функцией.

В настоящее время я использую метод, чтобы перебрать все модули и проверить, больше ли его размер, чем 0, или нет. то есть:

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

Но я не уверен в его точности?

1 ответ

Решение

Вы можете использовать isDeclaration метод, чтобы проверить, определена ли функция или просто объявлена ​​в модуле. Это позволит вам различать функции, реализация которых находится в модуле, и функции, которые, как ожидается, находятся за его пределами.

Другие вопросы по тегам