From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8420 invoked by alias); 28 Jun 2011 14:29:05 -0000 Received: (qmail 8410 invoked by uid 22791); 28 Jun 2011 14:29:05 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-ww0-f43.google.com (HELO mail-ww0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 28 Jun 2011 14:28:45 +0000 Received: by wwi18 with SMTP id 18so215807wwi.12 for ; Tue, 28 Jun 2011 07:28:44 -0700 (PDT) Received: by 10.227.135.9 with SMTP id l9mr5575460wbt.34.1309271324214; Tue, 28 Jun 2011 07:28:44 -0700 (PDT) Received: from 1n450.cable.virginmedia.net (cpc3-cmbg12-0-0-cust651.5-4.cable.virginmedia.com [86.9.126.140]) by mx.google.com with ESMTPS id gg16sm197605wbb.34.2011.06.28.07.28.42 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 28 Jun 2011 07:28:43 -0700 (PDT) Date: Tue, 28 Jun 2011 14:29:00 -0000 From: Catalin Marinas To: Dmitry Eremin-Solenikov Cc: Russell King - ARM Linux , Yao Qi , Eric Miao , linux-arm-kernel@lists.infradead.org, gdb@sourceware.org Subject: Re: Problem with GDB when debugging IRQ handlers Message-ID: <20110628143014.GD7255@1n450.cable.virginmedia.net> References: <20110627125306.GA30646@doriath.ww600.siemens.net> <20110627132735.GE16103@n2100.arm.linux.org.uk> <4E088DE1.2060809@gmail.com> <4E089AB3.1090801@codesourcery.com> <20110628103946.GC21898@n2100.arm.linux.org.uk> <20110628142045.GC7255@1n450.cable.virginmedia.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20110628142045.GC7255@1n450.cable.virginmedia.net> User-Agent: Mutt/1.5.20 (2009-06-14) Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-06/txt/msg00158.txt.bz2 On Tue, Jun 28, 2011 at 03:20:45PM +0100, Catalin Marinas wrote: > On Tue, Jun 28, 2011 at 04:06:11PM +0400, Dmitry Eremin-Solenikov wrote: > > On 6/28/11, Russell King - ARM Linux wrote: > > I did some checks. It seems, the problem isn't related to unwinder. At least > > it looks like kernel has all necessary unwinding subops. It looks like the > > problem is really related to the lack of necessary .cfi information. At least > > when i added .cfi_startproc/.cfi_endproc annotations to entry-armv.S code, > > gdb stopped decoding backtrace with the "previous frame identical to this frame" > > error. Unfortunately I don't have enough knowledge to add .cfi annotations to > > irq handlers. > > I think it may have stopped decoding because of some information it > reads from the stack doesn't look sane. But I wonder whether we could > get it looping again depending on the register values in the interrupted > context. > > > diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S > > index e8d8856..d77f9d7 100644 > > --- a/arch/arm/kernel/entry-armv.S > > +++ b/arch/arm/kernel/entry-armv.S > > @@ -28,6 +28,7 @@ > > #include "entry-header.S" > > #include > > > > + .cfi_sections .debug_frame > > /* > > * Interrupt handling. Preserves r7, r8, r9 > > */ > > @@ -113,6 +114,7 @@ ENDPROC(__und_invalid) > > > > .macro svc_entry, stack_hole=0 > > UNWIND(.fnstart ) > > + .cfi_startproc > > UNWIND(.save {r0 - pc} ) > > sub sp, sp, #(S_FRAME_SIZE + \stack_hole - 4) > > Could you add some directives like below in the svc_entry macro (after > "sub sp...", not sure if it matters) and check whether gdb behaves > better: > > .cfi_def_cfa_offset S_PC > .cfi_offset 14, -4 Actually since the return address is in S_PC (which maybe gdb assumes it would be the saved LR), this is probably not be correct. After SVC entry, we have he following structure on the stack: ORIG_r0 CPSR <--- assuming this is the Call Frame Address (SP+S_PC+4) PC <--- CFA - 4 LR <--- don't care SP <--- CFA - 12 ... So we tell gdb about this with something like below (untested): .cfi_def_cfa_offset S_PC + 4 .cfi_offset 14, -4 .cfi_offset 13, -12 -- Catalin