From fe83066292c6aaa8227b2d38c343379a209cb4ba Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 16 Sep 2020 09:49:36 -0600 Subject: [PATCH] Match demangled name in "skip" PR gdb/26598 notes that, before commit bcfe6157ca28 ("Use the linkage name if it exists"), the "skip" command would match the demangled name of a symbol, but now only matches the linkage name. This patch fixes this regression. I looked at all calls to function_name_is_marked_for_skip, and only one used the linkage name. 2020-09-16 Tom Tromey PR gdb/26598: * infrun.c (fill_in_stop_func): Use find_pc_partial_function_sym. gdb/testsuite/ChangeLog 2020-09-16 Tom Tromey PR gdb/26598: * gdb.base/skipcxx.exp: New file. * gdb.base/skipcxx.cc: New file. --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 12 ++++++----- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/skipcxx.cc | 32 ++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/skipcxx.exp | 29 +++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 gdb/testsuite/gdb.base/skipcxx.cc create mode 100644 gdb/testsuite/gdb.base/skipcxx.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d05e6d21f85..a56fc5b05fa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-09-16 Tom Tromey + + PR gdb/26598: + * infrun.c (fill_in_stop_func): Use find_pc_partial_function_sym. + 2020-09-16 John Baldwin * fbsd-nat.c (fbsd_nat_target::wait): Always check for diff --git a/gdb/infrun.c b/gdb/infrun.c index 5773fd03951..780d5bc791e 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -4358,14 +4358,16 @@ fill_in_stop_func (struct gdbarch *gdbarch, if (!ecs->stop_func_filled_in) { const block *block; + const general_symbol_info *gsi; /* Don't care about return value; stop_func_start and stop_func_name will both be 0 if it doesn't work. */ - find_pc_partial_function (ecs->event_thread->suspend.stop_pc, - &ecs->stop_func_name, - &ecs->stop_func_start, - &ecs->stop_func_end, - &block); + find_pc_partial_function_sym (ecs->event_thread->suspend.stop_pc, + &gsi, + &ecs->stop_func_start, + &ecs->stop_func_end, + &block); + ecs->stop_func_name = gsi == nullptr ? nullptr : gsi->print_name (); /* The call to find_pc_partial_function, above, will set stop_func_start and stop_func_end to the start and end diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0a29d7f6791..a0211e61c5a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-09-16 Tom Tromey + + PR gdb/26598: + * gdb.base/skipcxx.exp: New file. + * gdb.base/skipcxx.cc: New file. + 2020-09-16 Tom de Vries PR testsuite/26617 diff --git a/gdb/testsuite/gdb.base/skipcxx.cc b/gdb/testsuite/gdb.base/skipcxx.cc new file mode 100644 index 00000000000..5f653455c36 --- /dev/null +++ b/gdb/testsuite/gdb.base/skipcxx.cc @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020 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 . */ + +namespace somename +{ +int func() +{ + return 23; +} +} + +int +main () +{ + int x = somename::func (); + + return 0; +} diff --git a/gdb/testsuite/gdb.base/skipcxx.exp b/gdb/testsuite/gdb.base/skipcxx.exp new file mode 100644 index 00000000000..19144519eee --- /dev/null +++ b/gdb/testsuite/gdb.base/skipcxx.exp @@ -0,0 +1,29 @@ +# Copyright 2020 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 . + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +if ![runto_main] { + fail "can't run to main" + return +} + +gdb_test "skip -rfu ^somename::" \ + [string_to_regexp "Function(s) ^somename:: will be skipped when stepping."] +gdb_test "step" ".* return 0;" -- 2.30.2