ERR011246 CortexM33- 937163C - 浮點(diǎn)狀態(tài)可能在某些異常返回故障中被錯(cuò)誤清除
Armv8-M架構(gòu)在異常返回解棧之前定義了完整性檢查。 這些檢查驗(yàn)證EXC_RETURN值的有效性,如果失敗則引發(fā)故障。由于此勘誤,當(dāng)發(fā)生其中一種故障時(shí),浮點(diǎn)狀態(tài)可能會(huì)被錯(cuò)誤清除。
當(dāng)滿足以下所有條件時(shí),浮點(diǎn)狀態(tài)將被錯(cuò)誤清除:
- 以下其中一種異常返回完整性檢查失?。?? SFSR.INVER. ? UFSR.INVPC(退出非活動(dòng)處理程序)。 ? UFSR.INVPC(EXC_RETURN[1]!=0)。 ? SFSR.LSERR(由于FPCCR.CLRONRET而嘗試清除時(shí))。
- 如果沒有故障,浮點(diǎn)狀態(tài)將被解棧(即 EXC_RETURN[4]==0,F(xiàn)PCCR.LSPACT==0,并且可以訪問FPU)。
如果軟件引起上述任何故障之一,浮點(diǎn)狀態(tài)可能會(huì)被錯(cuò)誤清除??赡艽嬖趩栴}的情況是Secure異常調(diào)用非安全函數(shù),而非安全函數(shù)又嘗試從異常返回。該勘誤允許非安全函數(shù)清除Secure浮點(diǎn)上下文。請(qǐng)注意,這樣做將始終引發(fā)Secure故障,并且永遠(yuǎn)不會(huì)將Secure狀態(tài)泄漏給非安全環(huán)境。