[RFA] Fixes PR 25475: ensure exec-file-mismatch "ask" always asks in case of mismatch.
Philippe Waroquiers
philippe.waroquiers@skynet.be
Sun Jun 21 19:44:48 GMT 2020
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
YYYY-MM-DD 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.
---
gdb/exec.c | 5 ++++-
gdb/symfile-add-flags.h | 6 ++++++
gdb/symfile.c | 10 ++++++----
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/gdb/exec.c b/gdb/exec.c
index fa770c6f02..de473fbcb2 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -315,7 +315,10 @@ validate_exec_file (int from_tty)
{
symfile_add_flags add_flags = SYMFILE_MAINLINE;
if (from_tty)
- add_flags |= SYMFILE_VERBOSE;
+ {
+ add_flags |= SYMFILE_VERBOSE;
+ add_flags |= SYMFILE_ALWAYS_CONFIRM;
+ }
try
{
symbol_file_add_main (exec_file_target.c_str (), add_flags);
diff --git a/gdb/symfile-add-flags.h b/gdb/symfile-add-flags.h
index 740357bc12..2b2c2e68f2 100644
--- a/gdb/symfile-add-flags.h
+++ b/gdb/symfile-add-flags.h
@@ -44,6 +44,12 @@ enum symfile_add_flag : unsigned
/* The new objfile should be marked OBJF_NOT_FILENAME. */
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);
diff --git a/gdb/symfile.c b/gdb/symfile.c
index b29f864b37..0e2310176f 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."));
--
2.20.1
More information about the Gdb-patches
mailing list