我試圖爲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提前任何信息
感謝指向我的正確的方向。