Некоторое время назад я работал над ядром Linux и хотел сделать нечто подобное, но для другой функции. В итоге я переименовал FUNCTION в __ FUNCTION и добавил к нему дополнительный параметр char *, а затем добавил макрос с именем FUNCTION, как в примере ниже:
#define FUNCTION(i) __FUNCTION(i,__FUNCTION__)
void __FUNCTION(int arg, char *func)
{
printk("%s\n", func);
//do what ever FUNCTION does
}
Макрос должен быть определен в соответствующем заголовочном файле, чтобы он был включен во все исходные файлы с помощью FUNCTION (). Все вызовы FUNCTION будут заменены на __FUNCTION и распечатаны с вызывающим абонентом. Но, поскольку в вашем случае kmalloc является встроенной функцией, определенной в заголовочном файле, вы можете просто добавить этот макрос над функцией.