我正在使用JTAG連接器和gdb在裸機ARM(v5TE兼容)上運行程序。程序從管理員模式下的某些SDRAM運行,並僅使用分支指令。軟件中斷異常或未定義的指令異常?
在某個時候發生異常。用ctrl + C停止gdb我可以看到CPSR指示了一個未定義的異常模式,但程序計數器指示了一個軟件中斷異常(0xffff0008
)。根據ARM ARM,當發生未定義的指令異常時,PC_und
應該是0xffff0004
或0x00000004
。我的程序發生了什麼,SWI發生了什麼,或者是一個未定義的指令異常?
編輯讓我更清楚的問題:
我的程序的目的是測試自定義板的硬件。當出現硬件問題時,RAM中的程序可能會產生損壞(如下所示),這是產生異常的原因。當硬件正常時,測試軟件可以毫無問題地運行。我的RAM地址範圍從0到0x40000000,程序在0x1000到0x2000之間加載。管理員模式堆棧指針被設置爲0xff0。中斷向量只包含斷點。從未定義例外模式
(gdb) c
Continuing.
^C^C
Program received signal SIGTRAP, Trace/breakpoint trap.
0xffff0008 in ??()
寄存器:
(gdb) i r
r0 0x52878 338040
r1 0x2020000 33685504
r2 0x2020000 33685504
r3 0x2020000 33685504
r4 0x2020000 33685504
r5 0x2020000 33685504
r6 0x2020000 33685504
r7 0x2020000 33685504
r8 0x2020000 33685504
r9 0x2020000 33685504
r10 0x2020000 33685504
r11 0x2020000 33685504
r12 0x2020000 33685504
sp 0x2020000 0x2020000
lr 0xffff0008 4294901768
pc 0xffff0008 0xffff0008
fps 0x0 0
cpsr 0x800000db 2147483867
寄存器從管理程序模式:
(gdb) set $cpsr=0xd3
(gdb) i r
r0 0x52878 338040
r1 0x2020000 33685504
r2 0x2020000 33685504
r3 0x2020000 33685504
r4 0x2020000 33685504
r5 0x2020000 33685504
r6 0x2020000 33685504
r7 0x2020000 33685504
r8 0x2020000 33685504
r9 0x2020000 33685504
r10 0x2020000 33685504
r11 0x2020000 33685504
r12 0x2020000 33685504
sp 0xff3ffffe 0xff3ffffe
lr 0x1020 4128
pc 0xffff0008 0xffff0008
fps 0x0 0
cpsr 0xd3 211
這裏是在地址周圍的RAM(損壞)程序由主管指出鏈接寄存器:
(gdb) x/5i 0x1020-8
0x1018 <_start+24>: bic r0, r0, #135168 ; 0x21000
0x101c <_start+28>: strbcs r0, [r0], #1025
0x1020 <_start+32>: mcr 15, 0, r0, cr1, cr0, {0}
0x1024 <_start+36>: ldr r1, [pc, #120] ; 0x10a4 <skip_intreg_reset+100>
0x1028 <_start+40>: ldr r2, [r1, #8]
(gdb) x/4w 0x1018
0x1018 <_start+24>: 0xe3c00a01
0x101C <_start+28>: 0xfec00401
0x1020 <_start+32>: 0xee010f10
0x1024 <_start+36>: 0xe59f1078
從程序對象文件
轉儲:
18: e3c00a01 bic r0, r0, #4096 ; 0x1000
1c: e3c00001 bic r0, r0, #1 ; 0x1
20: ee010f10 mcr 15, 0, r0, cr1, cr0, {0}
24: e59f1078 ldr r1, [pc, #120] ; a4 <skip_intreg_reset+0x64>
28: e5912000 ldr r2, [r1]
當swi發生時,它是在拇指模式還是手臂模式? – 2013-03-15 13:39:56
它是在ARM模式 – 2013-03-15 13:41:06
你可以轉儲/後發生異常的代碼? – 2013-03-15 13:43:10