LLVM Pass для выделения памяти по определенным адресам - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь использовать проход LLVM для преобразования программы на C / C ++, чтобы все выделения памяти происходили только в определенной области памяти, которую я должен решить.

Например, для следующего кодаЯ хочу использовать проход LLVM для запуска всех выделений памяти по адресу 0x10000:

// Test.cpp
int main()
{
    int x = 5;    // I want to allocate memory for this variable
                  // starting at address 0x10000

    int y = 6     // Memory allocated at 0x10004, since it's the second int

    return 0;
}

Кто-нибудь знает, возможно ли это сделать с помощью прохода LLVM?Я уже знаю, что могу использовать проход для циклического прохождения всех инструкций в программе, чтобы найти все инструкции alloca, но я не знаю, как преобразовать программу, чтобы alloca выделяла память по определенному адресу.

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать скрипт компоновщика , чтобы поместить определенный раздел по этому адресу, а затем использовать LLVM-проход к , чтобы поместить соответствующие глобальные / статические переменные в этот раздел .

Однако x и y в вашем вопросе являются локальными по отношению к main () и, как правило, живут в стеке или, возможно, даже в машинном регистре.Вы знаете, и я знаю, что main () не будет вызывать себя рекурсивно, но компилятор очень старается разрешить рекурсию.Борьба с этим в проходе не будет простой, поэтому эти переменные может быть нелегко поместить в конкретный раздел.

...