Получить указатель на текущую функцию в C (GCC)? - PullRequest
12 голосов
/ 28 января 2010

есть ли в gcc магическая переменная, содержащая указатель на текущую функцию?

Я хотел бы иметь своего рода таблицу, содержащую для каждого указателя функции набор информации.

Я знаю, что есть переменная __func__, содержащая имя текущей функции в виде строки, но не в качестве указателя на функцию.

Это не для вызова функции, а для использования в качестве индекса.

EDIT По сути, я хотел бы иметь возможность запускать вложенные функции непосредственно перед выполнением текущей функции (а также захватывать возврат для выполнения некоторых действий). По сути, это похоже на __cyg_profile_func_enter и __cyg_profile_func_exit (функции инструментов) ... Но проблема в том, что эти функции инструментов являются глобальными, а не выделенными для функций.

EDIT В ядре Linux вы можете использовать unsigned long kallsyms_lookup_name(const char *name) из include/linux/kallsyms.h ... Обратите внимание, что опция CONFIG_KALLSYMS должна быть активирована.

Ответы [ 12 ]

0 голосов
/ 28 января 2010

Если все, что вам нужно, это уникальный идентификатор для каждой функции, то в начале каждой функции поместите это:

static const void * const cookie = &cookie;

Тогда гарантируется, что значение cookie будет значением, однозначно идентифицирующим эту функцию.

0 голосов
/ 28 января 2010

Нет, функция не осознает себя. Вам нужно будет построить таблицу, о которой вы говорите, и затем, если вы хотите, чтобы функция знала о себе, вам нужно будет передать индекс в глобальную таблицу (или указатель функции) в качестве параметра.

Примечание: если вы хотите сделать это, у вас должна быть согласованная схема именования параметра.

...