From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 118299 invoked by alias); 25 Oct 2018 10:09:03 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 118289 invoked by uid 89); 25 Oct 2018 10:09:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_PASS,UNSUBSCRIBE_BODY autolearn=ham version=3.3.2 spammy=eat, Attach, n*, Philippe X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 25 Oct 2018 10:09:01 +0000 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 1C7F7AE54; Thu, 25 Oct 2018 10:08:59 +0000 (UTC) Subject: Re: [OB PATCH][gdb/testsuite] Handle removed valgrind option --db-attach To: Philippe Waroquiers , Pedro Alves , gdb-patches@sourceware.org References: <20181024111355.GA13788@delia> <961cdab7-7882-6795-fac3-561db78d6593@redhat.com> <1540414236.12106.12.camel@skynet.be> From: Tom de Vries Message-ID: Date: Thu, 25 Oct 2018 10:09:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <1540414236.12106.12.camel@skynet.be> Content-Type: multipart/mixed; boundary="------------CD4FADFFEE263C1D16B784F1" X-IsSubscribed: yes X-SW-Source: 2018-10/txt/msg00568.txt.bz2 This is a multi-part message in MIME format. --------------CD4FADFFEE263C1D16B784F1 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 1604 On 10/24/18 10:50 PM, Philippe Waroquiers wrote: > On Wed, 2018-10-24 at 17:29 +0100, Pedro Alves wrote: >> On 10/24/2018 12:13 PM, Tom de Vries wrote: >>> Hi, >>> >>> When running valgrind-db-attach.exp with valgrind version 3.13.0, we get: >>> ... >>> PASS: gdb.base/valgrind-db-attach.exp: spawn valgrind >>> valgrind: Unknown option: --db-attach=yes >>> valgrind: Use --help for more information or consult the user manual. >>> ERROR: Process no longer exists >>> UNRESOLVED: gdb.base/valgrind-db-attach.exp: valgrind started >>> ... >>> >>> The valgrind option --db-attach has been deprecated in version 3.10.0, and >>> removed in version 3.11.0. >>> >> >> But was it replaced with / renamed to something else equivalent, >> or the functionality completely eliminated? > --db-attach option functionality was removed, as it was not very > reliable and had a bunch of limitations e.g. not supporting threads. > > Instead, the gdbserver embedded in valgrind allows the user debug a process > when valgrind reports an error. > > I have put on my list of things to do to convert valgrind-attach > test to use vgdb (but the conversion is probably not trivial). The valgrind-db-attach.exp test-case is very similar to the valgrind-infcall.exp test-case (using vgdb), so I gave it a try by putting the two alongside, and doing a copy/paste/replace. OK for trunk (perhaps with a rename to valgrind-bt.{exp,c})? [ Or perhaps first factor out a vgdb_start/stop or some such from valgrind-disp-step.exp and valgrind-infcall.exp, and then use those procs in valgrind-db-attach.exp instead? ] Thanks, - Tom --------------CD4FADFFEE263C1D16B784F1 Content-Type: text/x-patch; name="0001-gdb-testsuite-Rewrite-valgrind-db-attach.exp-to-use-vgdb.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename*0="0001-gdb-testsuite-Rewrite-valgrind-db-attach.exp-to-use-vgd"; filename*1="b.patch" Content-length: 4694 [gdb/testsuite] Rewrite valgrind-db-attach.exp to use vgdb The valgrind option --db-attach has been deprecated in version 3.10.0, and removed in version 3.11.0, so the valgrind-db-attach.exp testcase is unsupported starting version 3.11.0. Rewrite the test-case to use vgdb instead (making it supported starting version 3.7.0). Tested on x86_64-linux with and without --target_board=native-gdbserver. 2018-10-25 Tom de Vries * gdb.base/valgrind-db-attach.exp: Rewrite to use vgdb. --- gdb/testsuite/gdb.base/valgrind-db-attach.exp | 80 ++++++++++++++++++--------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/gdb/testsuite/gdb.base/valgrind-db-attach.exp b/gdb/testsuite/gdb.base/valgrind-db-attach.exp index 3e40283a95..348f74379d 100644 --- a/gdb/testsuite/gdb.base/valgrind-db-attach.exp +++ b/gdb/testsuite/gdb.base/valgrind-db-attach.exp @@ -23,16 +23,8 @@ if {[build_executable $testfile.exp $testfile $srcfile {debug}] == -1} { return -1 } -gdb_exit - -# remote_spawn breaks the command on each whitespace despite possible quoting. -# Use backslash-escaped whitespace there instead: - -set db_command "--db-command=$GDB $INTERNAL_GDBFLAGS $GDBFLAGS [host_info gdb_opts] %f %p" -regsub -all " " $db_command "\\ " db_command - set test "spawn valgrind" -set cmd "valgrind --db-attach=yes $db_command $binfile" +set cmd "valgrind --vgdb-error=0 $binfile" set res [remote_spawn host $cmd] if { $res < 0 || $res == "" } { verbose -log "Spawning $cmd failed." @@ -43,18 +35,13 @@ pass $test # Declare GDB now as running. set gdb_spawn_id $res -# GDB spawned by `valgrind --db-attach=yes' stops already after the startup is -# executed, like with non-extended gdbserver. It is also not correct to -# run/attach the inferior. +# GDB started by vgdb stops already after the startup is executed, like with +# non-extended gdbserver. It is also not correct to run/attach the inferior. set use_gdb_stub 1 set test "valgrind started" # The trailing '.' differs for different memcheck versions. gdb_test_multiple "" $test { - -re "valgrind: Unknown option: --db-attach=yes" { - unsupported $test - return -1 - } -re "Memcheck, a memory error detector\\.?\r\n" { pass $test } @@ -72,23 +59,63 @@ gdb_test_multiple "" $test { unsupported $test return -1 } + -re "valgrind: Bad option.*--vgdb-error=0" { + # valgrind is not >= 3.7.0. + unsupported $test + return -1 + } +} + +set test "vgdb prompt" +# The trailing '.' differs for different memcheck versions. +gdb_test_multiple "" $test { + -re " (target remote | \[^\r\n\]*/vgdb \[^\r\n\]*)\r\n" { + set vgdbcmd $expect_out(1,string) + pass $test + } } +# Do not kill valgrind. +set valgrind_spawn_id [board_info host fileid] +unset gdb_spawn_id +set board [host_info name] +unset_board_info fileid + +clean_restart $testfile + +# Make sure we're disconnected, in case we're testing with the +# native-extended-gdbserver board, where gdb_start/gdb_load spawn +# gdbserver and connect to it. +gdb_test "disconnect" ".*" + +gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb" + +gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*" + set double_free [gdb_get_line_number "double-free"] -set test "attach to debugger" -gdb_test_multiple "" $test { - -re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*---- Attach to debugger \\? --- \[^\r\n\]* ---- " { - send_gdb "y\r" +set test "continue" +gdb_test_multiple "continue" $test { + -re "Invalid free\\(\\).*: main \\(${srcfile}:$double_free\\)\r\n.*$gdb_prompt $" { + pass $test + } + -re "Remote connection closed.*\r\n$gdb_prompt $" { + fail "$test (remote connection closed)" + # Only if valgrind got stuck. + kill_wait_spawned_process $valgrind_spawn_id + return -1 } - -re "---- Attach to debugger \\? --- \[^\r\n\]* ---- " { - send_gdb "n\r" - exp_continue + -re "The program is not being run\\.\r\n$gdb_prompt $" { + fail "$test (valgrind vgdb has terminated)" + # Only if valgrind got stuck. + kill_wait_spawned_process $valgrind_spawn_id + return -1 + } + -re "\r\n$gdb_prompt $" { + pass "$test (false warning)" } } -gdb_test "" ".*" "eat first prompt" - # Initialization from default_gdb_start. gdb_test_no_output "set height 0" gdb_test_no_output "set width 0" @@ -97,3 +124,6 @@ gdb_test "bt" "in main \\(.*\\) at .*${srcfile}:$double_free" # Explicitly kill the program so it doesn't dump core when we quit->detach. gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y" + +# Only if valgrind got stuck. +kill_wait_spawned_process $valgrind_spawn_id --------------CD4FADFFEE263C1D16B784F1--