Как добавить отладочную информацию в инструкцию в LLVM Pass - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь собрать некоторую информацию из моего прохода оптимизации LLVM во время выполнения. Другими словами, я хочу знать физический адрес конкретной инструкции IR после компиляции. Поэтому моя идея заключается в преобразовании метаданных LLVM в данные LLVM DWARF, которые можно использовать во время выполнения. Вместо того, чтобы прикреплять имя файла и номера строк, я хочу прикрепить свою собственную информацию. Мой вопрос состоит из двух частей:

  1. Вот код, который может получить имя файла и номер строки инструкции:

    if (DILocation *Loc = I->getDebugLoc()) { // Here I is an LLVM instruction unsigned Line = Loc->getLine(); StringRef File = Loc->getFilename(); StringRef Dir = Loc->getDirectory(); bool ImplicitCode = Loc->isImplicitCode(); }

Но как я могу установить эти поля? Я не смог найти соответствующую функцию.

  1. Как посмотреть обновленную информацию об отладке во время выполнения (номера файлов и строк)? Я использовал -g для компиляции, но все еще не вижу отладочную информацию.

Спасибо

1 Ответ

0 голосов
/ 12 марта 2019

Функция, которая вам нужна setDebugLoc () , и информация включается в результат, только если вы включите ее достаточно. Модуль проверки скажет вам, что вам не хватает.Эти две строки также могут быть тем, что вас сбивает с толку.

module->addModuleFlag(Module::Warning, "Dwarf Version", dwarf::DWARF_VERSION);
module->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION);
...