Вставка вызовов функций в gimple

У меня проблемы с выяснением, как сделать следующее.

У меня есть следующий код:

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 to
функция»

Кто-нибудь может мне помочь?

2

Решение

Вы создаете объявление функции и вставляете вызов функции на основе объявления, но если вы не определили эту функцию в другом модуле перевода, на который вы ссылаетесь, она не будет решена. Если вы хотите, чтобы плагин вставлял определение в том же модуле перевода, что и в вашем примере, это руководство для внешних разработчиков было бы хорошим началом:

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

1

Другие решения


По вопросам рекламы [email protected]