Fix crash in -stack-list-arguments

-stack-list-arguments will crash when stopped in an Ada procedure that
has an argument with a certain name ("_objectO" -- which can only be
generated by the compiler).  The bug occurs because lookup_symbol will
fail in this case.

This patch changes -stack-list-arguments to mirror what is done with
arguments elsewhere.  (As an aside, I don't understand why this lookup
is even needed, but I assume it is some stabs thing?)

In the longer term I think it would be good to share this code between
MI and the CLI.  However, due to the upcoming release, I preferred a
more local fix.

gdb/ChangeLog
2020-07-22  Tom Tromey  <tromey@adacore.com>

	* mi/mi-cmd-stack.c (list_args_or_locals): Use
	lookup_symbol_search_name.

gdb/testsuite/ChangeLog
2020-07-22  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/mi_prot.exp: New file.
	* gdb.ada/mi_prot/pkg.adb: New file.
	* gdb.ada/mi_prot/pkg.ads: New file.
	* gdb.ada/mi_prot/prot.adb: New file.
This commit is contained in:
Tom Tromey 2020-07-22 12:28:33 -06:00
parent 8c419a91d7
commit 32fa152e3b
7 changed files with 148 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2020-07-22 Tom Tromey <tromey@adacore.com>
* mi/mi-cmd-stack.c (list_args_or_locals): Use
lookup_symbol_search_name.
2020-07-22 Andrew Burgess <andrew.burgess@embecosm.com>
* python/py-registers.c (gdbpy_register_object_data_init): Remove

View File

@ -634,9 +634,8 @@ list_args_or_locals (const frame_print_options &fp_opts,
struct frame_arg arg, entryarg;
if (SYMBOL_IS_ARGUMENT (sym))
sym2 = lookup_symbol (sym->linkage_name (),
block, VAR_DOMAIN,
NULL).symbol;
sym2 = lookup_symbol_search_name (sym->search_name (),
block, VAR_DOMAIN).symbol;
else
sym2 = sym;
gdb_assert (sym2 != NULL);

View File

@ -1,3 +1,10 @@
2020-07-22 Tom Tromey <tromey@adacore.com>
* gdb.ada/mi_prot.exp: New file.
* gdb.ada/mi_prot/pkg.adb: New file.
* gdb.ada/mi_prot/pkg.ads: New file.
* gdb.ada/mi_prot/prot.adb: New file.
2020-07-22 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
* gdb.base/jit-reader-simple.exp: Add a scenario for a binary that

View File

@ -0,0 +1,47 @@
# 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 <http://www.gnu.org/licenses/>.
load_lib "ada.exp"
standard_ada_testfile prot
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \
{debug additional_flags=-gnata}] != ""} {
return -1
}
load_lib mi-support.exp
set MIFLAGS "-i=mi"
gdb_exit
if {[mi_gdb_start]} {
continue
}
if {![mi_run_to_main]} then {
fail "cannot run to main, testcase aborted"
return 0
}
mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
set line [gdb_get_line_number "STOP" ${testdir}/prot.adb]
mi_continue_to_line $line "continue to protected method"
# The bug was that this crashed.
mi_gdb_test "-stack-list-arguments --no-frame-filters 1" \
"\\^done,stack=.*"

View File

@ -0,0 +1,21 @@
-- 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 <http://www.gnu.org/licenses/>.
package body Pkg is
procedure Do_Nothing (A : System.Address) is
begin
null;
end Do_Nothing;
end Pkg;

View File

@ -0,0 +1,19 @@
-- 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 <http://www.gnu.org/licenses/>.
with System;
package Pkg is
procedure Do_Nothing (A : System.Address);
end Pkg;

View File

@ -0,0 +1,47 @@
-- 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 <http://www.gnu.org/licenses/>.
with Pkg; use Pkg;
with System;
procedure Prot is
protected type Obj_Type
(Ceiling_Priority: System.Priority := System.Priority'Last)
with Priority => Ceiling_Priority
is
procedure Set (V : Integer);
function Get return Integer;
private
Local : Integer := 0;
end Obj_Type;
protected body Obj_Type is
procedure Set (V : Integer) is
begin
Local := V; -- STOP
end Set;
function Get return Integer is
begin
return Local;
end Get;
end Obj_Type;
Obj : Obj_Type;
begin
Obj.Set (5);
Pkg.Do_Nothing(Obj'Address);
end Prot;