Возможно ли использование указателя стека для поиска / индексации локальных переменных в стеке с помощью llvm? - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь модифицировать бэкэнд llvm X86 для использования rsp для поиска / индексации локальных переменных, а не для rbp. Проблема в том, что смещение между локальными переменными и rsp не является фиксированным, поэтому я должен рассчитать его самостоятельно. Это легко сделать, если местоположение rsp было изменено с помощью следующих инструкций:

push 
pop
sub rsp, $immediate

В этих ситуациях я могу узнать смещение во время компиляции. Но в настоящее время я застреваю в проблеме. Я считаю, что rsp не только изменен этими инструкциями, упомянутыми ранее. Например:

lstr = (char *)alloca(strlen(ss) + 1);

Эта инструкция изменит rsp следующим образом, и я не могу знать смещение во время компиляции.

sub rsp, $register

Возможно или нет использовать llvm для генерации исполняемого файла, который использует указатель стека для поиска локальных переменных?

1 Ответ

1 голос
/ 28 мая 2019

Краткий ответ: нет. Есть много случаев, когда значение указателя стека может изменяться «неконстантным способом». Примерами могут служить VLA (прямые или с помощью вызовов alloca ()), функции с переменными параметрами и т. Д. Также обратите внимание, что в некоторых случаях стек может также динамически перестраиваться.

...