mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
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
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
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…
Reference in New Issue
Block a user