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

Problem with GDB when debugging IRQ handlers

From: Dmitry Eremin-Solenikov <hidden>
Date: 2011-06-29 11:20:58

On 6/29/11, Catalin Marinas [off-list ref] wrote:
On Tue, Jun 28, 2011 at 11:26:28PM +0100, Dmitry Eremin-Solenikov wrote:
quoted
On 6/28/11, Catalin Marinas [off-list ref] wrote:
quoted
On Tue, Jun 28, 2011 at 04:45:52PM +0100, Dmitry Eremin-Solenikov wrote:
quoted
 	.macro	svc_entry, stack_hole=0
  UNWIND(.fnstart		)
+	.cfi_startproc
  UNWIND(.save {r0 - pc}		)
 	sub	sp, sp, #(S_FRAME_SIZE + \stack_hole - 4)
 #ifdef CONFIG_THUMB2_KERNEL
@@ -146,6 +148,24 @@ ENDPROC(__und_invalid)
 	@  r4 - orig_r0 (see pt_regs definition in ptrace.h)
 	@
 	stmia	r5, {r0 - r4}
+	.cfi_def_cfa_offset S_PC + 4
+	.cfi_offset 14, -4
+#define	CFI_REG_OFF(r) .cfi_offset r, (r - 16) * 4
+	CFI_REG_OFF(13)
+	CFI_REG_OFF(12)
+	CFI_REG_OFF(11)
+	CFI_REG_OFF(10)
+	CFI_REG_OFF(9)
+	CFI_REG_OFF(8)
+	CFI_REG_OFF(7)
+	CFI_REG_OFF(6)
+	CFI_REG_OFF(5)
+	CFI_REG_OFF(4)
+	CFI_REG_OFF(3)
+	CFI_REG_OFF(2)
+	CFI_REG_OFF(1)
+	CFI_REG_OFF(0)
+#undef CFI_REG_OFF
 	.endm
Do we need all the registers in here for gdb stack unwinding? In general
we would only need LR, SP and FP.
CFI info isn't only related to stack unwinding. IIUC (I'll have to run
more experiments) these instrutions will help me to get correct
variables/arguments values in the before-exception stack frames.
OK, in this case we may need to add some annotations. You could actually
generate a .s file from and existing C one (including -g) and see what
.cfi directives it generates.
Yes, that actually gave me some ideas. Unfortunately entry*.S files are
a bit ... uncommon, so there are nearly no 1-1 cases. BTW: It seems x86
has .cfi annotations connected to most if not all assembler commands.
I think this is a bit too much, but you got the idea.

-- 
With best wishes
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help