Что такое "isra" в дампе потока ядра
1 ответов
isra
- суффикс, добавленный к имени функции, когдаgcc
опции-fipa-sra
выполняется оптимизация компилятора.
-fipa-sra
выполните межпроцедурную скалярную замену агрегатов, удаление неиспользованных параметры и замена параметров, передаваемых по ссылке, на передаваемые параметры по значению.
включено в уровнях
-O2
,-O3
и-Os
.
все функции, оптимизированные под этой опцией, имеют isra
присоединены к их именам. Я зарылся в gcc
код и узнал функцию, которая добавляла строку.
tree
clone_function_name (tree decl, const char *suffix)
{
tree name = DECL_ASSEMBLER_NAME (decl);
size_t len = IDENTIFIER_LENGTH (name);
char *tmp_name, *prefix;
prefix = XALLOCAVEC (char, len + strlen (suffix) + 2);
memcpy (prefix, IDENTIFIER_POINTER (name), len);
strcpy (prefix + len + 1, suffix);
#ifndef NO_DOT_IN_LABEL
prefix[len] = '.';
#elif !defined NO_DOLLAR_IN_LABEL
prefix[len] = '$';
#else
prefix[len] = '_';
#endif
ASM_FORMAT_PRIVATE_NAME (tmp_name, prefix, clone_fn_id_num++);
return get_identifier (tmp_name);
}
вот, аргумент 2, const char *suffix
, is "isra"
и обратите внимание в нижней части макроса функции ASM_FORMAT_PRIVATE_NAME
что происходит clone_fn_id_num++
в качестве третьего аргумента. Это произвольное число, найденное после "isra"
. Это происходит по его имени-это количество функций, которые клонируется под этим параметром компилятора (или может быть глобальным счетчиком, который отслеживает все клонированные функции).
если вы хотите понять больше, ищите modify_function
в файле gcc/tree-sra.c
, который, в свою очередь, называет cgraph_function_versioning()
, который передает "isra"
в качестве последнего аргумента.