/* Work with executable files, for GDB.
- Copyright (C) 1988-2018 Free Software Foundation, Inc.
+ Copyright (C) 1988-2019 Free Software Foundation, Inc.
This file is part of GDB.
void (*deprecated_file_changed_hook) (const char *);
+static const target_info exec_target_info = {
+ "exec",
+ N_("Local exec file"),
+ N_("Use an executable file as a target.\n\
+Specify the filename of the executable file.")
+};
+
/* The target vector for executable files. */
struct exec_target final : public target_ops
{
- exec_target ()
- { to_stratum = file_stratum; }
-
- const char *shortname () override
- { return "exec"; }
+ const target_info &info () const override
+ { return exec_target_info; }
- const char *longname () override
- { return _("Local exec file"); }
+ strata stratum () const override { return file_stratum; }
- const char *doc () override
- {
- return _("\
-Use an executable file as a target.\n\
-Specify the filename of the executable file.");
- }
-
- void open (const char *, int) override;
void close () override;
enum target_xfer_status xfer_partial (enum target_object object,
const char *annex,
}
-void
-exec_target::open (const char *args, int from_tty)
+static void
+exec_target_open (const char *args, int from_tty)
{
target_preopen (from_tty);
exec_file_attach (args, from_tty);
try_open_exec_file (const char *exec_file_host, struct inferior *inf,
symfile_add_flags add_flags)
{
- struct cleanup *old_chain;
struct gdb_exception prev_err = exception_none;
- old_chain = make_cleanup (free_current_contents, &prev_err.message);
-
/* exec_file_attach and symbol_file_add_main may throw an error if the file
cannot be opened either locally or remotely.
Even without a symbol file, the remote-based debugging session should
continue normally instead of ending abruptly. Hence we catch thrown
errors/exceptions in the following code. */
+ std::string saved_message;
TRY
{
/* We must do this step even if exec_file_host is NULL, so that
/* Save message so it doesn't get trashed by the catch below. */
if (err.message != NULL)
- prev_err.message = xstrdup (err.message);
+ {
+ saved_message = err.message;
+ prev_err.message = saved_message.c_str ();
+ }
}
END_CATCH
}
END_CATCH
}
-
- do_cleanups (old_chain);
}
/* See gdbcore.h. */
exec_close ();
error (_("\"%s\": not in executable format: %s"),
scratch_pathname,
- gdb_bfd_errmsg (bfd_get_error (), matching));
+ gdb_bfd_errmsg (bfd_get_error (), matching).c_str ());
}
if (build_section_table (exec_bfd, §ions, §ions_end))
show_write_files,
&setlist, &showlist);
- add_target_with_completer (&exec_ops, filename_completer);
+ add_target (exec_target_info, exec_target_open, filename_completer);
}