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 DA2E83858423 for ; Wed, 24 May 2023 12:51:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DA2E83858423 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=1684932706; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HQPH/FC+vPndsdvbzV4gt/xW024hdzbIbvQTn660sa0=; b=PJNhzwkGBWsrtE67V8twO9wr7Ga/ELMH31oYLKisVK7Y7wVxGril3wgZ3qwu7L5a8YT9+8 eI3LJwWF9lNnq++0Dre+b04M3zL0QoEppIJ+DKVw+AhVhyyT+v7yuLIGqo4F4DFiFnJzao h4xdeZpRJeYMnj+6hjg2Crb6lYxo08w= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-564-fJk6WfsZMUeibjpLCUvUTA-1; Wed, 24 May 2023 08:51:45 -0400 X-MC-Unique: fJk6WfsZMUeibjpLCUvUTA-1 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-3f6089a9689so6014615e9.1 for ; Wed, 24 May 2023 05:51:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684932704; x=1687524704; h=content-transfer-encoding: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=7Lrxyi+bR6GkNYKms+zPsHPyLzifcT9VT9miL71CZTU=; b=Cnqzvk7BP5jezcHrtzpgdLVa9mZnBUAQ0MAof5s36C7GJLJS1yPqa3fTajYYCuV8Ik ERXTLdNMnZRSkrCLZC2CF0fpQuMbKxzNo0LB4t7HIbT/1sYN/ItBZOXOmuDYyKb+Dr6c deT5TlrpNeQmf/+yhLs+Q8TtRnaQj3oFNpRo+Pzei74cz/WmnnQlWLE711SdEgVeFH3y ZcPiEzBKOHG8VHgbMADLB+gr9naURuQvw9KX4M2FZEa4YRLsZKNqrK/wpVX9AQHAQqfQ d5o7JU0usRRh77+sdxRP1DmpjMRMGjAXevbTZV9GjplUKUwsIZ2Qit2/cSt7gR0MMjr4 bGXw== X-Gm-Message-State: AC+VfDxOeQp8lPstEioAoLtqOrtbna4Bsai4zfQHHKNf/E1UikuDiJXv 3BwYiw0TWvpokUNV99nJGGkImAoOAIzm108qQH8D4oWDwuq1C8D+x3fxzOYAzpZs3jM/mzNwYR4 GE99aAyhpA/CJJvnPqUghIbW8fZB8uw== X-Received: by 2002:adf:e9c9:0:b0:300:cb8c:fd8f with SMTP id l9-20020adfe9c9000000b00300cb8cfd8fmr12887968wrn.54.1684932704219; Wed, 24 May 2023 05:51:44 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6TTHv9tPVsmtZpfkYQs3Z/IMpLWtmNxcsXWfuh1e8U7Y0+suNzjjlDB1p+6JmFl4SrOp2YtA== X-Received: by 2002:adf:e9c9:0:b0:300:cb8c:fd8f with SMTP id l9-20020adfe9c9000000b00300cb8cfd8fmr12887954wrn.54.1684932703878; Wed, 24 May 2023 05:51:43 -0700 (PDT) Received: from localhost (11.72.115.87.dyn.plus.net. [87.115.72.11]) by smtp.gmail.com with ESMTPSA id c10-20020a5d414a000000b00304ae802f02sm14327142wrq.66.2023.05.24.05.51.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 May 2023 05:51:43 -0700 (PDT) From: Andrew Burgess To: "Puputti, Matti" , "gdb-patches@sourceware.org" Cc: "eliz@gnu.org" Subject: RE: [PING][PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs In-Reply-To: References: <20230512133320.1236624-1-matti.puputti@intel.com> <20230512133320.1236624-2-matti.puputti@intel.com> Date: Wed, 24 May 2023 13:51:41 +0100 Message-ID: <87jzwx7uzm.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: "Puputti, Matti" writes: > Kindly asking for review, approval and help to push. I'm just running a regression test, and then I'll push this later today. Thanks for your work on this, Andrew > > > Patch 4:=09https://sourceware.org/pipermail/gdb-patches/2023-May/199464.h= tml > Andrew's comments on patch 4:=09https://sourceware.org/pipermail/gdb-patc= hes/2023-May/199471.html > Eli's comments on patch 4:=09https://sourceware.org/pipermail/gdb-patches= /2023-May/199467.html > Patch 5:=09https://sourceware.org/pipermail/gdb-patches/2023-May/199540.h= tml > Eli=E2=80=99s ok on path 5:=09https://sourceware.org/pipermail/gdb-patche= s/2023-May/199544.html > My msg to Andrew:=09https://sourceware.org/pipermail/gdb-patches/2023-May= /199570.html > > Br, > Matti Puputti > > >> -----Original Message----- >> From: Gdb-patches > bounces+matti.puputti=3Dintel.com@sourceware.org> On Behalf Of Matti >> Puputti via Gdb-patches >> Sent: Friday, May 12, 2023 3:33 PM >> To: gdb-patches@sourceware.org >> Cc: eliz@gnu.org; aburgess@redhat.com >> Subject: [PATCH v5 1/1] gdb, infcmd: Support jump command with same line >> in multiple symtabs >>=20 >> If a header file defining a static function is included in multiple sour= ce >> files, each calling the function, and GDB is asked to jump to a line ins= ide >> that function, there would be multiple locations matching the target. T= he >> solution in this commit is to select the location in the current symtab. >> --- >> gdb/doc/gdb.texinfo | 4 +- >> gdb/infcmd.c | 14 ++++- >> .../gdb.base/jump_multiple_objfiles-foo.c | 24 +++++++++ >> .../gdb.base/jump_multiple_objfiles.c | 30 +++++++++++ >> .../gdb.base/jump_multiple_objfiles.exp | 54 +++++++++++++++++++ >> .../gdb.base/jump_multiple_objfiles.h | 30 +++++++++++ >> 6 files changed, 154 insertions(+), 2 deletions(-) >> create mode 100755 gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c >> create mode 100755 gdb/testsuite/gdb.base/jump_multiple_objfiles.c >> create mode 100755 gdb/testsuite/gdb.base/jump_multiple_objfiles.exp >> create mode 100755 gdb/testsuite/gdb.base/jump_multiple_objfiles.h >>=20 >> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo >> index 531147f6e6b..e43a71a7bbb 100644 >> --- a/gdb/doc/gdb.texinfo >> +++ b/gdb/doc/gdb.texinfo >> @@ -20587,7 +20587,9 @@ an address of your own choosing, with the >> following commands: >> Resume execution at the address of the code location that results from >> resolving @var{locspec}. >> @xref{Location Specifications}, for a description of the different >> -forms of @var{locspec}. If @var{locspec} resolves to more than one >> +forms of @var{locspec}. If @var{locspec} resolves to more than one >> address, >> +those outside the current compilation unit are ignored. If considering= just >> +the addresses in the current compilation unit still doesn't yield a uni= que >> address, the command aborts before jumping. >> Execution stops again immediately if there is a breakpoint there. It >> is common practice to use the @code{tbreak} command in conjunction >> diff --git a/gdb/infcmd.c b/gdb/infcmd.c >> index b12b58db9cb..15702f84894 100644 >> --- a/gdb/infcmd.c >> +++ b/gdb/infcmd.c >> @@ -1070,7 +1070,19 @@ jump_command (const char *arg, int from_tty) >> std::vector sals >> =3D decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE)= ; >> if (sals.size () !=3D 1) >> - error (_("Unreasonable jump request")); >> + { >> + /* If multiple sal-objects were found, try dropping those that ar= en't >> +=09 from the current symtab. */ >> + struct symtab_and_line cursal =3D get_current_source_symtab_and_l= ine >> (); >> + sals.erase (std::remove_if (sals.begin (), sals.end (), >> +=09=09 [&] (const symtab_and_line &sal) >> +=09=09 { >> +=09=09 return sal.symtab !=3D cursal.symtab; >> +=09=09 }), sals.end ()); >> + if (sals.size () !=3D 1) >> +=09error (_("Jump request is ambiguous: " >> +=09=09 "does not resolve to a single address")); >> + } >>=20 >> symtab_and_line &sal =3D sals[0]; >>=20 >> diff --git a/gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c >> b/gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c >> new file mode 100755 >> index 00000000000..16863c8594b >> --- /dev/null >> +++ b/gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c >> @@ -0,0 +1,24 @@ >> +/* This testcase is part of GDB, the GNU debugger. >> + >> + Copyright 2021-2023 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 = . */ >> + >> +#include "jump_multiple_objfiles.h" >> + >> +int >> +foo (int n) >> +{ >> + return bar (n); >> +} >> diff --git a/gdb/testsuite/gdb.base/jump_multiple_objfiles.c >> b/gdb/testsuite/gdb.base/jump_multiple_objfiles.c >> new file mode 100755 >> index 00000000000..b54eede9eb1 >> --- /dev/null >> +++ b/gdb/testsuite/gdb.base/jump_multiple_objfiles.c >> @@ -0,0 +1,30 @@ >> +/* This testcase is part of GDB, the GNU debugger. >> + >> + Copyright 2021-2023 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 = . */ >> + >> +#include "jump_multiple_objfiles.h" >> + >> +extern int foo (int n); >> + >> + >> +int >> +main () >> +{ >> + int n =3D foo (1); >> + bar (n); >> + >> + return 0; >> +} >> diff --git a/gdb/testsuite/gdb.base/jump_multiple_objfiles.exp >> b/gdb/testsuite/gdb.base/jump_multiple_objfiles.exp >> new file mode 100755 >> index 00000000000..b178e60150e >> --- /dev/null >> +++ b/gdb/testsuite/gdb.base/jump_multiple_objfiles.exp >> @@ -0,0 +1,54 @@ >> +# Copyright 2021-2023 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 .= */ >> +# >> +# Tests GDBs support for jump, when the source line is in multiple >> +# object files. >> + >> + >> +standard_testfile .c -foo.c .h >> + >> + >> +if { [prepare_for_testing "failed to prepare" $testfile \ >> + [list ${srcfile} ${srcfile2}]] } { >> + return -1 >> +} >> + >> +if { ![runto_main] } { >> + return -1 >> +} >> + >> + >> +set bar_first_line [gdb_get_line_number "bar-first-line" ${srcfile3}] >> +set bar_middle_line [gdb_get_line_number "bar-middle-line" ${srcfile3}] >> +set bar_last_line [gdb_get_line_number "bar-last-line" ${srcfile3}] >> + >> + >> +# Set breakpoints in the function bar. Executable has two object files= , >> +# and both have a copy of the same source lines. Therefore breakpoints >> +# will have two locations. >> +gdb_breakpoint "${srcfile3}:${bar_first_line}" >> +gdb_breakpoint "${srcfile3}:${bar_last_line}" >> + >> +# Run to the breakpoint in bar. >> +gdb_continue_to_breakpoint "bar_first_line" \ >> + ".*${srcfile3}:${bar_first_line}.*" >> + >> +# Jump within the function. Debugger shall be able to jump, even if th= e >> +# target line is in two different object files. After jump, we will hi= t >> +# the breakpoint at the last line of bar. >> +gdb_test "jump ${bar_middle_line}" [multi_line \ >> + "Continuing at ($hex).*" \ >> + "Breakpoint ${decimal}.* at .*${srcfile3}:${bar_last_line}.*"] \ >> + "Jump within the objectfile" >> diff --git a/gdb/testsuite/gdb.base/jump_multiple_objfiles.h >> b/gdb/testsuite/gdb.base/jump_multiple_objfiles.h >> new file mode 100755 >> index 00000000000..0a3815e1808 >> --- /dev/null >> +++ b/gdb/testsuite/gdb.base/jump_multiple_objfiles.h >> @@ -0,0 +1,30 @@ >> +/* Copyright (C) 2021-2023 Free Software Foundation, Inc. >> + >> + This file is part of GDB. >> + >> + 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 = . */ >> + >> +#ifndef JUMP_MULTIPLE_OBJFILES_H >> +#define JUMP_MULTIPLE_OBJFILES_H >> + >> +static int >> +bar (int n) >> +{ >> + int retval =3D n; >> + retval +=3D 1; /* bar-first-line */ >> + retval *=3D -1; /* bar-middle-line */ >> + return retval; /* bar-last-line */ >> +} >> + >> +#endif /* JUMP_MULTIPLE_OBJFILES_H */ >> -- >> 2.25.1 >>=20 >> Intel Deutschland GmbH >> Registered Address: Am Campeon 10, 85579 Neubiberg, Germany >> Tel: +49 89 99 8853-0, www.intel.de >> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silv= a >> Chairperson of the Supervisory Board: Nicole Lau >> Registered Office: Munich >> Commercial Register: Amtsgericht Muenchen HRB 186928 > > Intel Deutschland GmbH > Registered Address: Am Campeon 10, 85579 Neubiberg, Germany > Tel: +49 89 99 8853-0, www.intel.de > Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva= =20 > Chairperson of the Supervisory Board: Nicole Lau > Registered Office: Munich > Commercial Register: Amtsgericht Muenchen HRB 186928