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 C48AB3857716 for ; Wed, 24 May 2023 16:03:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C48AB3857716 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=1684944238; 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=72NfQsBaVb0+hzrXFVFarldNiJvdyySrjam/TqkTQAQ=; b=ermZ7uzG8XRpz21Ox9a64oX73XSugoTaz8ZFonGP1zZEzK/VEmJBQFVUvBivb0kMxi1pTv ApqouNBPqwmK6rj5WL2s6AegubrAadLh26Ob3LMh91EEMETD9u25gGxpoph+GEAOo59uHC DPZu4uUedVp5R7lZ6nnIbmzDSzssVZs= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-348-ugaynzDNOequMDeNKqAejg-1; Wed, 24 May 2023 12:03:57 -0400 X-MC-Unique: ugaynzDNOequMDeNKqAejg-1 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3093b0cf714so420519f8f.2 for ; Wed, 24 May 2023 09:03:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684944236; x=1687536236; 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=qcsCGpJt9Fj9Rjj6TFEu6A64IcMptrXYjTS8j9eUbl8=; b=ZNEKQ74ZPH9tWrFcI+g/tsknbkmwVXfL0q4OzfqTpLCA6HltZoF58Mi6y5PGujj2it vR+EfZlg6IyrAYTqRUDr3CLZ22hUUrTXDeBCYTcbGE71IjBc5MwIWmJueYvFywGlaekg p87BpHuviCG+fn7B7S22z04xtAPg6LliZbPAHYKmZyHE+DpT+nIxhOyYNuy8zcH68AEw Dp0nS4FCUkF2OanfL7FXUpwhuzELb+VltvhcOkhqQ2KTThN490TK4eMDN/OMUmKBECup v4cKnhsuG4AnsjsCY1RbX94TsQ8d8FjZMkT+oXtoRbvNoYHD8ctA++0XC6R42JkTmrSo 4MLQ== X-Gm-Message-State: AC+VfDz7pXiyxWJJ4gmI6C1A6ynrJYIfRKu0QmQ5xdErtmcp2UvaskCn NkQRrXvau1FvVRTBurRErqyloclK1HeMEVhmWYls8fpJSCzjZ3ulcjU/qA0nAkTG/ZQuEvJ4CBu ZP0kA7k20bd0vQPe0PiLBDQ== X-Received: by 2002:a5d:490b:0:b0:30a:8c65:50d6 with SMTP id x11-20020a5d490b000000b0030a8c6550d6mr235903wrq.12.1684944235912; Wed, 24 May 2023 09:03:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4Q+4r94Rb+Zkw0ij8kR7Lh3PwRYPcnRMMGDOlxdYGYGWcYBocUcQSlFTeVd90CKesEok0otQ== X-Received: by 2002:a5d:490b:0:b0:30a:8c65:50d6 with SMTP id x11-20020a5d490b000000b0030a8c6550d6mr235887wrq.12.1684944235541; Wed, 24 May 2023 09:03:55 -0700 (PDT) Received: from localhost (11.72.115.87.dyn.plus.net. [87.115.72.11]) by smtp.gmail.com with ESMTPSA id m10-20020a7bca4a000000b003f6042d6d92sm2729161wml.46.2023.05.24.09.03.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 May 2023 09:03:55 -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: <87jzwx7uzm.fsf@redhat.com> References: <20230512133320.1236624-1-matti.puputti@intel.com> <20230512133320.1236624-2-matti.puputti@intel.com> <87jzwx7uzm.fsf@redhat.com> Date: Wed, 24 May 2023 17:03:53 +0100 Message-ID: <87353l7m3a.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: Andrew Burgess writes: > "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. I've now pushed this patch. Thanks, Andrew > > Thanks for your work on this, > Andrew > > >> >> >> Patch 4:=09https://sourceware.org/pipermail/gdb-patches/2023-May/199464.= html >> Andrew's comments on patch 4:=09https://sourceware.org/pipermail/gdb-pat= ches/2023-May/199471.html >> Eli's comments on patch 4:=09https://sourceware.org/pipermail/gdb-patche= s/2023-May/199467.html >> Patch 5:=09https://sourceware.org/pipermail/gdb-patches/2023-May/199540.= html >> Eli=E2=80=99s ok on path 5:=09https://sourceware.org/pipermail/gdb-patch= es/2023-May/199544.html >> My msg to Andrew:=09https://sourceware.org/pipermail/gdb-patches/2023-Ma= y/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 lin= e >>> in multiple symtabs >>>=20 >>> If a header file defining a static function is included in multiple sou= rce >>> files, each calling the function, and GDB is asked to jump to a line in= side >>> that function, there would be multiple locations matching the target. = The >>> 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 considerin= g just >>> +the addresses in the current compilation unit still doesn't yield a un= ique >>> 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 a= ren't >>> +=09 from the current symtab. */ >>> + struct symtab_and_line cursal =3D get_current_source_symtab_and_= line >>> (); >>> + 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 modif= y >>> + it under the terms of the GNU General Public License as published b= y >>> + 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 modif= y >>> + it under the terms of the GNU General Public License as published b= y >>> + 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 file= s, >>> +# and both have a copy of the same source lines. Therefore breakpoint= s >>> +# 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 t= he >>> +# target line is in two different object files. After jump, we will h= it >>> +# 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 modif= y >>> + it under the terms of the GNU General Public License as published b= y >>> + 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 Sil= va >>> 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 Silv= a =20 >> Chairperson of the Supervisory Board: Nicole Lau >> Registered Office: Munich >> Commercial Register: Amtsgericht Muenchen HRB 186928