Может ли LLVM-джиттер испускать собственный код в адресах непрерывной памяти? - PullRequest
6 голосов
/ 26 июня 2011

У меня есть вопрос, касающийся джиттера LLVM: Могу ли я заставить LLVM Jitter генерировать собственный код в непрерывных адресах памяти? а быть ПОС? что я хочу сделать, это переместить сохранить код JIT в файл и загрузить его для выполнения позже ..

что я подразумеваю под «нагрузкой» - просто считываю биты из файла в буфер, я не хочу генерировать elf или что-то в этом роде.

Вот пример: Предположим, у меня есть исходный файл C, который содержит:

Global variables
----------------
Function Foo()
----------------
Function Too()

когда я запрашиваю код JIT, я хочу, чтобы JIT находился в адресах непрерывной памяти:

0x100: Global Vars (take 16 Byte)
0x110: Foo() Code (take 32 Byte)
0x130: Too() Code (take 32 Byte)
0x150: end.

1 Ответ

7 голосов
/ 27 июня 2011

Для хранения кода JIT в некоторой области памяти вы можете написать специальную версию JITMemoryManager (include/llvm/ExecutionEngine/JITMemoryManager.h lib/ExecutionEngine/JIT/JITMemoryManager.cpp).Вот пример пользовательского JIM MM: unittests/ExecutionEngine/JIT/JITTest.cpp, это RecordingJITMemoryManager, который регистрирует основные вызовы JIT MM.

Как я вижу (как LLVM 2.9), ARM JIT имеет isPIC, установленный вFalse и X86 JIT способны генерировать код PIC.

Самая большая проблема, похоже, заключается в загрузке предварительно скомпилированного кода.

...