【问题标题】:Inserting function calls in the gimple在 gimple 中插入函数调用
【发布时间】:2014-11-04 16:26:37
【问题描述】:

我在弄清楚下一步该怎么做时遇到了问题。

我有以下代码:

test.cpp

#include <stdio.h>

void
function(void) {printf("Hellow ");}

int main(void) {
    printf("World\n");
    return 0;
}

我想把它改造成下一个:

#include <stdio.h>

void
function(void) {printf("Hellow ");}

int main(void) {
    function();
    printf("World\n");
    return 0;
}

使用 gcc 插件。

在我的插件中不起作用的代码是这个:

...
tree function_fn;
tree function_fn_type;

function_fn_type=build_function_type_list(void_type_node, void_type_node, NULL_TREE);
function_fn = build_fn_decl ("function", function_fn_type);

gimple call = gimple_build_call (funcion_fn, 0);
gsi_insert_before (&gsi, call, GSI_NEW_STMT);
...

然后,当我使用插件编译 test.cpp 时,我收到下一条错误消息:

/tmp/cc2VRszt.o:在函数main': test.cpp:(.text+0x60): Undefined reference tofunction'中

谁能帮帮我?

【问题讨论】:

    标签: c++ gcc gcc-plugins gimple


    【解决方案1】:

    您正在构建函数声明,并根据声明插入对函数的调用,但除非您在链接到的另一个翻译单元中定义了该函数,否则它将无法解析。如果您希望插件在示例中的同一翻译单元中插入定义,那么前端开发人员指南将是一个好的开始:

    http://www.tldp.org/HOWTO/GCC-Frontend-HOWTO-7.html

    【讨论】:

    • 这根本没有帮助。
    • @llllllllllllll 你提供了零上下文,所以很难说为什么它对你没有帮助,或者即使你的问题是一样的。由于它被接受为答案,它似乎对 OP 有所帮助。您应该提出一个新问题或陈述您当前的问题。其他任何事情都没有帮助/有用。也就是说,我对此的回忆是在原始问题中的同一翻译单元中没有函数定义,这将与他们的错误相匹配。
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多