2016-09-01 2 views
0

Я хотел бы создать функцию на c, что после перевода кода llvm с clang имеет определенное имя. Одна проблема - имя целевой функции должно содержать точку ('.'). Есть ли возможность добавить «MyName». к названию, кроме «найти и заменить»?Имя функции mangling in clang

+1

Что такое прецедент для этого? –

+2

Какая проблема вы пытаетесь решить? Нет, не проблема с изменением имени функции, но проблема, решение которой связано с изменением имени функции, о котором вы спрашиваете. –

ответ

0

Название mangling в основном используется другими двоичными файлами, импортирующими эту функцию/переменную с dllimport.

Если вы не используете этот метод, вы можете делать все, что хотите, от имени. Если да, вам придется изменить все, что ссылается на него.

Возможно, вы создали бы LLVM IR pass (смотрите opt и т. Д.), Чтобы установить имя функции в цель.

Простой пример:

for(auto f = M.getFunctionList().begin(); f != M.getFunctionList().end(); f = M.getFunctionList().begin()) { 
    if (F->getName().find("MyMangledFunctionName") != StringRef::npos) { 
     F->setName(F->getName() + "."); // add "dot" 
    } 
} 

"M" переменная является LLVM :: Модуль.

Смежные вопросы