With SYS/BIOS 6.45.01.29 created a test program for a Cortex-A15 to test the SYS/BIOS decoding of an exception call stack, where the test program generates a Data Abort exception by attempting to read from a memory address which is not mapped. Used CCS 6.2.0.00050 and the compiler GNU v4.9.3. It was found that the incorrect exception call stack was reported in the ROV, and noticed that the exception was reporting incorrect values for the SP and LR values.
The following screenshot shows the state when the next instruction to be executed will generate a Data Abort exception:
i.e. the Data Abort exception is generated at PC=0x8000542C, SP=0x8001E150 and LR=0x8000551C.
The next screenshot shows the state after the SYS/BIOS exception handler has terminated the program, and reported the exception:
The problem is that:
a) The ROV Exception view and the exception dump to the console have both reported an incorrect LR value of 0x8002005C, rather than the actual value 0x8000551C
b) The ROV Exception view and the exception dump to the console have both reported an incorrect SP value of 0x8000542c, rather than the actual value 0x8001E150.
c) The ROV Exception call stack is incomplete - it shows the Data Abort exception occurred in bad_func() but has reported the incorrect call site since the reported LR value is incorrect.
The test project is attached 8321.task_GPEVM_AM572X_SiRevA_CortexA.zip. The test program was run on a BeagleBoard-X15 Rev A2.