This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Q: Why ARM generates undefined instruction exception but PC and instruction are both OK

Dear All,

I have met some problem which holds me for almost 2 weeks. I worked on some ARM926EJ-S based chip. The code sometime can run up to 2-3 days with no problem, but sometime after few hours running, ARM generated "undefined instruction" exception. I use the ICE debugger to trace the problem, the value in "lr" is good, in terms of it is within well defined code area. So I did one experiment, in the "undefined exception handler", I just simply set the PC back to the "lr", and the code can resume without any problem. In my case, I turn on the Icache and Dcache.
Does anyone have the similar experience before? or Any idea? Thanks a lot!

Ys1234
Parents
  • Note: This was originally posted on 8th March 2012 at http://forums.arm.com

    Hi Charlie,

    Thanks for your reply. Actually I have seen two cases, one case is I-cache content is OK, the "undefined instruction handler" can simply set the PC to the lr-4, and the code continue running OK. Another case is I-cache content is wrong, and I add Icache invalidate in the "undefined instruction handler" to force the instruction reload from the external memory when execute next time, and the code continue running OK. And the exception always happen on the same address. But the same address running OK most of the time (my program is a while(1) loop), meaning no except at all.

    Thanks.

    Ys1234


    Can you read back I-cache content when it hits the undefined exception?
    When you read the instruction pointed by LR through the debugger, it would be re-loaded from the external memory then you should see the different instruction than the one I-cache line.

    Regards,
    Charlie





Reply
  • Note: This was originally posted on 8th March 2012 at http://forums.arm.com

    Hi Charlie,

    Thanks for your reply. Actually I have seen two cases, one case is I-cache content is OK, the "undefined instruction handler" can simply set the PC to the lr-4, and the code continue running OK. Another case is I-cache content is wrong, and I add Icache invalidate in the "undefined instruction handler" to force the instruction reload from the external memory when execute next time, and the code continue running OK. And the exception always happen on the same address. But the same address running OK most of the time (my program is a while(1) loop), meaning no except at all.

    Thanks.

    Ys1234


    Can you read back I-cache content when it hits the undefined exception?
    When you read the instruction pointed by LR through the debugger, it would be re-loaded from the external memory then you should see the different instruction than the one I-cache line.

    Regards,
    Charlie





Children
No data