Как контролировать местоположение глобальной переменной в LLVM IR?

Я пытаюсь изменить LLVM так, чтобы он сохранял в памяти определенные константы и функции.
Другими словами, мне нужно убедиться, что машинные коды для определенных функций всегда предшествует некоторая ~ 4-байтовая константа в памяти. Само тело функции не должно быть изменено.

Могу ли я достичь этого, просто изменив LLVM IR?

  • Если да:
    Как бы я указал в LLVM IR, чтобы переменная и функция были непрерывными в памяти?

  • Если нет:
    Какую часть процесса генерации кода (то есть, какой этап (ы)) я должен изменить, чтобы добиться этого? Любые ссылки на проекты / файлы, на которые я должен смотреть, были бы полезны, так как я еще не уверен, с чего начать.

1

Решение

Насколько я знаю, я не думаю, что вы можете сделать это, просто изменив ИК; Вы должны написать что-нибудь, чтобы справиться с этим самостоятельно. Это также не должен быть проход — слишком низкий уровень, он должен выполняться во время генерация целевого кода. Вы можете использовать существующие цели и просто изменить этот аспект, конечно, вам не нужно писать новую цель с нуля. Я не знаю, какое именно место подойдет для этого.

Я думаю, что хорошим способом передачи этой информации с уровня IR в DAG во время генерации кода было бы использование метаданных: присоедините метаданные либо к функции, либо к соответствующей константе, которая свяжет их друг с другом, а затем позже используйте эту ссылку для испуская их вместе. Увидеть этот поток на llvm-dev для получения информации о том, как передавать метаданные.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector