LLVM Pass: для изменения значений аргументов вызова функции - PullRequest
0 голосов
/ 08 июля 2019

часть моего проекта, основываясь на некотором анализе, я должен изменить аргументы вызова функции.Я делаю это на уровне llvm-ir.как-то так,

doWork ("work", functionBefore)

на основе моих результатов мой llvm-pass должен быть в состоянии преобразовать указатель функции, переданный в вызов функции, как этот

doWork ("work", functionAfter)

предполагается, что и functionBefore, и functionAfter имеют одинаковый тип возврата.

1. Можно ли изменить аргументы с помощью llvm pass?

2. Или я должен удалить инструкцию и воссоздать ту, которая мне нужна?

Пожалуйста, дайте несколько советов или указаний, как это сделать?

llvm ir для вызова функции будетчто-то вроде этого -

invoid void @ _Z7processNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPFvS4_E (% "class.std :: __cxx11 :: basic_string" * nonnull% 1, void (% "class.std :: 101 *) _cring nonnull @ _Z9functionBNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE), чтобы пометить% 7, размотать ярлык% 13

...