This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [New test] breakpoints on consecutive instructions
- To: Michael Snyder <msnyder at cygnus dot com>
- Subject: Re: [New test] breakpoints on consecutive instructions
- From: Fernando Nasser <fnasser at cygnus dot com>
- Date: Mon, 09 Jul 2001 17:24:06 -0400
- CC: gdb-patches at sources dot redhat dot com
- Organization: Red Hat , Inc. - Toronto
- References: <3B3B7978.11783021@cygnus.com>
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