Что такое "isra" в дампе потока ядра

дамп стека вызовов ядра Linux часто включает имена функций, которые заканчиваются на ".Исра.NNN", где NNN-некоторые числа. Например, см. здесь и здесь.

что это значит, что означает число?

1 ответов


isra - суффикс, добавленный к имени функции, когда gcc опции -fipa-sra выполняется оптимизация компилятора.

С руководство gcc:

-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" в качестве последнего аргумента.