From 0915f927adbf740ae6b4192d0378091163024b03 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Sun, 29 May 2005 01:58:53 +0000 Subject: [PATCH] * gdb.arch/alpha-step.c: New file. * gdb.arch/alpha-step.exp: New testcase. --- gdb/testsuite/ChangeLog | 5 ++ gdb/testsuite/gdb.arch/alpha-step.c | 118 ++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.arch/alpha-step.exp | 114 ++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 gdb/testsuite/gdb.arch/alpha-step.c create mode 100644 gdb/testsuite/gdb.arch/alpha-step.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 3578856..3bc7c7e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-05-29 Joel Brobecker + + * gdb.arch/alpha-step.c: New file. + * gdb.arch/alpha-step.exp: New testcase. + 2005-05-17 Daniel Jacobowitz Dennis Brueni diff --git a/gdb/testsuite/gdb.arch/alpha-step.c b/gdb/testsuite/gdb.arch/alpha-step.c new file mode 100644 index 0000000..dc477df --- /dev/null +++ b/gdb/testsuite/gdb.arch/alpha-step.c @@ -0,0 +1,118 @@ +/* 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"); + + diff --git a/gdb/testsuite/gdb.arch/alpha-step.exp b/gdb/testsuite/gdb.arch/alpha-step.exp new file mode 100644 index 0000000..40dcb0b --- /dev/null +++ b/gdb/testsuite/gdb.arch/alpha-step.exp @@ -0,0 +1,114 @@ +# 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" + -- 2.7.4