* [PATCH v5 0/1] gdb, infcmd: Support jump command with same line in multiple symtabs @ 2023-05-12 13:33 Matti Puputti 2023-05-12 13:33 ` [PATCH v5 1/1] " Matti Puputti 0 siblings, 1 reply; 8+ messages in thread From: Matti Puputti @ 2023-05-12 13:33 UTC (permalink / raw) To: gdb-patches; +Cc: eliz, aburgess This pach addresses comments from Eli. Both the text in documentation and the error message are updated with his proposals. Patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199464.html Andrew's approval on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199471.html Eli's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199467.html Matti Puputti (1): gdb, infcmd: Support jump command with same line in multiple symtabs 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 -- 2.25.1 Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-12 13:33 [PATCH v5 0/1] gdb, infcmd: Support jump command with same line in multiple symtabs Matti Puputti @ 2023-05-12 13:33 ` Matti Puputti 2023-05-12 14:38 ` Eli Zaretskii 2023-05-22 8:01 ` [PING][PATCH " Puputti, Matti 0 siblings, 2 replies; 8+ messages in thread From: Matti Puputti @ 2023-05-12 13:33 UTC (permalink / raw) To: gdb-patches; +Cc: eliz, aburgess If a header file defining a static function is included in multiple source files, each calling the function, and GDB is asked to jump to a line inside 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 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 unique 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<symtab_and_line> sals = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE); if (sals.size () != 1) - error (_("Unreasonable jump request")); + { + /* If multiple sal-objects were found, try dropping those that aren't + from the current symtab. */ + struct symtab_and_line cursal = get_current_source_symtab_and_line (); + sals.erase (std::remove_if (sals.begin (), sals.end (), + [&] (const symtab_and_line &sal) + { + return sal.symtab != cursal.symtab; + }), sals.end ()); + if (sals.size () != 1) + error (_("Jump request is ambiguous: " + "does not resolve to a single address")); + } symtab_and_line &sal = sals[0]; 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 <http://www.gnu.org/licenses/>. */ + +#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 <http://www.gnu.org/licenses/>. */ + +#include "jump_multiple_objfiles.h" + +extern int foo (int n); + + +int +main () +{ + int n = 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 <http://www.gnu.org/licenses/>. */ +# +# 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 the +# target line is in two different object files. After jump, we will hit +# 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 <http://www.gnu.org/licenses/>. */ + +#ifndef JUMP_MULTIPLE_OBJFILES_H +#define JUMP_MULTIPLE_OBJFILES_H + +static int +bar (int n) +{ + int retval = n; + retval += 1; /* bar-first-line */ + retval *= -1; /* bar-middle-line */ + return retval; /* bar-last-line */ +} + +#endif /* JUMP_MULTIPLE_OBJFILES_H */ -- 2.25.1 Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-12 13:33 ` [PATCH v5 1/1] " Matti Puputti @ 2023-05-12 14:38 ` Eli Zaretskii 2023-05-15 8:19 ` Puputti, Matti 2023-05-22 8:01 ` [PING][PATCH " Puputti, Matti 1 sibling, 1 reply; 8+ messages in thread From: Eli Zaretskii @ 2023-05-12 14:38 UTC (permalink / raw) To: Matti Puputti; +Cc: gdb-patches, aburgess > From: Matti Puputti <matti.puputti@intel.com> > Cc: eliz@gnu.org, > aburgess@redhat.com > Date: Fri, 12 May 2023 15:33:20 +0200 > > If a header file defining a static function is included in multiple source > files, each calling the function, and GDB is asked to jump to a line inside > 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 Thanks, the documentation part of this is OK. Reviewed-By: Eli Zaretskii <eliz@gnu.org> ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-12 14:38 ` Eli Zaretskii @ 2023-05-15 8:19 ` Puputti, Matti 0 siblings, 0 replies; 8+ messages in thread From: Puputti, Matti @ 2023-05-15 8:19 UTC (permalink / raw) To: aburgess; +Cc: Eli Zaretskii, gdb-patches Hi Andrew, Thank you for the review. Please note that the Patch 5 makes one more change in the code, by changing the error message ("Unreasonable jump request" -> "Jump request is ambiguous: does not resolve to a single address"). If you are ok with the new error message, and since Eli seems to be ok with the documentation, I think we are ready to push. I don't yet have rights to push. Can you please push this commit for me? Br, Matti Puputti > -----Original Message----- > From: Eli Zaretskii <eliz@gnu.org> > Sent: Friday, May 12, 2023 4:38 PM > To: Puputti, Matti <matti.puputti@intel.com> > Cc: gdb-patches@sourceware.org; aburgess@redhat.com > Subject: Re: [PATCH v5 1/1] gdb, infcmd: Support jump command with same > line in multiple symtabs > > > From: Matti Puputti <matti.puputti@intel.com> > > Cc: eliz@gnu.org, > > aburgess@redhat.com > > Date: Fri, 12 May 2023 15:33:20 +0200 > > > > If a header file defining a static function is included in multiple source > > files, each calling the function, and GDB is asked to jump to a line inside > > 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 > > Thanks, the documentation part of this is OK. > > Reviewed-By: Eli Zaretskii <eliz@gnu.org> Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PING][PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-12 13:33 ` [PATCH v5 1/1] " Matti Puputti 2023-05-12 14:38 ` Eli Zaretskii @ 2023-05-22 8:01 ` Puputti, Matti 2023-05-24 12:51 ` Andrew Burgess 1 sibling, 1 reply; 8+ messages in thread From: Puputti, Matti @ 2023-05-22 8:01 UTC (permalink / raw) To: gdb-patches; +Cc: eliz, aburgess Kindly asking for review, approval and help to push. Patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199464.html Andrew's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199471.html Eli's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199467.html Patch 5: https://sourceware.org/pipermail/gdb-patches/2023-May/199540.html Eli’s ok on path 5: https://sourceware.org/pipermail/gdb-patches/2023-May/199544.html My msg to Andrew: https://sourceware.org/pipermail/gdb-patches/2023-May/199570.html Br, Matti Puputti > -----Original Message----- > From: Gdb-patches <gdb-patches- > bounces+matti.puputti=intel.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 > > If a header file defining a static function is included in multiple source > files, each calling the function, and GDB is asked to jump to a line inside > 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 > > 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 unique > 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<symtab_and_line> sals > = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE); > if (sals.size () != 1) > - error (_("Unreasonable jump request")); > + { > + /* If multiple sal-objects were found, try dropping those that aren't > + from the current symtab. */ > + struct symtab_and_line cursal = get_current_source_symtab_and_line > (); > + sals.erase (std::remove_if (sals.begin (), sals.end (), > + [&] (const symtab_and_line &sal) > + { > + return sal.symtab != cursal.symtab; > + }), sals.end ()); > + if (sals.size () != 1) > + error (_("Jump request is ambiguous: " > + "does not resolve to a single address")); > + } > > symtab_and_line &sal = sals[0]; > > 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 <http://www.gnu.org/licenses/>. */ > + > +#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 <http://www.gnu.org/licenses/>. */ > + > +#include "jump_multiple_objfiles.h" > + > +extern int foo (int n); > + > + > +int > +main () > +{ > + int n = 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 <http://www.gnu.org/licenses/>. */ > +# > +# 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 the > +# target line is in two different object files. After jump, we will hit > +# 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 <http://www.gnu.org/licenses/>. */ > + > +#ifndef JUMP_MULTIPLE_OBJFILES_H > +#define JUMP_MULTIPLE_OBJFILES_H > + > +static int > +bar (int n) > +{ > + int retval = n; > + retval += 1; /* bar-first-line */ > + retval *= -1; /* bar-middle-line */ > + return retval; /* bar-last-line */ > +} > + > +#endif /* JUMP_MULTIPLE_OBJFILES_H */ > -- > 2.25.1 > > Intel Deutschland GmbH > Registered Address: Am Campeon 10, 85579 Neubiberg, Germany > Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> > Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva > 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 <http://www.intel.de> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PING][PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-22 8:01 ` [PING][PATCH " Puputti, Matti @ 2023-05-24 12:51 ` Andrew Burgess 2023-05-24 16:03 ` Andrew Burgess 0 siblings, 1 reply; 8+ messages in thread From: Andrew Burgess @ 2023-05-24 12:51 UTC (permalink / raw) To: Puputti, Matti, gdb-patches; +Cc: eliz "Puputti, Matti" <matti.puputti@intel.com> 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: https://sourceware.org/pipermail/gdb-patches/2023-May/199464.html > Andrew's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199471.html > Eli's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199467.html > Patch 5: https://sourceware.org/pipermail/gdb-patches/2023-May/199540.html > Eli’s ok on path 5: https://sourceware.org/pipermail/gdb-patches/2023-May/199544.html > My msg to Andrew: https://sourceware.org/pipermail/gdb-patches/2023-May/199570.html > > Br, > Matti Puputti > > >> -----Original Message----- >> From: Gdb-patches <gdb-patches- >> bounces+matti.puputti=intel.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 >> >> If a header file defining a static function is included in multiple source >> files, each calling the function, and GDB is asked to jump to a line inside >> 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 >> >> 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 unique >> 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<symtab_and_line> sals >> = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE); >> if (sals.size () != 1) >> - error (_("Unreasonable jump request")); >> + { >> + /* If multiple sal-objects were found, try dropping those that aren't >> + from the current symtab. */ >> + struct symtab_and_line cursal = get_current_source_symtab_and_line >> (); >> + sals.erase (std::remove_if (sals.begin (), sals.end (), >> + [&] (const symtab_and_line &sal) >> + { >> + return sal.symtab != cursal.symtab; >> + }), sals.end ()); >> + if (sals.size () != 1) >> + error (_("Jump request is ambiguous: " >> + "does not resolve to a single address")); >> + } >> >> symtab_and_line &sal = sals[0]; >> >> 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 <http://www.gnu.org/licenses/>. */ >> + >> +#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 <http://www.gnu.org/licenses/>. */ >> + >> +#include "jump_multiple_objfiles.h" >> + >> +extern int foo (int n); >> + >> + >> +int >> +main () >> +{ >> + int n = 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 <http://www.gnu.org/licenses/>. */ >> +# >> +# 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 the >> +# target line is in two different object files. After jump, we will hit >> +# 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 <http://www.gnu.org/licenses/>. */ >> + >> +#ifndef JUMP_MULTIPLE_OBJFILES_H >> +#define JUMP_MULTIPLE_OBJFILES_H >> + >> +static int >> +bar (int n) >> +{ >> + int retval = n; >> + retval += 1; /* bar-first-line */ >> + retval *= -1; /* bar-middle-line */ >> + return retval; /* bar-last-line */ >> +} >> + >> +#endif /* JUMP_MULTIPLE_OBJFILES_H */ >> -- >> 2.25.1 >> >> Intel Deutschland GmbH >> Registered Address: Am Campeon 10, 85579 Neubiberg, Germany >> Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> >> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva >> 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 <http://www.intel.de> > Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva > Chairperson of the Supervisory Board: Nicole Lau > Registered Office: Munich > Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PING][PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-24 12:51 ` Andrew Burgess @ 2023-05-24 16:03 ` Andrew Burgess 2023-05-25 5:38 ` Puputti, Matti 0 siblings, 1 reply; 8+ messages in thread From: Andrew Burgess @ 2023-05-24 16:03 UTC (permalink / raw) To: Puputti, Matti, gdb-patches; +Cc: eliz Andrew Burgess <aburgess@redhat.com> writes: > "Puputti, Matti" <matti.puputti@intel.com> 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: https://sourceware.org/pipermail/gdb-patches/2023-May/199464.html >> Andrew's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199471.html >> Eli's comments on patch 4: https://sourceware.org/pipermail/gdb-patches/2023-May/199467.html >> Patch 5: https://sourceware.org/pipermail/gdb-patches/2023-May/199540.html >> Eli’s ok on path 5: https://sourceware.org/pipermail/gdb-patches/2023-May/199544.html >> My msg to Andrew: https://sourceware.org/pipermail/gdb-patches/2023-May/199570.html >> >> Br, >> Matti Puputti >> >> >>> -----Original Message----- >>> From: Gdb-patches <gdb-patches- >>> bounces+matti.puputti=intel.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 >>> >>> If a header file defining a static function is included in multiple source >>> files, each calling the function, and GDB is asked to jump to a line inside >>> 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 >>> >>> 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 unique >>> 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<symtab_and_line> sals >>> = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE); >>> if (sals.size () != 1) >>> - error (_("Unreasonable jump request")); >>> + { >>> + /* If multiple sal-objects were found, try dropping those that aren't >>> + from the current symtab. */ >>> + struct symtab_and_line cursal = get_current_source_symtab_and_line >>> (); >>> + sals.erase (std::remove_if (sals.begin (), sals.end (), >>> + [&] (const symtab_and_line &sal) >>> + { >>> + return sal.symtab != cursal.symtab; >>> + }), sals.end ()); >>> + if (sals.size () != 1) >>> + error (_("Jump request is ambiguous: " >>> + "does not resolve to a single address")); >>> + } >>> >>> symtab_and_line &sal = sals[0]; >>> >>> 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 <http://www.gnu.org/licenses/>. */ >>> + >>> +#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 <http://www.gnu.org/licenses/>. */ >>> + >>> +#include "jump_multiple_objfiles.h" >>> + >>> +extern int foo (int n); >>> + >>> + >>> +int >>> +main () >>> +{ >>> + int n = 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 <http://www.gnu.org/licenses/>. */ >>> +# >>> +# 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 the >>> +# target line is in two different object files. After jump, we will hit >>> +# 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 <http://www.gnu.org/licenses/>. */ >>> + >>> +#ifndef JUMP_MULTIPLE_OBJFILES_H >>> +#define JUMP_MULTIPLE_OBJFILES_H >>> + >>> +static int >>> +bar (int n) >>> +{ >>> + int retval = n; >>> + retval += 1; /* bar-first-line */ >>> + retval *= -1; /* bar-middle-line */ >>> + return retval; /* bar-last-line */ >>> +} >>> + >>> +#endif /* JUMP_MULTIPLE_OBJFILES_H */ >>> -- >>> 2.25.1 >>> >>> Intel Deutschland GmbH >>> Registered Address: Am Campeon 10, 85579 Neubiberg, Germany >>> Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> >>> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva >>> 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 <http://www.intel.de> >> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva >> Chairperson of the Supervisory Board: Nicole Lau >> Registered Office: Munich >> Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PING][PATCH v5 1/1] gdb, infcmd: Support jump command with same line in multiple symtabs 2023-05-24 16:03 ` Andrew Burgess @ 2023-05-25 5:38 ` Puputti, Matti 0 siblings, 0 replies; 8+ messages in thread From: Puputti, Matti @ 2023-05-25 5:38 UTC (permalink / raw) To: Andrew Burgess, gdb-patches; +Cc: eliz Hi Andrew, Eliz, Thank you for your support, it is very much appreciated! Br, Matti Puputti > -----Original Message----- > From: Andrew Burgess <aburgess@redhat.com> > Sent: Wednesday, May 24, 2023 6:04 PM > To: Puputti, Matti <matti.puputti@intel.com>; 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 > > Andrew Burgess <aburgess@redhat.com> writes: > > > "Puputti, Matti" <matti.puputti@intel.com> 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 > > Intel Deutschland GmbH Registered Address: Am Campeon 10, 85579 Neubiberg, Germany Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva Chairperson of the Supervisory Board: Nicole Lau Registered Office: Munich Commercial Register: Amtsgericht Muenchen HRB 186928 ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-05-25 5:38 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-05-12 13:33 [PATCH v5 0/1] gdb, infcmd: Support jump command with same line in multiple symtabs Matti Puputti 2023-05-12 13:33 ` [PATCH v5 1/1] " Matti Puputti 2023-05-12 14:38 ` Eli Zaretskii 2023-05-15 8:19 ` Puputti, Matti 2023-05-22 8:01 ` [PING][PATCH " Puputti, Matti 2023-05-24 12:51 ` Andrew Burgess 2023-05-24 16:03 ` Andrew Burgess 2023-05-25 5:38 ` Puputti, Matti
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).