Я пытаюсь изменить LLVM так, чтобы он сохранял в памяти определенные константы и функции.
Другими словами, мне нужно убедиться, что машинные коды для определенных функций всегда предшествует некоторая ~ 4-байтовая константа в памяти. Само тело функции не должно быть изменено.
Могу ли я достичь этого, просто изменив LLVM IR?
Если да:
Как бы я указал в LLVM IR, чтобы переменная и функция были непрерывными в памяти?
Если нет:
Какую часть процесса генерации кода (то есть, какой этап (ы)) я должен изменить, чтобы добиться этого? Любые ссылки на проекты / файлы, на которые я должен смотреть, были бы полезны, так как я еще не уверен, с чего начать.
Насколько я знаю, я не думаю, что вы можете сделать это, просто изменив ИК; Вы должны написать что-нибудь, чтобы справиться с этим самостоятельно. Это также не должен быть проход — слишком низкий уровень, он должен выполняться во время генерация целевого кода. Вы можете использовать существующие цели и просто изменить этот аспект, конечно, вам не нужно писать новую цель с нуля. Я не знаю, какое именно место подойдет для этого.
Я думаю, что хорошим способом передачи этой информации с уровня IR в DAG во время генерации кода было бы использование метаданных: присоедините метаданные либо к функции, либо к соответствующей константе, которая свяжет их друг с другом, а затем позже используйте эту ссылку для испуская их вместе. Увидеть этот поток на llvm-dev для получения информации о том, как передавать метаданные.
Других решений пока нет …