diff options
author | Aleksandar Ristovski <aristovski@qnx.com> | 2008-09-03 13:39:56 +0000 |
---|---|---|
committer | Aleksandar Ristovski <aristovski@qnx.com> | 2008-09-03 13:39:56 +0000 |
commit | 514f746bdc40681c8a32ef8077adeae4f2098db2 (patch) | |
tree | 55d90a7ec4954e25b8bf969c68f6a63841f2820a /gdb/testsuite | |
parent | ee60f13c8b7d9ed38d7d5d63f8889277848ff675 (diff) | |
download | gdb-514f746bdc40681c8a32ef8077adeae4f2098db2.zip gdb-514f746bdc40681c8a32ef8077adeae4f2098db2.tar.gz gdb-514f746bdc40681c8a32ef8077adeae4f2098db2.tar.bz2 |
* breakpoint.c (breakpoint_init_inferior): Mark as not inserted only
non-permanent breakpoints.
(bpstat_stop_status): Change enable_state to bp_disabled only for
non-permanent breakpoints.
(bp_loc_is_permanent): New function.
(create_breakpoint): Check if the location points to a permanent
breakpoint and if it does, make breakpoint permanent.
(update_breakpoint_locations): Make sure new locations of permanent
breakpoints are properly initialized.
* i386-tdep.c (i386_skip_permanent_breakpoint): New function.
(i386_gdbarch_init): Set gdbarch_skip_permanent_breakpoint.
* gdb.arch/i386-bp_permanent.exp: New test.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/i386-bp_permanent.exp | 104 |
2 files changed, 108 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 38208c4..d17e9ca 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-09-03 Aleksandar Ristovski <aristovski@qnx.com> + + * gdb.arch/i386-bp_permanent.exp: New test. + 2008-08-24 Tom Tromey <tromey@redhat.com> * gdb.base/maint.exp: Update "maint print type". diff --git a/gdb/testsuite/gdb.arch/i386-bp_permanent.exp b/gdb/testsuite/gdb.arch/i386-bp_permanent.exp new file mode 100644 index 0000000..c2d7542 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-bp_permanent.exp @@ -0,0 +1,104 @@ +# Copyright (C) 2008 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 3 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, see <http://www.gnu.org/licenses/>. + + +# This file is part of the gdb testsuite. + +if $tracelevel { + strace $tracelevel +} + +# Test stepping over permanent breakpoints on i386. + +if ![istarget "i?86-*-*"] then { + verbose "Skipping skip over permanent breakpoint on i386 tests." + return +} + +set testfile "i386-prologue" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +# some targets have leading underscores on assembly symbols. +# TODO: detect this automatically +set additional_flags "" +if [istarget "i?86-*-cygwin*"] then { + set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\"" +} + +# Don't use "debug", so that we don't have line information for the assembly +# fragments. +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list $additional_flags]] != "" } { + untested i386-prologue.exp + return -1 +} + + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# +# Run to `main' where we begin our tests. +# + +if ![runto_main] then { + return -1 +} + +set function standard + +set retcode [gdb_test_multiple "disassemble $function" "Disassemble function '$function'" { + -re ".*($hex) <$function\\+0>.*($hex) <$function\\+4>.*($hex) <$function\\+5>.*($hex) <$function\\+6>.*$gdb_prompt $" { + set function_start $expect_out(1,string); + set address $expect_out(2,string); + set address1 $expect_out(3,string); + set address2 $expect_out(4,string); + } +}] + +if {$retcode != 0} { + fail "Disassemble failed, skipping entire test." + return -1 +} + +gdb_breakpoint "*$function_start" + +gdb_breakpoint "*$address" + +gdb_test "continue" "Breakpoint .*, $function_start in $function.*" \ + "Stop at the '$function' start breakpoint (fetching esp)." + +# We want to fetch esp at the start of '$function' function to make sure +# skip_permanent_breakpoint implementation really skips only the perm. +# breakpoint. If, for whatever reason, 'leave' instruction doesn't get +# executed, esp will not have this value. +set start_esp 0 +gdb_test_multiple "print \$esp" "Fetch esp value." { + -re "\\\$1.*($hex).*$gdb_prompt $" { + set start_esp $expect_out(1,string); + } +} + +gdb_test "continue" "Breakpoint .*, $address in $function.*" \ + "Stop at permanent breakpoint." + +gdb_test "stepi" "$address1|$address2 in $function.*" \ + "Single stepping past permanent breakpoint." + +gdb_test "print \$esp" ".*$start_esp.*" \ + "ESP value does not match - step_permanent_breakpoint wrong." + |