From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5754 invoked by alias); 24 Mar 2004 15:11:39 -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 5739 invoked from network); 24 Mar 2004 15:11:37 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 24 Mar 2004 15:11:37 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i2OFBbWA001266 for ; Wed, 24 Mar 2004 10:11:37 -0500 Received: from zenia.home.redhat.com (porkchop.devel.redhat.com [172.16.58.2]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i2OFBaj22820; Wed, 24 Mar 2004 10:11:36 -0500 To: gdb-patches@sources.redhat.com Subject: RFA: recognize new instructions in rs6000 prologues From: Jim Blandy Date: Wed, 24 Mar 2004 15:11:00 -0000 Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2004-03/txt/msg00559.txt.bz2 These prologues are generated by a not-yet-released compiler, but the test suite does catch the problem. 2004-02-25 Jim Blandy * rs6000-tdep.c (skip_prologue): Recognize moves from argument registers to temp register r0 and byte stores as prologue instructions. *** gdb/rs6000-tdep.c.~2~ 2004-02-25 15:14:13.000000000 -0500 --- gdb/rs6000-tdep.c 2004-02-25 15:15:43.000000000 -0500 *************** *** 772,777 **** --- 772,785 ---- /* store parameters in stack */ } + /* Move parameters from argument registers to temporary register. */ + else if ((op & 0xfc0007fe) == 0x7c000378 && /* mr(.) Rx,Ry */ + (((op >> 21) & 31) >= 3) && /* R3 >= Ry >= R10 */ + (((op >> 21) & 31) <= 10) && + (((op >> 16) & 31) == 0)) /* Rx: scratch register r0 */ + { + continue; + } else if ((op & 0xfc1f0003) == 0xf8010000 || /* std rx,NUM(r1) */ (op & 0xfc1f0000) == 0xd8010000 || /* stfd Rx,NUM(r1) */ (op & 0xfc1f0000) == 0xfc010000) /* frsp, fp?,NUM(r1) */ *************** *** 781,790 **** /* store parameters in stack via frame pointer */ } else if (framep && ! ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r1) */ ! (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r1) */ ! (op & 0xfc1f0000) == 0xfc1f0000)) ! { /* frsp, fp?,NUM(r1) */ continue; /* Set up frame pointer */ --- 789,799 ---- /* store parameters in stack via frame pointer */ } else if (framep && ! ((op & 0xfc1f0000) == 0x901f0000 || /* st rx,NUM(r31) */ ! (op & 0xfc1f0000) == 0x981f0000 || /* stb Rx,NUM(r31) */ ! (op & 0xfc1f0000) == 0xd81f0000 || /* stfd Rx,NUM(r31) */ ! (op & 0xfc1f0000) == 0xfc1f0000)) /* frsp, fp?,NUM(r31) */ ! { continue; /* Set up frame pointer */