我正在尝试修改 llvm X86 后端以使用 rsp 来定位/索引局部变量而不是 rbp。问题是局部变量和rsp的偏移量不固定,只能自己计算。如果通过这些指令修改了 rsp 的位置,则很容易处理,如下所示:
push
pop
sub rsp, $immediate
在这些情况下,我可以在编译时知道偏移量。但现在我陷入了一个问题。我发现 rsp 不仅被前面提到的这些指令所修改。例如:
lstr = (char *)alloca(strlen(ss) + 1);
该指令将像这样修改 rsp ,我不知道编译时的偏移量。
sub rsp, $register
是否可以使用 llvm 生成使用堆栈指针定位局部变量的执行文件?