У меня есть программа, которую я написал, которая использует LLVM 3.5 как JIT-компилятор, который я пытаюсь обновить, чтобы использовать MCJIT в LLVM 3.7. У меня это в основном работает, но я изо всех сил пытаюсь воспроизвести одну функцию отладки, реализованную с помощью LLVM 3.5.Как разобрать результат компиляции LLVM MCJIT?
Хотелось бы видеть код хост-машины (например, x86, x64 или ARM, а не LLVM IR), сгенерированный JIT-процессом; в отладочных сборках я регистрирую это, когда моя программа запущена. С LLVM 3.5 я смог сделать это, вызвав ExecutionEngine :: runJITOnFunction(), чтобы заполнить объект llvm :: MachineCodeInfo, который дал мне начальный адрес и размер сгенерированного кода. Тогда я смогу разобрать этот код.
Я не могу найти эквивалент в MCJIT. Я могу получить начальный адрес функции (например, через getPointerToFunction()), но не размер.
Я видел Disassemble Memory, но кроме того, что в ответах не так много деталей, похоже, это больше о том, как разобрать последовательность байтов. Я знаю, как это сделать, мой вопрос: как я могу получить последовательность байтов в первую очередь?
Если это поможет сделать это более конкретным, пожалуйста, переформулируйте этот вопрос следующим образом: «Как я могу расширить пример Kaleidoscope JIT, чтобы показать машинный код (x86, ARM и т. Д.), Который он производит, а не только LLVM IR? "
Спасибо.