У меня есть готовый код в Transforms / Instrumentation, который перехватит мой исходный код. Я хотел бы использовать указатель функции, указывающий на исходную функцию (рекурсия).Вместо того, чтобы возвращать исходную функцию непосредственно во время выполнения, я хотел бы использовать возвращаемую переменную указателя функции (часть указателя функции должна быть в коде IR LLVM).
Я не могу найти пример кода.Я попытался использовать функцию getOrInsertFunction для создания нового указателя на функцию, похоже, этот API используется для вставки новой функции, а не переменных.
//-----------------------------------------------------
//Original Function
int find_sum(int a)
{
if (a!=0) {
return a + find_sum(a-1);
}
return 0;
}
int main() {
printf("Value of find_sum is %d\n", find_sum(5));
}
//-------------------------------------------------------------------------
//Expected Function at run time through Instrumentation pass
int find_sum(int a)
{
int (*fn_ptr)(int) = &find_sum; //should be an IR code
if (a!=0) {
return a + (*fn_ptr)(a-1); //should be an IR code
}
return 0;
}
int main() {
printf("Value of find_sum is %d\n", find_sum(5));
}
//--------------------------------------------------------