Commit 926b28984da035ac407e6b8f22ee8b4f94f51cf1

Authored by Pekka Enberg
Committed by Linus Torvalds
1 parent 0a920b5b66

Documentation: How to use GDB to decode OOPSes

Adds instructions how to use GDB to figure out the exact location of
an OOPS to Documentation/BUG-HUNTING.

Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 24 additions and 0 deletions Side-by-side Diff

Documentation/BUG-HUNTING
... ... @@ -191,6 +191,30 @@
191 191 > mov 0x8(%ebp), %ebx ! %ebx = skb->sk
192 192 > mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt
193 193  
  194 +In addition, you can use GDB to figure out the exact file and line
  195 +number of the OOPS from the vmlinux file. If you have
  196 +CONFIG_DEBUG_INFO enabled, you can simply copy the EIP value from the
  197 +OOPS:
  198 +
  199 + EIP: 0060:[<c021e50e>] Not tainted VLI
  200 +
  201 +And use GDB to translate that to human-readable form:
  202 +
  203 + gdb vmlinux
  204 + (gdb) l *0xc021e50e
  205 +
  206 +If you don't have CONFIG_DEBUG_INFO enabled, you use the function
  207 +offset from the OOPS:
  208 +
  209 + EIP is at vt_ioctl+0xda8/0x1482
  210 +
  211 +And recompile the kernel with CONFIG_DEBUG_INFO enabled:
  212 +
  213 + make vmlinux
  214 + gdb vmlinux
  215 + (gdb) p vt_ioctl
  216 + (gdb) l *(0x<address of vt_ioctl> + 0xda8)
  217 +
194 218 Another very useful option of the Kernel Hacking section in menuconfig is
195 219 Debug memory allocations. This will help you see whether data has been
196 220 initialised and not set before use etc. To see the values that get assigned