This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: RFA: change for gdb/mi 790
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: "J. Johnston" <jjohnstn at redhat dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Tue, 22 Oct 2002 11:47:41 -0400
- Subject: Re: RFA: change for gdb/mi 790
- References: <3DAF0107.2AB28548@redhat.com>
J. Johnston writes:
> 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?
>
Sorry, no. Look at the comments by Andrew in the PR about how to
correctly fix this. It is going to be a bit more involved.
Elena
> -- 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;