Commit 926b28984da035ac407e6b8f22ee8b4f94f51cf1
Committed by
Linus Torvalds
1 parent
0a920b5b66
Exists in
master
and in
4 other branches
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 |