Я пытаюсь модифицировать бэкэнд llvm X86 для использования rsp для поиска / индексации локальных переменных, а не для rbp. Проблема в том, что смещение между локальными переменными и rsp не является фиксированным, поэтому я должен рассчитать его самостоятельно.
Это легко сделать, если местоположение rsp было изменено с помощью следующих инструкций:
push
pop
sub rsp, $immediate
В этих ситуациях я могу узнать смещение во время компиляции.
Но в настоящее время я застреваю в проблеме. Я считаю, что rsp не только изменен этими инструкциями, упомянутыми ранее. Например:
lstr = (char *)alloca(strlen(ss) + 1);
Эта инструкция изменит rsp следующим образом, и я не могу знать смещение во время компиляции.
sub rsp, $register
Возможно или нет использовать llvm для генерации исполняемого файла, который использует указатель стека для поиска локальных переменных?