From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1204 invoked by alias); 1 Sep 2003 15:45:16 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 1148 invoked from network); 1 Sep 2003 15:45:13 -0000 Received: from unknown (HELO dublin.act-europe.fr) (212.157.227.154) by sources.redhat.com with SMTP; 1 Sep 2003 15:45:13 -0000 Received: from localhost (localhost [127.0.0.1]) by amavis.act-europe.fr (Postfix) with ESMTP id 92A8F229EB4 for ; Mon, 1 Sep 2003 17:45:12 +0200 (MET DST) Received: from dublin.act-europe.fr ([127.0.0.1]) by localhost (dublin.act-europe.fr [127.0.0.1:10024]) (amavisd-new) with ESMTP id 29352-06 for ; Mon, 1 Sep 2003 17:45:11 +0200 (MET DST) Received: from berne.int.act-europe.fr (berne.act-europe.fr [10.10.0.165]) by dublin.act-europe.fr (Postfix) with ESMTP id AAFF2229EB2 for ; Mon, 1 Sep 2003 17:45:10 +0200 (MET DST) Received: by berne.int.act-europe.fr (Postfix, from userid 560) id 99DFE5929; Mon, 1 Sep 2003 11:16:41 -0400 (EDT) Date: Mon, 01 Sep 2003 15:45:00 -0000 From: Jerome Guitton To: gdb-patches@sources.redhat.com Subject: Ping: [RFA] ARM : prologue scan Message-ID: <20030901151641.GA23016@act-europe.fr> References: <20030721142742.GA3621@act-europe.fr> <20030722114709.GB3100@act-europe.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030722114709.GB3100@act-europe.fr> User-Agent: Mutt/1.4i X-Virus-Scanned: by amavisd-new X-SW-Source: 2003-09/txt/msg00003.txt.bz2 No reaction about this patch... Any opinion from the ARM maintainers? This patch should not interfere with Daniel Jacobowitz' work to modernize the arm-tdep.c. Jerome Guitton (guitton@act-europe.fr): > > I have done some minor corrections on the previous patch, discard it. > In attachment, the new version. No regression, no fixed. > > -- > Jerome. > 2003-07-21 J. Guitton > > * arm-tdep.c (arm_skip_prologue): Add the handling of "sub ip, sp #n" > and "add ip, sp #n", as these instructions can be found in a ATPCS > compliant prologue. > (arm_scan_prologue): Ditto. > > Index: arm-tdep.c > =================================================================== > RCS file: /cvs/src/src/gdb/arm-tdep.c,v > retrieving revision 1.143 > diff -u -3 -p -r1.143 arm-tdep.c > --- arm-tdep.c 13 Jun 2003 14:15:51 -0000 1.143 > +++ arm-tdep.c 22 Jul 2003 11:43:10 -0000 > @@ -449,6 +449,12 @@ arm_skip_prologue (CORE_ADDR pc) > if (inst == 0xe1a0c00d) /* mov ip, sp */ > continue; > > + if ((inst & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */ > + continue; > + > + if ((inst & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */ > + continue; > + > /* Some prologues begin with "str lr, [sp, #-4]!". */ > if (inst == 0xe52de004) /* str lr, [sp, #-4]! */ > continue; > @@ -708,7 +714,7 @@ thumb_scan_prologue (struct frame_info * > static void > arm_scan_prologue (struct frame_info *fi) > { > - int regno, sp_offset, fp_offset; > + int regno, sp_offset, fp_offset, ip_offset; > LONGEST return_value; > CORE_ADDR prologue_start, prologue_end, current_pc; > > @@ -799,7 +805,7 @@ arm_scan_prologue (struct frame_info *fi > in which case it is often (but not always) replaced by > "str lr, [sp, #-4]!". - Michael Snyder, 2002-04-23] */ > > - sp_offset = fp_offset = 0; > + sp_offset = fp_offset = ip_offset = 0; > > for (current_pc = prologue_start; > current_pc < prologue_end; > @@ -809,6 +815,23 @@ arm_scan_prologue (struct frame_info *fi > > if (insn == 0xe1a0c00d) /* mov ip, sp */ > { > + ip_offset = 0; > + continue; > + } > + else if ((insn & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */ > + { > + unsigned imm = insn & 0xff; /* immediate value */ > + unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */ > + imm = (imm >> rot) | (imm << (32 - rot)); > + ip_offset = imm; > + continue; > + } > + else if ((insn & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */ > + { > + unsigned imm = insn & 0xff; /* immediate value */ > + unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */ > + imm = (imm >> rot) | (imm << (32 - rot)); > + ip_offset = -imm; > continue; > } > else if (insn == 0xe52de004) /* str lr, [sp, #-4]! */ > @@ -850,7 +873,7 @@ arm_scan_prologue (struct frame_info *fi > unsigned imm = insn & 0xff; /* immediate value */ > unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */ > imm = (imm >> rot) | (imm << (32 - rot)); > - fp_offset = -imm; > + fp_offset = -imm + ip_offset; > get_frame_extra_info (fi)->framereg = ARM_FP_REGNUM; > } > else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */