10

Linux 内核调用堆栈转储通常包括以“.isra.NNN”结尾的函数名称,其中 NNN 是一些数字。例如,请参见此处此处

这是什么意思,这个数字代表什么?

4

1 回答 1

25

isragcc是执行选项-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, 是"isra"函数宏的底部,注意ASM_FORMAT_PRIVATE_NAMEclone_fn_id_num++的第三个参数。这是在 之后找到的任意数字"isra"。顾名思义,这是在此编译器选项下克隆的函数的计数(或者可能是跟踪所有克隆函数的全局计数器)。

如果您想了解更多信息,请在文件中搜索,modify_function该文件gcc/tree-sra.c又将其作为最后一个参数cgraph_function_versioning()传递。"isra"

于 2013-09-20T10:21:41.250 回答