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