Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Re: [testsuite/alpha] Add test for step over fbne instruction
@ 2005-05-25 15:09 Richard Henderson
  2005-05-26  3:14 ` Joel Brobecker
  0 siblings, 1 reply; 11+ messages in thread
From: Richard Henderson @ 2005-05-25 15:09 UTC (permalink / raw)
  To: gdb-patches

> 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.

In particular, using your -O0 compiler generated version doesn't let
you *actually* test the edge conditions of fbge, should you wish to
do so.  E.g. passing in -0.0, NaN, +Inf, 0x0.0000000000001p-1022, etc.


r~


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-25 15:09 [testsuite/alpha] Add test for step over fbne instruction Richard Henderson
@ 2005-05-26  3:14 ` Joel Brobecker
  2005-05-26  3:27   ` Richard Henderson
  2005-05-28 22:10   ` Daniel Jacobowitz
  0 siblings, 2 replies; 11+ messages in thread
From: Joel Brobecker @ 2005-05-26  3:14 UTC (permalink / raw)
  To: Richard Henderson; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1112 bytes --]

> > 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  <brobecker@adacore.com>

        * 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

[-- Attachment #2: alpha-step.c --]
[-- Type: text/plain, Size: 3061 bytes --]

/* 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");



[-- Attachment #3: alpha-step.exp --]
[-- Type: text/plain, Size: 3797 bytes --]

# 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"


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-26  3:14 ` Joel Brobecker
@ 2005-05-26  3:27   ` Richard Henderson
  2005-05-26  3:41     ` Daniel Jacobowitz
  2005-05-26  5:02     ` Joel Brobecker
  2005-05-28 22:10   ` Daniel Jacobowitz
  1 sibling, 2 replies; 11+ messages in thread
From: Richard Henderson @ 2005-05-26  3:27 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Thu, May 26, 2005 at 12:35:39PM +1000, Joel Brobecker wrote:
>      "       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"

Hmm, now that I think about it, one potential problem with this form
is that we're not correctly testing for branch taken.  The scenerio
is that we expect taken, set the bp on the ret, the branch *isn't*
taken, but we fall through to the ret anyway.

We'd do better to write this

       "       fbgt $f16,$gt_1\n"      /* stop at this instruction.  */
       "       cpysn $f16,$f16,$f0\n"
       "       ret $31,($26),1\n"
       "$gt_1:\n"
       "       ret $31,($26),1\n"

so that if we choose wrong, we will in fact lose control.


r~


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-26  3:27   ` Richard Henderson
@ 2005-05-26  3:41     ` Daniel Jacobowitz
  2005-05-26  5:02     ` Joel Brobecker
  1 sibling, 0 replies; 11+ messages in thread
From: Daniel Jacobowitz @ 2005-05-26  3:41 UTC (permalink / raw)
  To: Richard Henderson; +Cc: Joel Brobecker, gdb-patches

On Wed, May 25, 2005 at 08:11:28PM -0700, Richard Henderson wrote:
> On Thu, May 26, 2005 at 12:35:39PM +1000, Joel Brobecker wrote:
> >      "       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"
> 
> Hmm, now that I think about it, one potential problem with this form
> is that we're not correctly testing for branch taken.  The scenerio
> is that we expect taken, set the bp on the ret, the branch *isn't*
> taken, but we fall through to the ret anyway.
> 
> We'd do better to write this
> 
>        "       fbgt $f16,$gt_1\n"      /* stop at this instruction.  */
>        "       cpysn $f16,$f16,$f0\n"
>        "       ret $31,($26),1\n"
>        "$gt_1:\n"
>        "       ret $31,($26),1\n"
> 
> so that if we choose wrong, we will in fact lose control.

Then the testsuite is likely to get out of sync - either way, we need
to do a little dance to recover.  Joel, how about checking to see that
the instruction we've stopped on is the correct one - how much would
that complicate the test?

-- 
Daniel Jacobowitz
CodeSourcery, LLC


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-26  3:27   ` Richard Henderson
  2005-05-26  3:41     ` Daniel Jacobowitz
@ 2005-05-26  5:02     ` Joel Brobecker
  2005-05-26  6:04       ` Daniel Jacobowitz
  1 sibling, 1 reply; 11+ messages in thread
From: Joel Brobecker @ 2005-05-26  5:02 UTC (permalink / raw)
  To: Richard Henderson; +Cc: gdb-patches

> Hmm, now that I think about it, one potential problem with this form
> is that we're not correctly testing for branch taken.  The scenerio
> is that we expect taken, set the bp on the ret, the branch *isn't*
> taken, but we fall through to the ret anyway.

I think we do test both possibilities. That's because I verify that
we landed on the correct instruction after the stepi:

    # 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"

(I think this is what Daniel was suggesting).

When the branch is not taken, we do the following test:

    gdb_test "x /i \$pc" \
             "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fneg\[ \t\]+.*" \
             "Check stepi over fb$function stopped on fneg instruction"


-- 
Joel


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-26  5:02     ` Joel Brobecker
@ 2005-05-26  6:04       ` Daniel Jacobowitz
  0 siblings, 0 replies; 11+ messages in thread
From: Daniel Jacobowitz @ 2005-05-26  6:04 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: Richard Henderson, gdb-patches

On Thu, May 26, 2005 at 01:44:16PM +1000, Joel Brobecker wrote:
> (I think this is what Daniel was suggesting).

Yes - I read through your tests and couldn't spot this.  Must be almost
midnight here... yep...

-- 
Daniel Jacobowitz
CodeSourcery, LLC


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-26  3:14 ` Joel Brobecker
  2005-05-26  3:27   ` Richard Henderson
@ 2005-05-28 22:10   ` Daniel Jacobowitz
  2005-05-29  2:53     ` Joel Brobecker
  1 sibling, 1 reply; 11+ messages in thread
From: Daniel Jacobowitz @ 2005-05-28 22:10 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: Richard Henderson, gdb-patches

On Thu, May 26, 2005 at 12:35:39PM +1000, Joel Brobecker wrote:
> > > 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  <brobecker@adacore.com>
> 
>         * 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?

This is OK.


-- 
Daniel Jacobowitz
CodeSourcery, LLC


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-28 22:10   ` Daniel Jacobowitz
@ 2005-05-29  2:53     ` Joel Brobecker
  0 siblings, 0 replies; 11+ messages in thread
From: Joel Brobecker @ 2005-05-29  2:53 UTC (permalink / raw)
  To: Richard Henderson, gdb-patches

> > 2005-05-20  Joel Brobecker  <brobecker@adacore.com>
> > 
> >         * gdb.arch/alpha-step.c: New file.
> >         * gdb.arch/alpha-step.exp: New testcase.
> > 
> This is OK.

Thank you, checked in.

-- 
Joel


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-20 11:31 ` Richard Henderson
@ 2005-05-25  5:15   ` Joel Brobecker
  0 siblings, 0 replies; 11+ messages in thread
From: Joel Brobecker @ 2005-05-25  5:15 UTC (permalink / raw)
  To: Richard Henderson; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 669 bytes --]

> .rdata is an ecoff thing; it won't work for elf systems.  I suggest
> that you pass in this data from main and leave the symbol work to 
> the compiler.  That is,

Thanks for the couple of suggestions. Is the attached better?

> I might also suggest that you test both branch directions.

Good idea, and it apparently revealed another problem with single
stepping. I will investigate that problem as soon as possible.

2005-05-25  Joel Brobecker  <brobecker@adacore.com>

        * gdb.arch/alpha-step.c: New file.
        * gdb.arch/alpha-step.exp: New testcase.

Tested on alpha-tru64 5.1a.
Currently shows 2 FAILs, which I will investigate asap.

Thanks,
-- 
Joel

[-- Attachment #2: alpha-step.c --]
[-- Type: text/plain, Size: 2319 bytes --]

/* 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);

  return 0;
}

/* gt(). Obtained from the following code:

        void
        gt (double a)
        {
          if (a > 0)
            a = 0.0;
          else
            a = -a;
        }

  The purpose of the test is to stop just before the check against
  zero, and do a stepi. GDB should step one instruction and stop,
  rather than letting the program continue until the it terminates.  */

asm("        .text\n"
    "        .align 2\n"
    "        .globl gt\n"
    "        .ent gt\n"
    "$gt..ng:\n"
    "gt:\n"
    "        .frame $15,32,$26,0\n"
    "        .mask 0x4008000,-32\n"
    "$SYMBOL_LM1:\n"
    "        lda $30,-32($30)\n"
    "        stq $26,0($30)\n"
    "        stq $15,8($30)\n"
    "        bis $31,$30,$15\n"
    "        .prologue 0\n"
    "        stt $f16,16($15)\n"
    "$SYMBOL_LM2:\n"
    "        ldt $f10,16($15)\n"
    "        cmptlt $f31,$f10,$f10\n"
    "        fbne $f10,$SYMBOL_L3\n"
    "        br $31,$SYMBOL_L2\n"
    "$SYMBOL_L3:\n"
    "$SYMBOL_LM3:\n"
    "        stt $f31,16($15)\n"
    "        br $31,$SYMBOL_L4\n"
    "$SYMBOL_L2:\n"
    "$SYMBOL_LM4:\n"
    "        ldt $f10,16($15)\n"
    "        cpysn $f10,$f10,$f10\n"
    "        stt $f10,16($15)\n"
    "$SYMBOL_L4:\n"
    "$SYMBOL_LM5:\n"
    "        bis $31,$15,$30\n"
    "        ldq $26,0($30)\n"
    "        ldq $15,8($30)\n"
    "        lda $30,32($30)\n"
    "        ret $31,($26),1\n"
    "        .end gt\n");


[-- Attachment #3: alpha-step.exp --]
[-- Type: text/plain, Size: 3366 bytes --]

# 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}

if ![runto_main] then {
    fail "Can't run to main"
    return 0
}

# Insert a breakpoint on a fbne instruction inside gt that we know is
# at gt+28 (the body of gt has been written in assembly, so can not
# change from compiler to compiler). This instruction will cause a jump
# of a couple of instructions forward. Verify that this jump does not
# confuse GDB when steping...

gdb_test "break *gt+28" \
         "Breakpoint 2 at .*" \
         "breakpoint on fbne instruction"

gdb_test "continue" \
         "Breakpoint 2, 0x\[0-9a-fA-F\]+ in gt().*" \
         "continue to fbne instruction"

# Extra check to make sure we stopped on the fbne instruction.

gdb_test "x /i \$pc" \
         "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fbne\[ \t\]+.*" \
         "Check breakpoint on fbne instruction"

# Step test, should not cause the inferior to run until completion.

gdb_test "stepi" \
         "0x\[0-9a-fA-F\]+.*" \
         "stepi on fbne"

# Extra check to verify that we landed on the instruction we expected
# (during the first call of this function, the argument is positive,
# so it should be an stt instruction).

gdb_test "x /i \$pc" \
         "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+stt\[ \t\]+.*" \
         "Check stopped on stt instruction"

# Continue again. gt() should be called a second time, this time with
# a negative parameter.

gdb_test "continue" \
         "Breakpoint 2, 0x\[0-9a-fA-F\]+ in gt().*" \
         "continue to fbne instruction (branch taken)"

# Extra check to make sure we stopped on the fbne instruction.

gdb_test "x /i \$pc" \
         "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fbne\[ \t\]+.*" \
         "Check breakpoint on fbne instruction"

# Step test, should not cause the inferior to run until completion.

gdb_test "stepi" \
         "0x\[0-9a-fA-F\]+.*" \
         "stepi on fbne (branch not taken)"

# Extra check to verify that we landed on the instruction we expected
# (during the second call of this function, the argument is negative,
# so it should be a br instruction).

gdb_test "x /i \$pc" \
         "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+br\[ \t\]+.*" \
         "Check stopped on br instruction"


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [testsuite/alpha] Add test for step over fbne instruction
  2005-05-20  7:02 Joel Brobecker
@ 2005-05-20 11:31 ` Richard Henderson
  2005-05-25  5:15   ` Joel Brobecker
  0 siblings, 1 reply; 11+ messages in thread
From: Richard Henderson @ 2005-05-20 11:31 UTC (permalink / raw)
  To: Joel Brobecker; +Cc: gdb-patches

On Fri, May 20, 2005 at 01:42:54PM +1000, Joel Brobecker wrote:
> int
> main (void)
> {
>   gt ();
> 
>   return 0;
> }
> 
> /* gt(). Obtained from the following code:
> 
>    void
>    gt (void)
>    {
>      double a = 360.0;
>    
>      if (a > 0)
>        a = 0.0;
>      else
>        a = -a;
>    }
> 
>   The purpose of the test is to stop just before the check against
>   zero, and do a stepi. GDB should step one instruction and stop,
>   rather than letting the program continue until the it terminates.  */
> 
> asm("        .rdata\n"
>     "        .align 3\n"

.rdata is an ecoff thing; it won't work for elf systems.  I suggest
that you pass in this data from main and leave the symbol work to 
the compiler.  That is,

	extern double gt(double);
	int main ()
	{
	  gt (360.0);
	  gt (-360.0);
	  return 0;
	}

	/* double gt(double a)
	   {
	     if (a > 0)
	       a = 0;
	     else
	       a = -a;
	     return a;
	   }
	*/

	asm (
	"	.text\n"
	"	.ent gt\n"
	"gt:\n"
	"	.frame $30,0,$26,0"
	"	.prologue 0\n"
	"	cpys $f31,$f31,$f0\n"
	"	fble $f16,$gt_1\n"	/* stop at this instruction.  */
	"	cpysn $f16,$f16,$f0\n"
	"$gt_1:\n"
	"	ret $31,($26),1\n"
	"        .end gt\n");

I might also suggest that you test both branch directions.


r~


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [testsuite/alpha] Add test for step over fbne instruction
@ 2005-05-20  7:02 Joel Brobecker
  2005-05-20 11:31 ` Richard Henderson
  0 siblings, 1 reply; 11+ messages in thread
From: Joel Brobecker @ 2005-05-20  7:02 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 418 bytes --]

This is the testcase associated to the following patch:

        http://sources.redhat.com/ml/gdb-patches/2005-05/msg00479.html

Without the patch above, the last two tests fail. With the patch, all
tests pass.

2005-05-20  Joel Brobecker  <brobecker@adacore.com>

        * gdb.arch/alpha-step.c: New file.
        * gdb.arch/alpha-step.exp: New testcase.

Tested on alpha-tru64 5.1a.
OK to commit?

Thanks,
-- 
Joel

[-- Attachment #2: alpha-step.c --]
[-- Type: text/plain, Size: 2561 bytes --]

/* 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 (void);

int
main (void)
{
  gt ();

  return 0;
}

/* gt(). Obtained from the following code:

   void
   gt (void)
   {
     double a = 360.0;
   
     if (a > 0)
       a = 0.0;
     else
       a = -a;
   }

  The purpose of the test is to stop just before the check against
  zero, and do a stepi. GDB should step one instruction and stop,
  rather than letting the program continue until the it terminates.  */

asm("        .rdata\n"
    "        .align 3\n"
    "$SYMBOL_LC0:\n"
    "        .long   0\n"
    "        .long   1081507840\n"
    "        .text\n"
    "        .align 2\n"
    "        .globl gt\n"
    "        .ent gt\n"
    "gt:\n"
    "        .frame $15,32,$26,0\n"
    "        .mask 0x4008000,-32\n"
    "$SYMBOL_LM1:\n"
    "        ldgp $29,0($27)\n"
    "$gt..ng:\n"
    "        lda $30,-32($30)\n"
    "        stq $26,0($30)\n"
    "        stq $15,8($30)\n"
    "        bis $31,$30,$15\n"
    "        .prologue 1\n"
    "$SYMBOL_LM2:\n"
    "        lda $1,$SYMBOL_LC0\n"
    "        ldt $f10,0($1)\n"
    "        stt $f10,16($15)\n"
    "$SYMBOL_LM3:\n"
    "        ldt $f10,16($15)\n"
    "        cmptlt $f31,$f10,$f10\n"
    "        fbne $f10,$SYMBOL_L3\n"  /* Stop at this instruction.  */
    "        br $31,$SYMBOL_L2\n"
    "$SYMBOL_L3:\n"
    "$SYMBOL_LM4:\n"
    "        stt $f31,16($15)\n"
    "        br $31,$SYMBOL_L4\n"
    "$SYMBOL_L2:\n"
    "$SYMBOL_LM5:\n"
    "        ldt $f10,16($15)\n"
    "        cpysn $f10,$f10,$f10\n"
    "        stt $f10,16($15)\n"
    "$SYMBOL_L4:\n"
    "$SYMBOL_LM6:\n"
    "        bis $31,$15,$30\n"
    "        ldq $26,0($30)\n"
    "        ldq $15,8($30)\n"
    "        lda $30,32($30)\n"
    "        ret $31,($26),1\n"
    "        .end gt\n");


[-- Attachment #3: alpha-step.exp --]
[-- Type: text/plain, Size: 2408 bytes --]

# 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}

if ![runto_main] then {
    fail "Can't run to main"
    return 0
}

# Insert a breakpoint on a fbne instruction inside gt that we know is
# at gt+48 (the body of gt has been written in assembly, so can not
# change from compiler to compiler). This instruction will cause a jump
# of a couple of instructions forward. Verify that this jump does not
# confuse GDB when steping...

gdb_test "break *gt+48" \
         "Breakpoint 2 at .*" \
         "breakpoint on fbne instruction"

gdb_test "continue" \
         "Breakpoint 2, 0x\[0-9a-fA-F\]+ in gt().*" \
         "continue to fbne instruction"

# Extra check to make sure we stopped on the fbne instruction.

gdb_test "x /i \$pc" \
         "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+fbne\[ \t\]+.*" \
         "Check breakpoint on fbne instruction"

# Step test, should not cause the inferior to run until completion.

gdb_test "stepi" \
         "0x\[0-9a-fA-F\]+.*" \
         "stepi on fbne"

# Extra check to verify that we landed on the instruction we expected
# (it should be an stt instruction).

gdb_test "x /i \$pc" \
         "0x\[0-9a-fA-F\]+ <.*>:\[ \t\]+stt\[ \t\]+.*" \
         "Check stopped on stt instruction"


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2005-05-29  1:59 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-05-25 15:09 [testsuite/alpha] Add test for step over fbne instruction Richard Henderson
2005-05-26  3:14 ` Joel Brobecker
2005-05-26  3:27   ` Richard Henderson
2005-05-26  3:41     ` Daniel Jacobowitz
2005-05-26  5:02     ` Joel Brobecker
2005-05-26  6:04       ` Daniel Jacobowitz
2005-05-28 22:10   ` Daniel Jacobowitz
2005-05-29  2:53     ` Joel Brobecker
  -- strict thread matches above, loose matches on Subject: below --
2005-05-20  7:02 Joel Brobecker
2005-05-20 11:31 ` Richard Henderson
2005-05-25  5:15   ` Joel Brobecker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox