This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
RFA: change for gdb/mi 790
- From: "J. Johnston" <jjohnstn at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Thu, 17 Oct 2002 14:27:19 -0400
- Subject: RFA: change for gdb/mi 790
- Organization: Red Hat Inc.
The following patch adds support for -target-attach. It essentially copies the
code from target.c but removes the query in the case where target execution is
already in progress and simply performs the target_kill. I also changed the
output message to issue ^attached, .... as requested.
Eli, there is a documentation change in the mi portions of the manual.
Approval to commit?
-- Jeff J.
gdb/mi/ChangeLog
2002-10-17 Jeff Johnston <jjohnstn@redhat.com>
* gdbmi.texinfo (-target-attach): Add example.
* mi-main.c (mi_cmd_target_attach): New command.
* mi-cmds.h (mi_cmd_target_attach): New prototype.
--- mi/mi-main.1.c Wed Oct 16 17:02:32 2002
+++ mi/mi-main.c Thu Oct 17 14:08:41 2002
@@ -40,6 +40,8 @@
#include "regcache.h"
#include "gdb.h"
#include "frame.h"
+#include "command.h" /* for dont_repeat */
+#include "symfile.h" /* for symbol_file_add_main */
#include <ctype.h>
#include <sys/time.h>
@@ -752,6 +754,90 @@
mi_out_rewind (uiout);
fputs_unfiltered ("\n", raw_stdout);
do_exec_cleanups (ALL_CLEANUPS);
+ return MI_CMD_QUIET;
+}
+
+/* Attach a program either by pid or filename */
+enum mi_cmd_result
+mi_cmd_target_attach (char *command, char **argv, int argc)
+{
+ char *exec_file;
+ char *full_exec_path = NULL;
+
+ dont_repeat (); /* Not for the faint of heart */
+
+ if (argc == 0 || argc > 1)
+ error ("mi_cmd_target_attach: Usage -target-attach <pid> | <file>");
+
+ if (target_has_execution)
+ target_kill (); /* we kill any existing program being debugged */
+
+ target_attach (argv[0], FROM_TTY);
+
+ /* Set up the "saved terminal modes" of the inferior
+ based on what modes we are starting it with. */
+ target_terminal_init ();
+
+ /* Install inferior's terminal modes. */
+ target_terminal_inferior ();
+
+ /* Set up execution context to know that we should return from
+ wait_for_inferior as soon as the target reports a stop. */
+ init_wait_for_inferior ();
+ clear_proceed_status ();
+
+ /* No traps are generated when attaching to inferior under Mach 3
+ or GNU hurd. */
+#ifndef ATTACH_NO_WAIT
+ stop_soon_quietly = 1;
+ wait_for_inferior ();
+#endif
+
+ /*
+ * If no exec file is yet known, try to determine it from the
+ * process itself.
+ */
+ exec_file = (char *) get_exec_file (0);
+ if (!exec_file)
+ {
+ exec_file = target_pid_to_exec_file (PIDGET (inferior_ptid));
+ if (exec_file)
+ {
+ /* It's possible we don't have a full path, but rather just a
+ filename. Some targets, such as HP-UX, don't provide the
+ full path, sigh.
+
+ Attempt to qualify the filename against the source path.
+ (If that fails, we'll just fall back on the original
+ filename. Not much more we can do...)
+ */
+ if (!source_full_path_of (exec_file, &full_exec_path))
+ full_exec_path = savestring (exec_file, strlen (exec_file));
+
+ exec_file_attach (full_exec_path, FROM_TTY);
+ symbol_file_add_main (full_exec_path, FROM_TTY);
+ }
+ }
+
+#ifdef SOLIB_ADD
+ /* Add shared library symbols from the newly attached process, if any. */
+ SOLIB_ADD ((char *) 0, FROM_TTY, ¤t_target, auto_solib_add);
+ re_enable_breakpoints_in_shlibs ();
+#endif
+
+ /* Take any necessary post-attaching actions for this platform.
+ */
+ target_post_attach (PIDGET (inferior_ptid));
+
+ normal_stop ();
+
+ if (attach_hook)
+ attach_hook ();
+
+ fputs_unfiltered ("^attached", raw_stdout);
+ mi_out_put (uiout, raw_stdout);
+ mi_out_rewind (uiout);
+ fputs_unfiltered ("\n", raw_stdout);
return MI_CMD_QUIET;
}
--- mi/gdbmi.0.texinfo Thu Oct 17 14:23:25 2002
+++ mi/gdbmi.texinfo Thu Oct 17 14:22:49 2002
@@ -3073,8 +3073,13 @@
The corresponding @value{GDBN} command is @samp{attach}.
@subsubheading Example
-N.A.
+@smallexample
+(@value{GDBP})
+-target-attach 4567
+^attached,thread-id="0",frame={addr="0x08048365",func="main",args=[],file="infloop.c",line="12"}
+(@value{GDBP})
+@end smallexample
@subheading The @code{-target-compare-sections} Command
@findex -target-compare-sections
--- mi/mi-cmds.0.h Wed Oct 16 17:34:22 2002
+++ mi/mi-cmds.h Wed Oct 16 17:35:36 2002
@@ -84,6 +84,7 @@
extern mi_cmd_argv_ftype mi_cmd_stack_list_frames;
extern mi_cmd_argv_ftype mi_cmd_stack_list_locals;
extern mi_cmd_argv_ftype mi_cmd_stack_select_frame;
+extern mi_cmd_argv_ftype mi_cmd_target_attach;
extern mi_cmd_args_ftype mi_cmd_target_download;
extern mi_cmd_args_ftype mi_cmd_target_select;
extern mi_cmd_argv_ftype mi_cmd_thread_list_ids;