From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3260 invoked by alias); 26 May 2005 02:35:52 -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 3238 invoked by uid 22791); 26 May 2005 02:35:45 -0000 Received: from cpe-144-131-103-49.nsw.bigpond.net.au (HELO takamaka.act-europe.fr) (144.131.103.49) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Thu, 26 May 2005 02:35:45 +0000 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id 9EB3347958; Thu, 26 May 2005 12:35:39 +1000 (EST) Date: Thu, 26 May 2005 03:14:00 -0000 From: Joel Brobecker To: Richard Henderson Cc: gdb-patches@gcc.gnu.org Subject: Re: [testsuite/alpha] Add test for step over fbne instruction Message-ID: <20050526023539.GL1525@adacore.com> References: <20050525064819.GA5406@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="eHhjakXzOLJAF9wJ" Content-Disposition: inline In-Reply-To: <20050525064819.GA5406@redhat.com> User-Agent: Mutt/1.4i X-SW-Source: 2005-05/txt/msg00548.txt.bz2 --eHhjakXzOLJAF9wJ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1112 > > Thanks for the couple of suggestions. Is the attached better? > > Yes, though I'm confused as to why you didn't use the 4 or 5 insn > hand-coded routine that I gave you, which is more like what you would > get from the compiler with -O2 -ffast-math. Because I'm lazy? ;-). Seriously, that was a good suggestion, and I have now used it in this iteration of the testcase. I took this opportunity to actually test all forms of FP branch instructions, with branch taken and branch not taken. That way, that should cover most cases. I left the edge cases for another time. 2005-05-20 Joel Brobecker * gdb.arch/alpha-step.c: New file. * gdb.arch/alpha-step.exp: New testcase. Tested on alpha-tru64 5.1a. We now have 21 FAILs revealed by this testcase. Before the following patch was applied, we had 30. http://sources.redhat.com/ml/gdb-patches/2005-05/msg00479.html I used an ancient version of GDB, before the switch to software single-step was made, and I have an all PASS. Will investigate the FAILs as soon as possible. OK to apply? Thanks, -- Joel --eHhjakXzOLJAF9wJ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="alpha-step.c" Content-length: 3061 /* Copyright 2005 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ void gt (double a); int main (void) { gt (360.0); gt (-360.0); ge (360.0); ge (-360.0); lt (-360.0); lt (360.0); le (-360.0); le (360.0); eq (0.0); eq (360.0); ne (360.0); ne (0.0); return 0; } asm (" .text\n" " .ent gt\n" "gt:\n" " .frame $30,0,$26,0\n" " .prologue 0\n" " cpys $f31,$f31,$f0\n" " fbgt $f16,$gt_1\n" /* stop at this instruction. */ " cpysn $f16,$f16,$f0\n" "$gt_1:\n" " ret $31,($26),1\n" " .end gt\n"); asm (" .text\n" " .ent ge\n" "ge:\n" " .frame $30,0,$26,0\n" " .prologue 0\n" " cpys $f31,$f31,$f0\n" " fbge $f16,$ge_1\n" /* stop at this instruction. */ " cpysn $f16,$f16,$f0\n" "$ge_1:\n" " ret $31,($26),1\n" " .end ge\n"); asm (" .text\n" " .ent lt\n" "lt:\n" " .frame $30,0,$26,0\n" " .prologue 0\n" " cpys $f31,$f31,$f0\n" " fblt $f16,$lt_1\n" /* stop at this instruction. */ " cpysn $f16,$f16,$f0\n" "$lt_1:\n" " ret $31,($26),1\n" " .end lt\n"); asm (" .text\n" " .ent le\n" "le:\n" " .frame $30,0,$26,0\n" " .prologue 0\n" " cpys $f31,$f31,$f0\n" " fble $f16,$le_1\n" /* stop at this instruction. */ " cpysn $f16,$f16,$f0\n" "$le_1:\n" " ret $31,($26),1\n" " .end le\n"); asm (" .text\n" " .ent eq\n" "eq:\n" " .frame $30,0,$26,0\n" " .prologue 0\n" " cpys $f31,$f31,$f0\n" " fbeq $f16,$eq_1\n" /* stop at this instruction. */ " cpysn $f16,$f16,$f0\n" "$eq_1:\n" " ret $31,($26),1\n" " .end eq\n"); asm (" .text\n" " .ent ne\n" "ne:\n" " .frame $30,0,$26,0\n" " .prologue 0\n" " cpys $f31,$f31,$f0\n" " fbne $f16,$ne_1\n" /* stop at this instruction. */ " cpysn $f16,$f16,$f0\n" "$ne_1:\n" " ret $31,($26),1\n" " .end ne\n"); --eHhjakXzOLJAF9wJ Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="alpha-step.exp" Content-length: 3797 # Copyright 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. if $tracelevel { strace $tracelevel } set prms_id 0 set bug_id 0 if ![istarget "alpha*-*-*"] then { verbose "Skipping alpha step tests." return } set testfile "alpha-step" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {}] != "" } { unsupported "Testcase compile failed." return -1 } gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} proc test_stepi {function } { # Restart the program from scratch. If GDB got confused during one # of the previous tests, this makes sure that it doesn't affect # this series of tests. if ![runto_main] then { fail "Can't run to main" return 0 } # Insert a breakpoint on the FP branch instruction inside FUNCTION. # Since the function has been hand written, we know this instruction # is a "fb$function" located at FUNCTION+4. gdb_test "break *$function+4" \ "Breakpoint .* at .*" \ "breakpoint on fb$function instruction" gdb_test "continue" \ "Breakpoint .*, 0x\[0-9a-fA-F\]+ in $function\(\).*" \ "continue to fb$function instruction (first call)" # Extra check to make sure we stopped on the FP branch instruction. gdb_test "x /i \$pc" \ "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fb$function\[ \t\]+.*" \ "Check breakpoint on fb$function instruction (first call)" # Step test, followed by the check that we landed on the expected # instruction (the testcase should be written in such a way that # the branch is taken on the first call to this function. gdb_test "stepi" \ "0x\[0-9a-fA-F\]+.*" \ "stepi on fb$function (first call)" gdb_test "x /i \$pc" \ "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+ret\[ \t\]+.*" \ "Check stepi over fb$function stopped on ret" # Continue again. FUNCTION should be called a second time, this time # with an argument such that the FP branch will not be taken. gdb_test "continue" \ "Breakpoint .*, 0x\[0-9a-fA-F\]+ in $function\(\).*" \ "continue to fb$function instruction (second call)" # Extra check to make sure we stopped on the FP branch instruction. gdb_test "x /i \$pc" \ "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fb$function\[ \t\]+.*" \ "Check breakpoint on fb$function instruction (second call)" # Step test, branch should not be taken. gdb_test "stepi" \ "0x\[0-9a-fA-F\]+.*" \ "stepi on fb$function (branch not taken)" # Extra check to verify that we landed on the instruction we expected. gdb_test "x /i \$pc" \ "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fneg\[ \t\]+.*" \ "Check stepi over fb$function stopped on fneg instruction" } test_stepi "gt" test_stepi "ge" test_stepi "lt" test_stepi "le" test_stepi "eq" test_stepi "ne" --eHhjakXzOLJAF9wJ--