Fault Information Commands

Describes how to use the f command to get information about the fault type.

There are two possibilities:

To start, use the f command. You will see something like this:

Fault Category: Exception  Fault Reason: 10000000
ExcId 00000001 CodeAddr f800415c DataAddr 00000000 Extra 00000005
Exc 1 Cpsr=60000013 FAR=00000000 FSR=00000005
 R0=64007328  R1=00000000  R2=00000000  R3=00000001
 R4=64007328  R5=640074c0  R6=00000000  R7=f8047ba4
 R8=64006f80  R9=64006fec R10=00000013 R11=64006ec4
R12=00000001 R13=000029b4 R14=0000016c R15=f800415c
R13Svc=64006ea8 R14Svc=f8002b2c SpsrSvc=600000ff

The Fault Category field shows the type of fault, in this case an exception.

Unhandled exceptions

If the Fault Category is Exception, then the fault is caused by an unhandled processor exception. You can get further information on the type of exception by looking at the first three lines of the generated output:

Fault Category: Exception  Fault Reason: 10000000
ExcId 00000001 CodeAddr f800415c DataAddr 00000000 Extra 00000005
Exc 1 Cpsr=60000013 FAR=00000000 FSR=00000005

The CodeAddr and DataAddr fields show the address of the instruction that caused the exception and, depending on the type of exception and instruction, the address of the data the instruction was trying to access. You can use the CodeAddr value to find the function which was being executed by using the MAKSYM tool.

The number after ExcId is the type of exception, in hexadecimal, and is one of the ARM exception types. The meaning of the numbers depends on the type of processor.

  • If the exception is a prefetch abort, then the code address is invalid.

  • A data abort means that the code address is invalid.

The number after FAR is the fault address register; this is the address that caused the fault.

The number after FSR is the fault status register value and shows why the MMU raised an exception.

The number after CPSR is the value of the CPU's CPSR register when the exception occurred. The 5 least-significant bits of the CPSR register indicate the ARM processor modes (CPSR register).

Panics

If the Fault Category is not Exception, then the fault is due to a panic. In this case the only other valid field is the Fault reason; the values of all other fields are meaningless.

The panic number is the low 16-bits of the fault reason, shown in hexadecimal.

For example, a KERN 27 panic would generate:

Fault Category: KERN  Fault Reason: 0000001b
ExcId ffffee5e CodeAddr ffff99a9 DataAddr bfff3e54 Extra fffec4cd

If the panic is KERN 4, then a thread or process marked as protected has panicked. For other panics, kernel side code has panicked; this code is either in the kernel itself or in a device driver.

See Kernel State Information Commands to find out which process and thread were running at the time of the panic.