diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2008-07-07 22:39:59 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2008-07-07 22:39:59 +0000 |
commit | 3c3185ac88fb76e53625ea3e7b0da486f94b238d (patch) | |
tree | d8edcb90e6a97bbf2aad1c5b98248fb551a968e8 /gdb | |
parent | 42f0bc8eaf33eb991a9cbe9a42a0738d948fc65e (diff) | |
download | gdb-3c3185ac88fb76e53625ea3e7b0da486f94b238d.zip gdb-3c3185ac88fb76e53625ea3e7b0da486f94b238d.tar.gz gdb-3c3185ac88fb76e53625ea3e7b0da486f94b238d.tar.bz2 |
gdb/
* breakpoint.c (bpstat_copy): Call RELEASE_VALUE on the new OLD_VAL.
gdb/testsuite/
* gdb.base/value-double-free.exp, gdb.base/value-double-free.c: New.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/breakpoint.c | 5 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/value-double-free.c | 36 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/value-double-free.exp | 38 |
5 files changed, 86 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0942165..059d19a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2008-07-07 Jan Kratochvil <jan.kratochvil@redhat.com> + + * breakpoint.c (bpstat_copy): Call RELEASE_VALUE on the new OLD_VAL. + 2008-07-07 Pedro Alves <pedro@codesourcery.com> * i386-dicos-tdep.c: Include "inferior.h". diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 73d962c..e774bca 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1996,7 +1996,10 @@ bpstat_copy (bpstat bs) if (bs->commands != NULL) tmp->commands = copy_command_lines (bs->commands); if (bs->old_val != NULL) - tmp->old_val = value_copy (bs->old_val); + { + tmp->old_val = value_copy (bs->old_val); + release_value (tmp->old_val); + } if (p == NULL) /* This is the first thing in the chain. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1f4427e..de83fcd 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-07-07 Jan Kratochvil <jan.kratochvil@redhat.com> + + * gdb.base/value-double-free.exp, gdb.base/value-double-free.c: New. + 2008-06-28 Vladimir Prus <vladimir@codesourcery.com> * lib/mi-support.exp (mi_send_resuming_command_raw): Revert diff --git a/gdb/testsuite/gdb.base/value-double-free.c b/gdb/testsuite/gdb.base/value-double-free.c new file mode 100644 index 0000000..46ca150 --- /dev/null +++ b/gdb/testsuite/gdb.base/value-double-free.c @@ -0,0 +1,36 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 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/>. + + Please email any bugs, comments, and/or additions to this file to: + bug-gdb@prep.ai.mit.edu */ + +volatile int var; + +void +empty (void) +{ +} + +int +main (void) +{ + var = 1; + /* Workaround PR 38: We may miss the first watchpoint hit as we stop on the + exact instruction which would cause the watchpoint hit. */ + var = 2; + return 0; +} diff --git a/gdb/testsuite/gdb.base/value-double-free.exp b/gdb/testsuite/gdb.base/value-double-free.exp new file mode 100644 index 0000000..8494f53 --- /dev/null +++ b/gdb/testsuite/gdb.base/value-double-free.exp @@ -0,0 +1,38 @@ +# Copyright 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/>. + +set testfile value-double-free +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { + untested "Couldn't compile test program" + return -1 +} + +# Get things started. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if ![runto_main] { + return -1 +} +gdb_test "watch var" "atchpoint \[0-9\]+: var" +gdb_test "continue" "atchpoint \[0-9\]+: var.*Old value = 0.*New value = \[12\].*" +gdb_test "print empty()" " = void" +# We did segfault here. +gdb_test "help help" |