GDB常用命令简介
Trace32收费, GDB是免费软件,可以用来分析kernel exception等问题
例子:
(gdb) cd E:\CR\Hua\ALPS03716939\CPM2017092800062_20180116_ke_log\ke_log@机器1@db.fatal.03.KE
(gdb) file symbols/vmlinux Reading symbols from symbols/vmlinux...done.
(gdb) core SYS_MINI_RDUMP
[New LWP 102]
[New LWP 1]
[New LWP 2]
[New LWP 3]
[New LWP 4]
[New LWP 5]
[New LWP 6]
[New LWP 7]
[New LWP 8]
#0 __flush_dcache_area () at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/cache.S:164
164 /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/cache.S: No such file or directory.
(gdb) bt
Python Exception <type 'exceptions.ImportError'> No module named frames:
#0 __flush_dcache_area () at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/cache.S:164
#1 0xffffffc0000973ec in __sync_icache_dcache (pte=<optimized out>, addr=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/flush.c:82 #2 0xffffffc00019f578 in set_pte_at (mm=<optimized out>, pte=<optimized out>, ptep=<optimized out>, addr=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/include/asm/pgtable.h:2
#3 do_set_pte (vma=<optimized out>, address=4125929472, page=<optimized out>, pte=0xfffffff84526e658, write=<optimized out>, anon=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/mm/memory.c:2776
#4 0xffffffc00019f818 in do_read_fault (vma=0xffffffec2fa4e468, address=4125929472, pmd=<optimized out>, pgoff=<optimized out>, flags=<optimized out>, orig_pte=0, mm=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/mm/memory.c:2923
#5 0xffffffc0001a1574 in do_linear_fault (mm=<optimized out>, page_table=<optimized out>, orig_pte=<optimized out>, flags=<optimized out>, pmd=<optimized out>, address=<optimized out>, vma=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/mm/memory.c:3055
#6 handle_pte_fault (flags=<optimized out>, pmd=<optimized out>, pte=<optimized out>, address=<optimized out>, vma=<optimized out>, ---Type <return> to continue, or q <return> to quit--- mm=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/mm/memory.c:3220
#7 __handle_mm_fault (flags=<optimized out>, address=<optimized out>, vma=<optimized out>, mm=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/mm/memory.c:3347
#8 handle_mm_fault (mm=0xffffffd06a14ab40, vma=0xffffffec2fa4e468, address=4125929472, flags=40) at /mnt/zhaojunyao/L41_Test/kernel-3.18/mm/memory.c:3376
#9 0xffffffc000096d50 in __do_page_fault (tsk=<optimized out>, vm_flags=<optimized out>, mm_flags=<optimized out>, addr=<optimized out>, mm=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/fault.c:185
#10 do_page_fault (addr=4125929472, esr=2516582407, regs=0xffffffd80fbf3d20) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/fault.c:249
#11 0xffffffc000081294 in do_mem_abort (addr=4125929472, esr=2516582407, regs=0xffffffd80fbf3d20) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/fault.c:460
#12 0xffffffc000083c28 in el1_sync ()
(gdb) i r
x0 0xffffffe821d88000 -102511378432
x1 0xffffffe821d89000 -102511374336
x2 0x40 64
x3 0x3f 63
x4 0x200 512
x5 0x0 0
x6 0x61d88 400776
x7 0xffffffec2fa4e468 -85100010392
x8 0x8f513803 2404464643
x9 0xbe4780a8 3192357032
x10 0x3f965600 1066817024
x11 0x1df165c2 502359490
x12 0x234df2cd 592310989
x13 0x73a485ed 1940162029
x14 0x951e8376 2501804918
x15 0xe9c64b67 3922086759
x16 0x5172eccc 1366486220
x17 0xc6a35ee5 3332595429
x18 0xef6fc7dc 4017080284
x19 0xffffffbe015675c0 -283445398080
x20 0xfffffff84526e658 -33199561128
x21 0xf5ecb000 4125929472
x22 0x0 0
x23 0xffffffec2fa4e468 -85100010392 ---Type <return> to continue, or q <return> to quit---
x24 0x0 0
x25 0x0 0
x26 0xfffffff84526e000 -33199562752
x27 0xd78 3448
x28 0xffffffd01c073000 -205688197120
x29 0xffffffd80fbf3970 -171534501520
x30 0xffffffc0000973ec -274877287444
sp 0xffffffd80fbf3970 0xffffffd80fbf3970
pc 0xffffffc00009713c 0xffffffc00009713c <__flush_dcache_area+ 28>
cpsr 0x60000145 1610613061
fpsr <unavailable>
fpcr <unavailable>
(gdb) p $pc
$1 = (void (*)()) 0xffffffc00009713c <__flush_dcache_area+28>
(gdb) disassemble $pc
Dump of assembler code for function __flush_dcache_area:
0xffffffc000097120 <+0>: mrs x3, ctr_el0
0xffffffc000097124 <+4>: ubfx x3, x3, #16, #4
0xffffffc000097128 <+8>: mov x2, #0x4 // #4
0xffffffc00009712c <+12>: lsl x2, x2, x3
0xffffffc000097130 <+16>: add x1, x0, x1
0xffffffc000097134 <+20>: sub x3, x2, #0x1
0xffffffc000097138 <+24>: bic x0, x0, x3
=> 0xffffffc00009713c <+28>: dc civac, x0
0xffffffc000097140 <+32>: add x0, x0, x2
0xffffffc000097144 <+36>: cmp x0, x1
0xffffffc000097148 <+40>: b.cc
0xffffffc00009713c <__flush_dcache_area+ 28>
0xffffffc00009714c <+44>: dsb sy
0xffffffc000097150 <+48>: ret
End of assembler dump.
(gdb) disassemble 0xffffffc00009713c
Dump of assembler code for function __flush_dcache_area:
0xffffffc000097120 <+0>: mrs x3, ctr_el0
0xffffffc000097124 <+4>: ubfx x3, x3, #16, #4
0xffffffc000097128 <+8>: mov x2, #0x4 // #4
0xffffffc00009712c <+12>: lsl x2, x2, x3
0xffffffc000097130 <+16>: add x1, x0, x1
0xffffffc000097134 <+20>: sub x3, x2, #0x1
0xffffffc000097138 <+24>: bic x0, x0, x3
=> 0xffffffc00009713c <+28>: dc civac, x0
0xffffffc000097140 <+32>: add x0, x0, x2
0xffffffc000097144 <+36>: cmp x0, x1
0xffffffc000097148 <+40>: b.cc
0xffffffc00009713c <__flush_dcache_area+ 28>
0xffffffc00009714c <+44>: dsb sy
0xffffffc000097150 <+48>: ret
End of assembler dump.
(gdb) f 1
#1 0xffffffc0000973ec in __sync_icache_dcache (pte=<optimized out>, addr=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/flush.c:82 82 /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/flush.c: No such file or directory.
(gdb) up
#2 0xffffffc00019f578 in set_pte_at (mm=<optimized out>, pte=<optimized out>, ptep=<optimized out>, addr=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/include/asm/pgtable.h:220
220 /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/include/asm/pgtable.h: N o such file or directory.
(gdb) down
#1 0xffffffc0000973ec in __sync_icache_dcache (pte=<optimized out>, addr=<optimized out>) at /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/flush.c:82
82 /mnt/zhaojunyao/L41_Test/kernel-3.18/arch/arm64/mm/flush.c: No such file or directory.
(gdb) disass __sync_icache_dcache
Dump of assembler code for function __sync_icache_dcache:
0xffffffc00009734c <+0>: stp x29, x30, [sp,#-32]!
0xffffffc000097350 <+4>: ubfx x0, x0, #12, #36
0xffffffc000097354 <+8>: mov x1, #0xffbe00000000 // #2811 91508869120
0xffffffc000097358 <+12>: mov x29, sp
0xffffffc00009735c <+16>: str x19, [sp,#16]
0xffffffc000097360 <+20>: lsl x19, x0, #6
0xffffffc000097364 <+24>: sub x0, x19, x0, lsl #3
0xffffffc000097368 <+28>: movk x1, #0xffff, lsl #48
0xffffffc00009736c <+32>: add x19, x0, x1
(gdb) directory src
Source directories searched: E:\CR\Hua\ALPS03716939\CPM2017092800062_20180116 _ke_log\ke_log@1@db.fatal.03.KE/src;$cdir;$cwd
(gdb) list __sync_icache_dcache
69 void __sync_icache_dcache(pte_t pte, unsigned long addr)
70 {
71 struct page *page = pte_page(pte);
72
73 /* no flushing needed for anonymous pages */
74 if (!page_mapping(page))
75 return;
76
77 if (!test_and_set_bit(PG_dcache_clean, &page->flags)) {
78 __flush_dcache_area(page_address(page),
(gdb)
79 PAGE_SIZE << compound_order(page));
80 __flush_icache_all();
81 } else if (icache_is_aivivt()) {
82 __flush_icache_all();
83 }
84 }
(gdb) p page
$2 = (struct page *) 0xffffffbe015675c0
(gdb) x/16x 0xffffffbe015675c0
0xffffffbe015675c0: 0x02800201 0x00000000 0x7451f740 0xffffffd8
0xffffffbe015675d0: 0x00000000 0x00000000 0x00000000 0x00000002
0xffffffbe015675e0: 0x00000100 0x00000000 0x00000200 0x00000000
0xffffffbe015675f0: 0x00000000 0x00000000 0x00000080 0x00000000
(gdb) p {struct page}0xffffffbe015675c0
$6 = {flags = 41943553, {mapping = 0xffffffd87451f740,
s_mem = 0xffffffd87451f740}, {{index = 0, freelist = 0x0,
pfmemalloc = false}, {counters = 0, {{_mapcount = {counter = 0}, {
inuse = 0, objects = 0, frozen = 0}, units = 0}, _count = {
counter = 2}}, active = 0}}, {lru = {next = 0x100, prev = 0x200}, {
next = 0x100, pages = 512, pobjects = 0}, slab_page = 0x100,
callback_head = {next = 0x100, func = 0x200}}, {private = 0, ptl = {{
rlock = {raw_lock = {owner = 0, next = 0}}}}, slab_cache = 0x0,
first_page = 0x0}}