Browse Source
gdb/gdbserver/ * linux-x86-low.c (i386_dr_low_get_addr): Fix off by one in assertion. * win32-i386-low.c (i386_dr_low_get_addr): Ditto. gdb/testsuite/ * gdb.arch/i386-dr3-watch.c: New file. * gdb.arch/i386-dr3-watch.exp: New file.binutils-2_22-branch
6 changed files with 105 additions and 2 deletions
@ -0,0 +1,43 @@ |
|||
/* Copyright 2011 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 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/>. */
|
|||
|
|||
int i1; |
|||
char gap1[32]; |
|||
|
|||
int i2; |
|||
char gap2[32]; |
|||
|
|||
int i3; |
|||
char gap3[32]; |
|||
|
|||
int i4; |
|||
|
|||
void |
|||
trigger (void) |
|||
{ |
|||
i1 = 1; |
|||
i2 = 2; |
|||
i3 = 3; |
|||
i4 = 4; |
|||
} |
|||
|
|||
int |
|||
main () |
|||
{ |
|||
trigger (); |
|||
return 0; |
|||
} |
|||
@ -0,0 +1,49 @@ |
|||
# Copyright 2011 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/>. |
|||
|
|||
# x86 and amd64 gdbserver had a bug where a watchpoint triggered by |
|||
# the DR3 debug register would trip on a bogus assertion. |
|||
|
|||
# This test relies on being able to set 4 hardware watchpoints. Since |
|||
# that is not a valid assumption across most targets, and we're |
|||
# testing a x86 specific bug, skip everywhere else. |
|||
if { ![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] } then { |
|||
return 0 |
|||
} |
|||
|
|||
set testfile "i386-dr3-watch" |
|||
set srcfile ${testfile}.c |
|||
|
|||
if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug $additional_flags}] { |
|||
untested "failed to compile ${testfile}" |
|||
return -1 |
|||
} |
|||
|
|||
if ![runto_main] then { |
|||
untested "could not run to main" |
|||
return -1 |
|||
} |
|||
|
|||
gdb_test_no_output "set breakpoint always-inserted on" |
|||
|
|||
gdb_test "watch i1" "Hardware watchpoint .*: i1" |
|||
gdb_test "watch i2" "Hardware watchpoint .*: i2" |
|||
gdb_test "watch i3" "Hardware watchpoint .*: i3" |
|||
gdb_test "watch i4" "Hardware watchpoint .*: i4" |
|||
|
|||
gdb_test "c" "Hardware watchpoint.*: i1.*" "continue to i1 watchpoint" |
|||
gdb_test "c" "Hardware watchpoint.*: i2.*" "continue to i2 watchpoint" |
|||
gdb_test "c" "Hardware watchpoint.*: i3.*" "continue to i3 watchpoint" |
|||
gdb_test "c" "Hardware watchpoint.*: i4.*" "continue to i4 watchpoint" |
|||
Loading…
Reference in new issue