From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id B39723858CDB for ; Wed, 1 Feb 2023 17:37:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B39723858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1675273062; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=PG3aFj+agY8J4uBDQe9Ex1RC+hq53UK6M6aKlz+DncM=; b=Srq5oZaN/twkEYnGdbUmeHDpuvq8xMVmheK/6jDy6/TamWkcVy5SqPMwSbZSAA4e6YihrZ ylSMBJfiUA13ycOFhPXnpZQxQJWBgY56LcYozd7P8W4H90ReuyKOTnjw8IuNr7FchuyhRH HEd6Yg/tn2Zo+IbL7TQ28FEzViV5gIw= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-340-P5OpbThdPQa3CVKla7FizQ-1; Wed, 01 Feb 2023 12:37:41 -0500 X-MC-Unique: P5OpbThdPQa3CVKla7FizQ-1 Received: by mail-qv1-f70.google.com with SMTP id jh2-20020a0562141fc200b004c74bbb0affso10607801qvb.21 for ; Wed, 01 Feb 2023 09:37:41 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PG3aFj+agY8J4uBDQe9Ex1RC+hq53UK6M6aKlz+DncM=; b=D/UumM+TaT0Zx7e6he2vpqq/poelRjTslVXq6Qbxq78RTXKSr4NJ8+E5D1fDRuoh3c xbSd23Z30zN16ynpaExO3g8UM96gpnhc3JtrTAJwbi/ODFcBXnilEI0ajpL8omlwd/mh MzlT8RyJR7jsSHutuojQXm5luRG8QAhMwysKyRofNOxvzcE52lkIkk0AIbF4wF9z7TN1 yjwOFYpZRFDh8Fo2K3D6FGo3VXH34AsqPGlvGMJ/ZaRSUtY/PVw6ouxga4CUb7UZZni+ WhKSPYGx/rBDtaz1jhY5rCx/G9UXjWJC3NFPQDxkBeKzm3rHxbF+DirkpDmhA0GxyZga fp/w== X-Gm-Message-State: AO0yUKVaWwfRMIF/DZgHnzDSFJNUSkIvgIHMCys+5ilGqiyoxzivhIih N8rXeFUB8bQxSffCSRMGlstf6Br8wQ44ufI4REjAAjAWANjw0J+Z1NYPz0RVrA/LlHBhmR5QCPT F9FmeIcSeA/O1Be+1TZqQb+JCJb85kM7RlLN+OXwVVKm7q/AiMcq85B/yZmKbRCmuaMcF4UUHMA == X-Received: by 2002:ac8:45d2:0:b0:3b9:bc8c:c1fc with SMTP id e18-20020ac845d2000000b003b9bc8cc1fcmr1561375qto.7.1675273060648; Wed, 01 Feb 2023 09:37:40 -0800 (PST) X-Google-Smtp-Source: AK7set8Tt2av2hty/j0jsOjp/gPVvIEDQB178WCHo9TxXlrx7iGGBdrioRUZF0SW/LZfDP5Gzq1BKg== X-Received: by 2002:ac8:45d2:0:b0:3b9:bc8c:c1fc with SMTP id e18-20020ac845d2000000b003b9bc8cc1fcmr1561352qto.7.1675273060199; Wed, 01 Feb 2023 09:37:40 -0800 (PST) Received: from localhost (95.72.115.87.dyn.plus.net. [87.115.72.95]) by smtp.gmail.com with ESMTPSA id c66-20020a379a45000000b0071a291f0a4asm10065088qke.27.2023.02.01.09.37.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Feb 2023 09:37:39 -0800 (PST) From: Andrew Burgess To: Aaron Merey via Gdb-patches , gdb-patches@sourceware.org Cc: Aaron Merey Subject: Re: [PING*2][PATCH] gdb/linespec.c: Fix missing source file during breakpoint re-set In-Reply-To: <20230106235607.498218-1-amerey@redhat.com> References: <20221021170720.27249-1-amerey@redhat.com> <20230106235607.498218-1-amerey@redhat.com> Date: Wed, 01 Feb 2023 17:37:37 +0000 Message-ID: <87y1phs2vy.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,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: Aaron Merey via Gdb-patches writes: > Ping. I tweaked the testcase so that it applies to the master branch. > > Thanks, > Aaron > > --- > During breakpoint re-setting, the source_filename of an > explicit_location_spec is used to lookup the symtabs associated with > the breakpoint being re-set. This source_filename is compared with each > known symtab filename in order to retrieve the breakpoint's symtabs. > > However the source_filename may have been originally copied from a > symtab's fullname (the path where GDB found the source file) when the > breakpoint was first created. If a breakpoint symtab's filename and > fullname differ and there is no substitute-path rule that converts the > fullname to the filename, this will cause a NOT_FOUND_ERROR to be thrown > during re-setting. > > Fix this by using a symtab's filename to set the explicit_location_spec > source_filename instead of the symtab's fullname. > --- > gdb/linespec.c | 4 ++-- > gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp | 9 +++++++++ > 2 files changed, 11 insertions(+), 2 deletions(-) > > diff --git a/gdb/linespec.c b/gdb/linespec.c > index e9339c3338c..6db0f02e318 100644 > --- a/gdb/linespec.c > +++ b/gdb/linespec.c > @@ -2283,13 +2283,13 @@ convert_linespec_to_sals (struct linespec_state *state, linespec *ls) > /* Make sure we have a filename for canonicalization. */ > if (ls->explicit_loc.source_filename == NULL) > { > - const char *fullname = symtab_to_fullname (state->default_symtab); > + const char *filename = state->default_symtab->filename; > > /* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab > form so that displaying SOURCE_FILENAME can follow the current > FILENAME_DISPLAY_STRING setting. But as it is used only rarely > it has been kept for code simplicity only in absolute form. */ > - ls->explicit_loc.source_filename = xstrdup (fullname); > + ls->explicit_loc.source_filename = xstrdup (filename); > } > } > else > diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp > index 6d5af1370b0..bfe6e639e4f 100644 > --- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp > +++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp > @@ -224,6 +224,15 @@ proc_with_prefix local_url { } { > set lineno [gdb_get_line_number "Breakpoint here"] > gdb_test "list $lineno" "return 0;\[^\r\n\]+Breakpoint here\\. .*" > > + # Verify that a breakpoint re-sets correctly when the actual location > + # of the source file in the debuginfod client cache differs from > + # the contents of DW_AT_comp_dir and DW_AT_name. > + gdb_test "set cwd $debugdir" "" "file [file tail $binfile] cwd" > + gdb_test_no_output "del breakpoint 1" > + gdb_test "break $lineno" "Breakpoint 2 at.*file.*" > + gdb_test "run" "Breakpoint 2.*" \ > + "file [file tail $binfile] set breakpoint" Calling "run" like this will not work when testing with the native-gdbserver board, which can be done like: make check-gdb RUNTESTFLAGS="--target_board=native-gdbserver" The other board that is worth testing with is native-extended-gdbserver. I've pushed the patch below which fixes the test to work with the native-gdbserver board. I checked that the test still fails if I revert the GDB fix in your above patch. Thanks, Andrew --- commit cded17bfca35566fa4d36e9ec06fa071bd7dab17 Author: Andrew Burgess Date: Wed Feb 1 17:09:47 2023 +0000 gdb/testsuite: fix fetch_src_and_symbols.exp with native-gdbserver board I noticed that the gdb.debuginfod/fetch_src_and_symbols.exp script doesn't work with the native-gdbserver board, I see this error: ERROR: tcl error sourcing /tmp/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp. ERROR: gdbserver does not support run without extended-remote while executing "error "gdbserver does not support $command without extended-remote"" (procedure "gdb_test_multiple" line 51) invoked from within This was introduced with this commit: commit 7dd38e31d67c2548b52bea313ab18e40824c05da Date: Fri Jan 6 18:45:27 2023 -0500 gdb/linespec.c: Fix missing source file during breakpoint re-set The problem is that the above commit introduces a direct use of the "run" command, which doesn't work with 'target remote' targets, as exercised by the native-gdbserver board. To avoid this, in this commit I switch to using runto_main. However, calling runto_main will, by default, delete all the currently set breakpoints. As the point of the above commit was to check that a breakpoint set before stating an inferior would be correctly re-set, we need to avoid this breakpoint deleting behaviour. To do this I make use of with_override, and override the delete_breakpoints proc with a dummy proc which does nothing. By reverting the GDB changes in commit 7dd38e31d67c I have confirmed that even after my changes in this commit, the test still fails. But with the fixes in commit 7dd38e31d67c, this test now passed using the unix, native-gdbserver, and native-extended-gdbserver boards. diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp index c9cd8a30a1c..8158c5c3cc6 100644 --- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp +++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp @@ -195,6 +195,12 @@ proc test_urls {urls pattern_re test} { $test } +# Used as a replacement for delete_breakpoints while calling +# runto_main in one case where we don't want to delete all the +# breakpoints. +proc disable_delete_breakpoints {} { +} + # Uses the global variables DEBUGDIR and DB which are setup elsewhere # in this script. # @@ -214,13 +220,12 @@ proc_with_prefix local_url { } { # GDB should now find the symbol and source files. clean_restart - set enable_debuginfod_question \ - "Enable debuginfod for this session. \\(y or \\\[n\\\]\\) " - gdb_test "file $binfile" "" "file [file tail $binfile]" \ - $enable_debuginfod_question "y" + gdb_test_no_output "set debuginfod enabled on" \ + "enabled debuginfod for initial test" + gdb_load $binfile gdb_test_no_output "set substitute-path $outputdir /dev/null" \ "set substitute-path" - gdb_test "br main" "Breakpoint 1 at.*file.*" + set lineno [gdb_get_line_number "Breakpoint here"] gdb_test "list $lineno" "return 0;\[^\r\n\]+Breakpoint here\\. .*" @@ -228,12 +233,18 @@ proc_with_prefix local_url { } { # of the source file in the debuginfod client cache differs from # the contents of DW_AT_comp_dir and DW_AT_name. gdb_test "set cwd $debugdir" "" "file [file tail $binfile] cwd" - gdb_test_no_output "del breakpoint 1" - gdb_test "break $lineno" "Breakpoint 2 at.*file.*" - gdb_test "run" "Breakpoint 2.*" \ - "file [file tail $binfile] set breakpoint" + gdb_breakpoint $lineno + with_override delete_breakpoints disable_delete_breakpoints { + if {![runto_main]} { + return + } + gdb_continue_to_breakpoint "runto breakpoint in main" \ + ".* Breakpoint here\\. .*" + } # GDB should now find the executable file. + set enable_debuginfod_question \ + "Enable debuginfod for this session. \\(y or \\\[n\\\]\\) " clean_restart gdb_test "core $::corefile" ".*return 0.*" "file [file tail $::corefile]" \ $enable_debuginfod_question "y"