используйте MACRO __FUNCTION__ со встроенной функцией - PullRequest
0 голосов
/ 04 января 2011

Я хочу добавить отладочное сообщение в функцию kmalloc в ядре Linux. Поэтому моя цель - напечатать все функции, которые вызывают kmalloc.

Я пытался добавить

printk ("вызывающая сторона:% s размер:% d", FUNCTION , размер);

в функции kmalloc в slab.h

но результатом FUNCTION является сам kmalloc. Я понял, что MACRO сначала обрабатывается перед встроенной функцией (fyi, kmalloc - встроенная функция).

Теперь мой вопрос: как проще всего добавить сообщение отладки в kmalloc?

Заранее спасибо, ребята.

Ответы [ 2 ]

2 голосов
/ 04 января 2011
printk("%pS\n", __builtin_return_address(1)); /* or was it (0)? don't remember */

при условии, что вы не используете -fomit-frame-pointer во время компиляции.Если это не работает, вы все равно можете использовать dump_stack().

0 голосов
/ 04 января 2011

Некоторое время назад я работал над ядром 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 является встроенной функцией, определенной в заголовочном файле, вы можете просто добавить этот макрос над функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...