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:
parent
8c419a91d7
commit
32fa152e3b
7 changed files with 148 additions and 3 deletions
|
@ -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>
|
2020-07-22 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* python/py-registers.c (gdbpy_register_object_data_init): Remove
|
* python/py-registers.c (gdbpy_register_object_data_init): Remove
|
||||||
|
|
|
@ -634,9 +634,8 @@ list_args_or_locals (const frame_print_options &fp_opts,
|
||||||
struct frame_arg arg, entryarg;
|
struct frame_arg arg, entryarg;
|
||||||
|
|
||||||
if (SYMBOL_IS_ARGUMENT (sym))
|
if (SYMBOL_IS_ARGUMENT (sym))
|
||||||
sym2 = lookup_symbol (sym->linkage_name (),
|
sym2 = lookup_symbol_search_name (sym->search_name (),
|
||||||
block, VAR_DOMAIN,
|
block, VAR_DOMAIN).symbol;
|
||||||
NULL).symbol;
|
|
||||||
else
|
else
|
||||||
sym2 = sym;
|
sym2 = sym;
|
||||||
gdb_assert (sym2 != NULL);
|
gdb_assert (sym2 != NULL);
|
||||||
|
|
|
@ -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>
|
2020-07-22 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
|
||||||
|
|
||||||
* gdb.base/jit-reader-simple.exp: Add a scenario for a binary that
|
* gdb.base/jit-reader-simple.exp: Add a scenario for a binary that
|
||||||
|
|
47
gdb/testsuite/gdb.ada/mi_prot.exp
Normal file
47
gdb/testsuite/gdb.ada/mi_prot.exp
Normal 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=.*"
|
21
gdb/testsuite/gdb.ada/mi_prot/pkg.adb
Normal file
21
gdb/testsuite/gdb.ada/mi_prot/pkg.adb
Normal 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;
|
19
gdb/testsuite/gdb.ada/mi_prot/pkg.ads
Normal file
19
gdb/testsuite/gdb.ada/mi_prot/pkg.ads
Normal 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;
|
47
gdb/testsuite/gdb.ada/mi_prot/prot.adb
Normal file
47
gdb/testsuite/gdb.ada/mi_prot/prot.adb
Normal 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;
|
Loading…
Add table
Reference in a new issue