This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [New test] breakpoints on consecutive instructions


Fernando Nasser wrote:
> 
> Michael Snyder wrote:
> >
> > I'd like to submit this test for stepping over breakpoints on
> > consecutive instructions.  This would detect a failure that I
> > am about to submit a fix for.
> >
> >
> 
> Approved for committing concomitantly with the fix (once that is approved).

Committed.

> 
> > 2001-06-28  Michael Snyder  <msnyder@redhat.com>
> >
> >         * gdb.base/consecutive.exp: New file.  Test stepping over
> >         breakpoints on consecutive instructions.
> >         * gdb.base/consecutive.c: New file.
> >
> > *** /dev/null   Thu Aug 24 02:00:32 2000
> > --- consecutive.exp     Thu Jun 28 11:30:53 2001
> > ***************
> > *** 0 ****
> > --- 1,111 ----
> > + #   Copyright 2001
> > + #   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.
> > +
> > + # Please email any bugs, comments, and/or additions to this file to:
> > + # bug-gdb@prep.ai.mit.edu
> > +
> > + # This file was written by Michael Snyder. (msnyder@redhat.com)
> > +
> > + if $tracelevel then {
> > +     strace $tracelevel
> > + }
> > +
> > + #
> > + # Test breakpoints at consecutive instruction addresses.
> > + #
> > +
> > + set prms_id 0
> > + set bug_id 0
> > +
> > + set testfile "consecutive"
> > + set srcfile ${testfile}.c
> > + set binfile ${objdir}/${subdir}/${testfile}
> > +
> > + if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-w}] != "" } {
> > +     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
> > + }
> > +
> > + if [get_compiler_info ${binfile}] {
> > +     return -1
> > + }
> > +
> > + gdb_exit
> > + gdb_start
> > + gdb_reinitialize_dir $srcdir/$subdir
> > + gdb_load ${binfile}
> > +
> > + if [target_info exists gdb_stub] {
> > +     gdb_step_for_stub;
> > + }
> > +
> > + if ![runto_main] then {
> > +     perror "couldn't run to breakpoint"
> > +     continue
> > + }
> > +
> > + set nl "\[\r\n\]+"
> > +
> > + gdb_breakpoint foo
> > + gdb_test "continue" "Breakpoint $decimal, foo .*" \
> > +       "continue to breakpoint in foo"
> > +
> > + set bp_addr 0
> > + set stop_addr 0
> > +
> > + send_gdb "x /2i \$pc\n"
> > + gdb_expect {
> > +     global hex
> > +     global nl
> > +     global bp_addr
> > +     global gdb_prompt
> > +
> > +     -re "$hex.*${nl}($hex).*$gdb_prompt $" {
> > +       set bp_addr $expect_out(1,string)
> > +       pass "get breakpoint address for foo"
> > +     }
> > +     -re ".*$gdb_prompt $" {
> > +       fail "get breakpoint address for foo"
> > +       return 0;
> > +     }
> > +     timeout {
> > +       fail "get breakpoint address for foo (timeout)"
> > +       return 0;
> > +     }
> > + }
> > +
> > + gdb_test "break \*$bp_addr" "Breakpoint $decimal at $bp_addr: file .*" \
> > +       "set bp, 2nd instr"
> > +
> > + send_gdb "step\n"
> > + gdb_expect {
> > +     -re "Breakpoint $decimal, ($hex) in foo.*$gdb_prompt $" {
> > +       set stop_addr $expect_out(1,string)
> > +       if [eval expr "$bp_addr == $stop_addr"] then {
> > +           pass "stopped at bp, 2nd instr"
> > +       } else {
> > +           fail "stopped at bp, 2nd instr (wrong address)"
> > +       }
> > +     }
> > +     -re ".*$gdb_prompt $" {
> > +       fail "stopped at bp, 2nd instr"
> > +     }
> > +     timeout {
> > +       fail "stopped at bp, 2nd instr (timeout)"
> > +
> > +     }
> > + }
> > +
> > *** /dev/null   Thu Aug 24 02:00:32 2000
> > --- consecutive.c       Thu Jun 28 11:32:27 2001
> > ***************
> > *** 0 ****
> > --- 1,20 ----
> > + /*
> > +    Purpose of this test:  to test breakpoints on consecutive instructions.
> > + */
> > +
> > + int a[7] = {1, 2, 3, 4, 5, 6, 7};
> > +
> > + /* assert: first line of foo has more than one instruction. */
> > + int foo ()
> > + {
> > +   return a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6];
> > + }
> > +
> > + main()
> > + {
> > + #ifdef usestubs
> > +     set_debug_traps ();
> > +     breakpoint ();
> > + #endif
> > +   foo ();
> > + }
> 
> --
> Fernando Nasser
> Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
> 2323 Yonge Street, Suite #300
> Toronto, Ontario   M4P 2C9


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]