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


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




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