From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 0ABC23858C33 for ; Sat, 14 Jan 2023 01:19:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0ABC23858C33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark.ca Received: from [10.0.0.11] (unknown [217.28.27.60]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 677F21E110; Fri, 13 Jan 2023 20:19:16 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1673659156; bh=i+fvm4FFrKqhV4PDrdquu5qX6Lyyw0c+126eCyWBDGQ=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=ffmpGQOYMr5AqOOFWOKFOukEczULS6+QpV32ojgAlmjRJZQhLB2/OILuXpbWTnISW 5SqBHIXnXloC6aCka1qed6qpLmJTM/n9i1yU9xOaQNeI1OKKukxVFQ/8FDrtjY6lxX ZZsGRoZOT0CbPp30lTF5WBtTQAq+S0KxITQdCagQ= Message-ID: Date: Fri, 13 Jan 2023 20:19:15 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH] Handle SIGSEGV in gdb selftests Content-Language: en-US To: tdevries , Tom Tromey Cc: gdb-patches@sourceware.org References: <20221215211442.2515108-1-tromey@adacore.com> <7fca4280-a259-9785-fdd1-ac802b886804@suse.de> <87pmcjba6j.fsf@tromey.com> <375589413f851bebcc3b1256273ab784@suse.de> <94f1db30-8514-3bed-3539-142ac2690187@simark.ca> From: Simon Marchi In-Reply-To: <94f1db30-8514-3bed-3539-142ac2690187@simark.ca> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 1/13/23 20:11, Simon Marchi via Gdb-patches wrote: > > > On 12/26/22 03:02, tdevries via Gdb-patches wrote: >> On 2022-12-16 16:11, Tom Tromey via Gdb-patches wrote: >>>>>>>> "Tom" == Tom de Vries writes: >>> >>> Tom> On 12/15/22 22:14, Tom Tromey via Gdb-patches wrote: >>>>> The gdb.gdb self-tests were timing out for me. Looking into it, the >>>>> problem is that the version of the Boehm GC that is used by Guile on >>>>> my machine causes a SEGV during stack probing. This unexpected stop >>>>> confuses the tests and causes repeated timeouts. >>>>> >>> >>> Tom> FWIW, that's https://sourceware.org/bugzilla/show_bug.cgi?id=29325 . >>> >>> Thanks, I updated the commit message. >> >> I ran into this again, tried out the patch and checked that it fixes the problem. >> >> LGTM. >> >> Thanks, >> - Tom > > Hi both Toms, > > I still see the issue on Ubuntu 22.04, when testing with the > native-extended-gdbserver board: > > ... > Thread 1 "xgdb" received signal SIGSEGV, Segmentation fault. > 0x00007ffff6d828f2 in GC_find_limit_with_bound () from /usr/lib/x86_64-linux-gnu/libgc.so.1 > (gdb) FAIL: gdb.gdb/selftest.exp: xgdb is at prompt > > The modified code looks like this: > > > set test "xgdb is at prompt" > gdb_test_multiple "continue" $test { > -i "$inferior_spawn_id" > -re "received signal SIGSEGV.* in GC_.*$gdb_prompt" { > # Some versions of the GC used by Guile cause a SEGV > # during stack probing. Ignore this and carry on. > send_gdb "continue\n" > exp_continue > } > -re "$banner" { > pass $test > } > } > > Shouldn't the SIGSEGV -re be before the `-i $inferior_spawn_id`? > Otherwise we expect the "received signal SIGSEGV" message to come from > the debugged GDB, when it's the top GDB that will print it (like when > debugging any other test program). > > I think we don't see the problem when testing with native because > the top and bottom GDBs share the same spawn id. > > Simon Here's a patch to fix it, with a commit message. >From f2d47cdd63ea9abddabdccd8097b2a6e7d1e64b1 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Fri, 13 Jan 2023 20:08:41 -0500 Subject: [PATCH] gdb/testsuite: expect SIGSEGV from top GDB spawn id When testing with the native-extended-gdbserver, I get: Thread 1 "xgdb" received signal SIGSEGV, Segmentation fault. 0x00007ffff6d828f2 in GC_find_limit_with_bound () from /usr/lib/x86_64-linux-gnu/libgc.so.1 (gdb) FAIL: gdb.gdb/selftest.exp: xgdb is at prompt This is because the -re that is supposed to match this SIGSEGV is after `-i $inferior_spawn_id`. On native, the top and bottom GDB are on the same spawn id, so it ends up working. But with a gdbserver board, that's not the case. Move the SIGSEGV -re before the `-i $inferior_spawn_id` line, such that it matches what the top GDB outputs. Do the same fix in gdb.gdb/python-helper.exp. Change-Id: I3291630e218a5a3a6a47805b999ddbc9b968c927 --- gdb/testsuite/gdb.gdb/python-helper.exp | 2 +- gdb/testsuite/gdb.gdb/selftest.exp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/gdb.gdb/python-helper.exp b/gdb/testsuite/gdb.gdb/python-helper.exp index c147c6bcbb03..98f03ef456f3 100644 --- a/gdb/testsuite/gdb.gdb/python-helper.exp +++ b/gdb/testsuite/gdb.gdb/python-helper.exp @@ -86,13 +86,13 @@ proc test_python_helper {} { # stop is being detected from the inner GDB, hence the use of -i # here. gdb_test_multiple "continue" "start inner gdb" { - -i "$inferior_spawn_id" -re "received signal SIGSEGV.* in GC_.*$outer_prompt_re" { # Some versions of the GC used by Guile cause a SEGV # during stack probing. Ignore this and carry on. send_gdb "continue\n" exp_continue } + -i "$inferior_spawn_id" -re "\r\n$gdb_prompt $" { pass $gdb_test_name } diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp index 177c29fb224d..df12602b64bb 100644 --- a/gdb/testsuite/gdb.gdb/selftest.exp +++ b/gdb/testsuite/gdb.gdb/selftest.exp @@ -74,13 +74,13 @@ proc test_with_self { } { "$gdb_prompt $"] set test "xgdb is at prompt" gdb_test_multiple "continue" $test { - -i "$inferior_spawn_id" -re "received signal SIGSEGV.* in GC_.*$gdb_prompt" { # Some versions of the GC used by Guile cause a SEGV # during stack probing. Ignore this and carry on. send_gdb "continue\n" exp_continue } + -i "$inferior_spawn_id" -re "$banner" { pass $test } base-commit: 325ab797da3b71e03eba184930f08ee3179a30d6 -- 2.39.0