From 5ca2edcb439cef3231a69d629755a0708ffd288c Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Mon, 7 Jul 2008 22:47:03 +0000 Subject: [PATCH] - Fix crash due to calling an inferior function right after a watchpoint stop. --- gdb-6.8-upstream.patch | 116 +++++++++++++++++++++++++++++++++++++++++ gdb.spec | 5 +- 2 files changed, 120 insertions(+), 1 deletion(-) diff --git a/gdb-6.8-upstream.patch b/gdb-6.8-upstream.patch index 5509ae5..69516bd 100644 --- a/gdb-6.8-upstream.patch +++ b/gdb-6.8-upstream.patch @@ -815,3 +815,119 @@ diff -u -r1.5 -r1.6 gdb_test "finish" " = 1.2" "Correct _Decimal128 return value from called function." gdb_test "call decimal_dec128_align (double_val1, dec128_val2, double_val3, double_val4, double_val5, double_val6, double_val7, double_val8, double_val9, double_val10, double_val11, double_val12, double_val13, double_val14)" " = 1" \ + + + +gdb/ +2008-07-07 Jan Kratochvil + + * breakpoint.c (bpstat_copy): Call RELEASE_VALUE on the new OLD_VAL. + +gdb/testsuite/ +2008-07-07 Jan Kratochvil + + * gdb.base/value-double-free.exp, gdb.base/value-double-free.c: New. + +=================================================================== +RCS file: /cvs/src/src/gdb/breakpoint.c,v +retrieving revision 1.327 +retrieving revision 1.328 +diff -u -r1.327 -r1.328 +--- src/gdb/breakpoint.c 2008/06/28 09:42:15 1.327 ++++ src/gdb/breakpoint.c 2008/07/07 22:39:58 1.328 +@@ -1996,7 +1996,10 @@ + 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. */ +/cvs/src/src/gdb/testsuite/gdb.base/value-double-free.c,v --> standard output +revision 1.1 +--- src/gdb/testsuite/gdb.base/value-double-free.c ++++ src/gdb/testsuite/gdb.base/value-double-free.c 2008-07-07 22:40:47.485459000 +0000 +@@ -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 . ++ ++ 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; ++} +/cvs/src/src/gdb/testsuite/gdb.base/value-double-free.exp,v --> standard output +revision 1.1 +--- src/gdb/testsuite/gdb.base/value-double-free.exp ++++ src/gdb/testsuite/gdb.base/value-double-free.exp 2008-07-07 22:40:48.139680000 +0000 +@@ -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 . ++ ++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" diff --git a/gdb.spec b/gdb.spec index 28d3e7c..a1f530d 100644 --- a/gdb.spec +++ b/gdb.spec @@ -13,7 +13,7 @@ Version: 6.8 # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 13%{?_with_upstream:.upstream}%{?dist} +Release: 14%{?_with_upstream:.upstream}%{?dist} License: GPLv3+ Group: Development/Debuggers @@ -828,6 +828,9 @@ fi %endif %changelog +* Tue Jul 8 2008 Jan Kratochvil - 6.8-14 +- Fix crash due to calling an inferior function right after a watchpoint stop. + * Thu Jul 3 2008 Jan Kratochvil - 6.8-13 - Support transparent debugging of inlined functions for an optimized code.