使用 GCC 插件打印调用的函数名称
print called function name using GCC plugin
我需要使用 gcc plugins
打印程序调用函数的名称
为此,我创建了一个将在 ssa pass
之后调用的通行证,我已经启动了插件,我可以循环使用它的语句,使用 gimple_stmt_iterator
:
int read_calls(){
unsigned i;
const_tree str, op;
basic_block bb;
gimple stmt;
tree fnt;
FOR_EACH_BB_FN(bb, cfun) {
gimple_stmt_iterator gsi;
for (gsi=gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
{
stmt = gsi_stmt(gsi);
if (is_gimple_call(stmt)){
const char* name = THE_FUNCTION_I_NEED(stmt);
cerr << " Function : " << name << " is called \n";
}
}
}
return 0;
}
如何使用 gimple 节点打印被调用函数的名称??
我还可以打印其他信息,例如调用它的行号、调用它的函数的名称等吗?
我一直在寻找答案几个小时,答案其实很简单:
get_name(tree node)
...我一直在尝试很多功能,因为文档真的很差...我在这里找到了它:
GCC中后端API参考
如你所见,没有关于函数功能的评论,它退出了我找到的关于 gcc 的最佳文档,无论如何 get_name(..)
工作正常,有点我没有找到如何打印源代码行
我知道三种方式:
1:
tree current_fn_decl = gimple_call_fndecl(stmt);
const char* name = function_name(DECL_STRUCT_FUNCTION(current_fn_decl);
2:
const char* name = IDENTIFIER_POINTER(DECL_NAME(current_fn_decl));
3:
tree current_fn_decl = gimple_call_fndecl(stmt);
const char* name = get_name(current_fn_decl);
我需要使用 gcc plugins
打印程序调用函数的名称
为此,我创建了一个将在 ssa pass
之后调用的通行证,我已经启动了插件,我可以循环使用它的语句,使用 gimple_stmt_iterator
:
int read_calls(){
unsigned i;
const_tree str, op;
basic_block bb;
gimple stmt;
tree fnt;
FOR_EACH_BB_FN(bb, cfun) {
gimple_stmt_iterator gsi;
for (gsi=gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
{
stmt = gsi_stmt(gsi);
if (is_gimple_call(stmt)){
const char* name = THE_FUNCTION_I_NEED(stmt);
cerr << " Function : " << name << " is called \n";
}
}
}
return 0;
}
如何使用 gimple 节点打印被调用函数的名称?? 我还可以打印其他信息,例如调用它的行号、调用它的函数的名称等吗?
我一直在寻找答案几个小时,答案其实很简单:
get_name(tree node)
...我一直在尝试很多功能,因为文档真的很差...我在这里找到了它:
GCC中后端API参考
如你所见,没有关于函数功能的评论,它退出了我找到的关于 gcc 的最佳文档,无论如何 get_name(..)
工作正常,有点我没有找到如何打印源代码行
我知道三种方式:
1:
tree current_fn_decl = gimple_call_fndecl(stmt);
const char* name = function_name(DECL_STRUCT_FUNCTION(current_fn_decl);
2:
const char* name = IDENTIFIER_POINTER(DECL_NAME(current_fn_decl));
3:
tree current_fn_decl = gimple_call_fndecl(stmt);
const char* name = get_name(current_fn_decl);