我正在尝试为 LLVM 实现后端。现在我遇到了堆栈帧降低的问题。
我需要实现以下堆栈布局:当调用函数时,我需要将“返回符号”(因为目标系统只能跳转到绝对地址)和“偏移”放到堆栈上,然后是所有函数参数。堆栈对齐是 1 字节,堆栈必须增长。
调用前的堆栈布局:
RetSymb <- SP
Offset
Arguments
Local Data
进入功能前的堆栈布局:
RetSymb
Offset
Arguments
Local Data
RetSymb <- SP
Offset = SP - Old SP
Arguments
Local Data
返回时,SP 会自动递减存储在“Offset”中的值。变量参数处理现在并不重要。
我目前不知道我必须看哪些地方以及在这些地方我需要做什么。我在 XXXFrameLowering.cpp 中找到了 emitPrologue 和 emitEpilogue 函数,但我真的不知道它们应该做什么(我猜在函数的开头和结尾插入代码)。我还在 XXXISelLowering.cpp 文件中找到了几个函数。是否有一个列表来解释不同的功能应该做什么?例如:
- LowerFormalArguments(我猜从堆栈中插入负载作为参数)
- 较低的呼叫结果
- 低呼
- 低回报
在此先感谢您提供任何为我指明正确方向的信息。