mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-18 08:38:10 +08:00
Fixes PR 25475: ensure exec-file-mismatch "ask" always asks in case of mismatch.
As explained in https://sourceware.org/bugzilla/show_bug.cgi?id=25475, when the currently loaded file has no debug symbol, symbol_file_add_with_addrs does not ask a confirmation to the user before loading the new symbol file. The behaviour is not consistent when symbol_file_add_with_addrs is called due to exec-file-mismatch "ask" setting. The PR discusses several solutions/approaches. The preferred approach (suggested by Joel) is to ensure that GDB always asks a confirmation when it loads a new symbol file due to exec-file-mismatch, using a new SYMFILE add-flag. I tested this manually. If OK, we can remove the bypass introduced by Tom in 6b9374f1, in order to always answer to the 'load' question. gdb/ChangeLog 2020-06-24 Philippe Waroquiers <philippe.waroquiers@skynet.be> * symfile-add-flags.h: New flag SYMFILE_ALWAYS_CONFIRM. * exec.c (validate_exec_file): If from_tty, set both SYMFILE_VERBOSE (== from_tty) and SYMFILE_ALWAYS_CONFIRM. * symfile.c (symbol_file_add_with_addrs): if always_confirm and from_tty, unconditionally ask a confirmation.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2020-06-24 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||||
|
|
||||||
|
* symfile-add-flags.h: New flag SYMFILE_ALWAYS_CONFIRM.
|
||||||
|
* exec.c (validate_exec_file): If from_tty, set both
|
||||||
|
SYMFILE_VERBOSE (== from_tty) and SYMFILE_ALWAYS_CONFIRM.
|
||||||
|
* symfile.c (symbol_file_add_with_addrs): if always_confirm
|
||||||
|
and from_tty, unconditionally ask a confirmation.
|
||||||
|
|
||||||
2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com>
|
2020-06-23 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* target-descriptions.c (tdesc_architecture_name): Protect against
|
* target-descriptions.c (tdesc_architecture_name): Protect against
|
||||||
|
@ -315,7 +315,10 @@ validate_exec_file (int from_tty)
|
|||||||
{
|
{
|
||||||
symfile_add_flags add_flags = SYMFILE_MAINLINE;
|
symfile_add_flags add_flags = SYMFILE_MAINLINE;
|
||||||
if (from_tty)
|
if (from_tty)
|
||||||
add_flags |= SYMFILE_VERBOSE;
|
{
|
||||||
|
add_flags |= SYMFILE_VERBOSE;
|
||||||
|
add_flags |= SYMFILE_ALWAYS_CONFIRM;
|
||||||
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
symbol_file_add_main (exec_file_target.c_str (), add_flags);
|
symbol_file_add_main (exec_file_target.c_str (), add_flags);
|
||||||
|
@ -44,6 +44,12 @@ enum symfile_add_flag : unsigned
|
|||||||
|
|
||||||
/* The new objfile should be marked OBJF_NOT_FILENAME. */
|
/* The new objfile should be marked OBJF_NOT_FILENAME. */
|
||||||
SYMFILE_NOT_FILENAME = 1 << 5,
|
SYMFILE_NOT_FILENAME = 1 << 5,
|
||||||
|
|
||||||
|
/* If SYMFILE_VERBOSE (interpreted as from_tty) and SYMFILE_ALWAYS_CONFIRM,
|
||||||
|
always ask user to confirm loading the symbol file.
|
||||||
|
Without this flag, symbol_file_add_with_addrs asks a confirmation only
|
||||||
|
for a main symbol file replacing a file having symbols. */
|
||||||
|
SYMFILE_ALWAYS_CONFIRM = 1 << 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
DEF_ENUM_FLAGS_TYPE (enum symfile_add_flag, symfile_add_flags);
|
DEF_ENUM_FLAGS_TYPE (enum symfile_add_flag, symfile_add_flags);
|
||||||
|
@ -1051,6 +1051,7 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
|
|||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
const int from_tty = add_flags & SYMFILE_VERBOSE;
|
const int from_tty = add_flags & SYMFILE_VERBOSE;
|
||||||
const int mainline = add_flags & SYMFILE_MAINLINE;
|
const int mainline = add_flags & SYMFILE_MAINLINE;
|
||||||
|
const int always_confirm = add_flags & SYMFILE_ALWAYS_CONFIRM;
|
||||||
const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
|
const int should_print = (print_symbol_loading_p (from_tty, mainline, 1)
|
||||||
&& (readnow_symbol_files
|
&& (readnow_symbol_files
|
||||||
|| (add_flags & SYMFILE_NO_READ) == 0));
|
|| (add_flags & SYMFILE_NO_READ) == 0));
|
||||||
@ -1069,12 +1070,13 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
|
|||||||
if ((add_flags & SYMFILE_NOT_FILENAME) != 0)
|
if ((add_flags & SYMFILE_NOT_FILENAME) != 0)
|
||||||
flags |= OBJF_NOT_FILENAME;
|
flags |= OBJF_NOT_FILENAME;
|
||||||
|
|
||||||
/* Give user a chance to burp if we'd be
|
/* Give user a chance to burp if ALWAYS_CONFIRM or we'd be
|
||||||
interactively wiping out any existing symbols. */
|
interactively wiping out any existing symbols. */
|
||||||
|
|
||||||
if ((have_full_symbols () || have_partial_symbols ())
|
if (from_tty
|
||||||
&& mainline
|
&& (always_confirm
|
||||||
&& from_tty
|
|| ((have_full_symbols () || have_partial_symbols ())
|
||||||
|
&& mainline))
|
||||||
&& !query (_("Load new symbol table from \"%s\"? "), name))
|
&& !query (_("Load new symbol table from \"%s\"? "), name))
|
||||||
error (_("Not confirmed."));
|
error (_("Not confirmed."));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user