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