Thread (24 messages) 24 messages, 5 authors, 2011-06-29

Problem with GDB when debugging IRQ handlers

From: Yao Qi <hidden>
Date: 2011-06-27 14:58:59

On 06/27/2011 10:04 PM, Dmitry Eremin-Solenikov wrote:
Hello,

On 27.06.2011 17:27, Russell King - ARM Linux wrote:
quoted
On Mon, Jun 27, 2011 at 04:53:06PM +0400, Dmitry Eremin-Solenikov wrote:
quoted
I've got into a problem when trying to debug irq handlers on PXA (in
qemu). backtrace is really strange from my POV (a target is just a qemu
running a bit modified 3.0-rc2 kernel):
...
quoted
Breakpoint 1, handle_level_irq (irq=42, desc=0xc3e06000) at
kernel/irq/chip.c:329
329        mask_ack_irq(desc);
(gdb) bt
#0  handle_level_irq (irq=42, desc=0xc3e06000) at kernel/irq/chip.c:329
#1  0xc0085f64 in generic_handle_irq_desc (irq=42) at
include/linux/irqdesc.h:111
#2  generic_handle_irq (irq=42) at kernel/irq/irqdesc.c:304
#3  0xc0033060 in asm_do_IRQ (irq=42, regs=<value optimized out>) at
arch/arm/kernel/irq.c:90
#4  0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#5  0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#6  0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#7  0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#8  0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#9  0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#10 0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#11 0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202
#12 0xc0033b50 in __irq_svc () at arch/arm/kernel/entry-armv.S:202

... and so on it continues ad infinitum. Is it the expected behaviour?
Because I'm pretty much sure that this isn't a desired behaviour.
Usually, if debugging information is not there, GDB will try to unwind
stacks by analyzing function's prologue.  It looks arm prologue analyzer
goes into an endless loop, because of (I guess) the irregular register
usage in low-level kernel asm code.

arm/gdb's prologue analyzer can handle common code, but I am afraid it
is unable to handle kernel-specific code, unless we make gdb
kernel-aware.  At least, we may teach gdb to stop at __irq_svc.

Please file a bug report against gdb, and post the disassembly of
__irq_svc in bug report.
quoted
We _really_ _do_ want to unwind through this so that we can see the
parent kernel context information in backtraces - and the fact that
I am not sure GDB is able to unwind stacks across processes (from child
to parent).

-- 
Yao (??)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help