diff options
author | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2020-06-21 21:26:25 +0200 |
---|---|---|
committer | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2020-06-24 22:21:07 +0200 |
commit | a8654e7d784980cb4596f685964200fcc1164c78 (patch) | |
tree | 370684971b40dbaf07a82222c41dac37d2be9c6f /gdb/symfile.c | |
parent | 069057bf0f8f776f7981c94b4e3cbc821342e593 (diff) | |
download | gdb-a8654e7d784980cb4596f685964200fcc1164c78.zip gdb-a8654e7d784980cb4596f685964200fcc1164c78.tar.gz gdb-a8654e7d784980cb4596f685964200fcc1164c78.tar.bz2 |
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.
Diffstat (limited to 'gdb/symfile.c')
-rw-r--r-- | gdb/symfile.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gdb/symfile.c b/gdb/symfile.c index b29f864..2c38ce4 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -1051,6 +1051,7 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name, struct objfile *objfile; const int from_tty = add_flags & SYMFILE_VERBOSE; 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) && (readnow_symbol_files || (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) 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. */ - if ((have_full_symbols () || have_partial_symbols ()) - && mainline - && from_tty + if (from_tty + && (always_confirm + || ((have_full_symbols () || have_partial_symbols ()) + && mainline)) && !query (_("Load new symbol table from \"%s\"? "), name)) error (_("Not confirmed.")); |