簡體   English   中英

在PowerPC上處理外部異常時使用r1堆棧指針

[英]Use of r1 stack pointer when handling external exception on PowerPC

我正在編寫一個匯編程序來處理EABI嵌入式PowerPC應用程序中的0x500外部/減量器異常。

在從0x500向量點調用的匯編程序例程中,我想在分支到“ C”中的處理函數之前使用一些內存來上下文保存寄存器。

因為i)異常模型保證了異常處理程序運行時之前的指令將已完成並且ii)調用約定似乎在進入新函數之前首先更新了堆棧指針(r1),然后釋放了使用的新堆棧空間通過移動它(並將堆棧指針移回到函數末尾的最后一個位置)

在我看來,我可以安全地使用r1在異常處理例程中為自己在正常堆棧上留出更多空間,前提是顯然我遵守調用約定並將堆棧放回原處,並確保SRR0和SRR1是未經修改。

我不會允許在處理中使用堆棧的異常嵌套(盡管實際上使用此方法我不確定會有問題)。

您認為這是一種明智的方法,還是應該使用單獨的堆棧進行異常處理? -我認為這可能會帶來一些問題。

嵌入式系統會同時執行這兩種操作。 如果您完全確信堆棧指針將始終指向有效的框架,並且堆棧中將有空間容納新框架,請繼續使用它。 如果有可能堆棧指針並非始終有效,則應保存舊的堆棧指針(通常在SPRG中)並設置自己的堆棧指針。

如果要處理數據訪問異常以檢測軟件錯誤,則肯定要設置自己的異常堆棧,因為DACC可能是由損壞的堆棧指針引起的。

我看到的唯一將寄存器上下文保存在堆棧上的缺點是,您可能會遇到的異常之一就是堆棧溢出!

我已經將當前上下文保存到當前堆棧,沒有任何問題。

您需要區分要從中返回的異常和沒有返回或無法信任該堆棧的“致命故障”異常。 如果您不打算返回,則有兩個選擇。 重新啟動堆棧並丟棄所有內容,或者如果您有更多的RAM切換到異常堆棧,則可以打印常規堆棧或...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM