Как проверить, определена ли функция в системных заголовочных файлах в ModulePass на проходе инструментария LLVM? - PullRequest
0 голосов
/ 10 октября 2018

Я реализую пользовательский модуль LLVMPass в (Transforms / Instrumentation), который выполняет некоторые действия над функциями.Я использую Module :: iterator для перебора функций в модуле.Как я могу проверить, если какие-либо из этих функций поступают из системных заголовочных файлов.Есть идеи как это сделать.

1 Ответ

0 голосов
/ 11 октября 2018

Clang имеет SourceLocations для всех объявлений, но эта информация не преобразуется в LLVM IR, где выполняется ModulePass - за исключением отладочной информации , если включена информация об отладке или покрытие.Отладочная информация - лучшее усилие, но если вы не выполняли никаких других преобразований с тех пор, как clang испустил IR, то обычно это сработает.

Это намеренное проектное решение, обычно LLVM не должен обрабатывать систему инесистемные функции по-разному.Внутри lib / Transforms / Utils / SimplifyLibCalls.cpp есть исключение, которое оптимизируется на основе имен известных библиотечных функций.Что делает это безопасным, так это то, что пользователь LLVM будет знать, являются ли эти функции теми, которые определены языковым стандартом, и решит, применять эту оптимизацию или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...