2009-10-19 Pedro Alves <pedro@codesourcery.com>
[external/binutils.git] / gdb / mi / mi-main.c
1 /* MI Command Set.
2
3    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5
6    Contributed by Cygnus Solutions (a Red Hat company).
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 /* Work in progress.  */
24
25 #include "defs.h"
26 #include "arch-utils.h"
27 #include "target.h"
28 #include "inferior.h"
29 #include "gdb_string.h"
30 #include "exceptions.h"
31 #include "top.h"
32 #include "gdbthread.h"
33 #include "mi-cmds.h"
34 #include "mi-parse.h"
35 #include "mi-getopt.h"
36 #include "mi-console.h"
37 #include "ui-out.h"
38 #include "mi-out.h"
39 #include "interps.h"
40 #include "event-loop.h"
41 #include "event-top.h"
42 #include "gdbcore.h"            /* For write_memory().  */
43 #include "value.h"
44 #include "regcache.h"
45 #include "gdb.h"
46 #include "frame.h"
47 #include "mi-main.h"
48 #include "mi-common.h"
49 #include "language.h"
50 #include "valprint.h"
51 #include "inferior.h"
52 #include "osdata.h"
53
54 #include <ctype.h>
55 #include <sys/time.h>
56
57 #if defined HAVE_SYS_RESOURCE_H
58 #include <sys/resource.h>
59 #endif
60
61 #ifdef HAVE_GETRUSAGE
62 struct rusage rusage;
63 #endif
64
65 enum
66   {
67     FROM_TTY = 0
68   };
69
70 int mi_debug_p;
71 struct ui_file *raw_stdout;
72
73 /* This is used to pass the current command timestamp
74    down to continuation routines.  */
75 static struct mi_timestamp *current_command_ts;
76
77 static int do_timings = 0;
78
79 char *current_token;
80 int running_result_record_printed = 1;
81
82 /* Flag indicating that the target has proceeded since the last
83    command was issued.  */
84 int mi_proceeded;
85
86 extern void _initialize_mi_main (void);
87 static void mi_cmd_execute (struct mi_parse *parse);
88
89 static void mi_execute_cli_command (const char *cmd, int args_p,
90                                     const char *args);
91 static void mi_execute_async_cli_command (char *cli_command, 
92                                                         char **argv, int argc);
93 static int register_changed_p (int regnum, struct regcache *,
94                                struct regcache *);
95 static void get_register (struct frame_info *, int regnum, int format);
96
97 /* Command implementations.  FIXME: Is this libgdb?  No.  This is the MI
98    layer that calls libgdb.  Any operation used in the below should be
99    formalized.  */
100
101 static void timestamp (struct mi_timestamp *tv);
102
103 static void print_diff_now (struct mi_timestamp *start);
104 static void print_diff (struct mi_timestamp *start, struct mi_timestamp *end);
105
106 void
107 mi_cmd_gdb_exit (char *command, char **argv, int argc)
108 {
109   /* We have to print everything right here because we never return.  */
110   if (current_token)
111     fputs_unfiltered (current_token, raw_stdout);
112   fputs_unfiltered ("^exit\n", raw_stdout);
113   mi_out_put (uiout, raw_stdout);
114   /* FIXME: The function called is not yet a formal libgdb function.  */
115   quit_force (NULL, FROM_TTY);
116 }
117
118 void
119 mi_cmd_exec_next (char *command, char **argv, int argc)
120 {
121   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
122   mi_execute_async_cli_command ("next", argv, argc);
123 }
124
125 void
126 mi_cmd_exec_next_instruction (char *command, char **argv, int argc)
127 {
128   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
129   mi_execute_async_cli_command ("nexti", argv, argc);
130 }
131
132 void
133 mi_cmd_exec_step (char *command, char **argv, int argc)
134 {
135   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
136   mi_execute_async_cli_command ("step", argv, argc);
137 }
138
139 void
140 mi_cmd_exec_step_instruction (char *command, char **argv, int argc)
141 {
142   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
143   mi_execute_async_cli_command ("stepi", argv, argc);
144 }
145
146 void
147 mi_cmd_exec_finish (char *command, char **argv, int argc)
148 {
149   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
150   mi_execute_async_cli_command ("finish", argv, argc);
151 }
152
153 void
154 mi_cmd_exec_return (char *command, char **argv, int argc)
155 {
156   /* This command doesn't really execute the target, it just pops the
157      specified number of frames. */
158   if (argc)
159     /* Call return_command with from_tty argument equal to 0 so as to
160        avoid being queried.  */
161     return_command (*argv, 0);
162   else
163     /* Call return_command with from_tty argument equal to 0 so as to
164        avoid being queried.  */
165     return_command (NULL, 0);
166
167   /* Because we have called return_command with from_tty = 0, we need
168      to print the frame here.  */
169   print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
170 }
171
172 void
173 mi_cmd_exec_jump (char *args, char **argv, int argc)
174 {
175   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
176   return mi_execute_async_cli_command ("jump", argv, argc);
177 }
178  
179 static int
180 proceed_thread_callback (struct thread_info *thread, void *arg)
181 {
182   int pid = *(int *)arg;
183
184   if (!is_stopped (thread->ptid))
185     return 0;
186
187   if (PIDGET (thread->ptid) != pid)
188     return 0;
189
190   switch_to_thread (thread->ptid);
191   clear_proceed_status ();
192   proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
193   return 0;
194 }
195
196 void
197 mi_cmd_exec_continue (char *command, char **argv, int argc)
198 {
199   if (argc == 0)
200     continue_1 (0);
201   else if (argc == 1 && strcmp (argv[0], "--all") == 0)
202     continue_1 (1);
203   else if (argc == 2 && strcmp (argv[0], "--thread-group") == 0)
204     {
205       struct cleanup *old_chain;
206       int pid;
207       if (argv[1] == NULL || argv[1] == '\0')
208         error ("Thread group id not specified");
209       pid = atoi (argv[1]);
210       if (!in_inferior_list (pid))
211         error ("Invalid thread group id '%s'", argv[1]);
212
213       old_chain = make_cleanup_restore_current_thread ();
214       iterate_over_threads (proceed_thread_callback, &pid);
215       do_cleanups (old_chain);            
216     }
217   else
218     error ("Usage: -exec-continue [--all|--thread-group id]");
219 }
220
221 static int
222 interrupt_thread_callback (struct thread_info *thread, void *arg)
223 {
224   int pid = *(int *)arg;
225
226   if (!is_running (thread->ptid))
227     return 0;
228
229   if (PIDGET (thread->ptid) != pid)
230     return 0;
231
232   target_stop (thread->ptid);
233   return 0;
234 }
235
236 /* Interrupt the execution of the target.  Note how we must play around
237    with the token variables, in order to display the current token in
238    the result of the interrupt command, and the previous execution
239    token when the target finally stops.  See comments in
240    mi_cmd_execute.  */
241 void
242 mi_cmd_exec_interrupt (char *command, char **argv, int argc)
243 {
244   if (argc == 0)
245     {
246       if (!is_running (inferior_ptid))
247         error ("Current thread is not running.");
248
249       interrupt_target_1 (0);
250     }
251   else if (argc == 1 && strcmp (argv[0], "--all") == 0)
252     {
253       if (!any_running ())
254         error ("Inferior not running.");
255       
256       interrupt_target_1 (1);
257     }
258   else if (argc == 2 && strcmp (argv[0], "--thread-group") == 0)
259     {
260       struct cleanup *old_chain;
261       int pid;
262       if (argv[1] == NULL || argv[1] == '\0')
263         error ("Thread group id not specified");
264       pid = atoi (argv[1]);
265       if (!in_inferior_list (pid))
266         error ("Invalid thread group id '%s'", argv[1]);
267
268       old_chain = make_cleanup_restore_current_thread ();
269       iterate_over_threads (interrupt_thread_callback, &pid);
270       do_cleanups (old_chain);
271     }
272   else
273     error ("Usage: -exec-interrupt [--all|--thread-group id]");
274 }
275
276 static int
277 find_thread_of_process (struct thread_info *ti, void *p)
278 {
279   int pid = *(int *)p;
280   if (PIDGET (ti->ptid) == pid && !is_exited (ti->ptid))
281     return 1;
282
283   return 0;
284 }
285
286 void
287 mi_cmd_target_detach (char *command, char **argv, int argc)
288 {
289   if (argc != 0 && argc != 1)
290     error ("Usage: -target-detach [thread-group]");
291
292   if (argc == 1)
293     {
294       struct thread_info *tp;
295       char *end = argv[0];
296       int pid = strtol (argv[0], &end, 10);
297       if (*end != '\0')
298         error (_("Cannot parse thread group id '%s'"), argv[0]);
299
300       /* Pick any thread in the desired process.  Current
301          target_detach deteches from the parent of inferior_ptid.  */
302       tp = iterate_over_threads (find_thread_of_process, &pid);
303       if (!tp)
304         error (_("Thread group is empty"));
305
306       switch_to_thread (tp->ptid);
307     }
308
309   detach_command (NULL, 0);
310 }
311
312 void
313 mi_cmd_thread_select (char *command, char **argv, int argc)
314 {
315   enum gdb_rc rc;
316   char *mi_error_message;
317
318   if (argc != 1)
319     error ("mi_cmd_thread_select: USAGE: threadnum.");
320
321   rc = gdb_thread_select (uiout, argv[0], &mi_error_message);
322
323   if (rc == GDB_RC_FAIL)
324     {
325       make_cleanup (xfree, mi_error_message);
326       error ("%s", mi_error_message);
327     }
328 }
329
330 void
331 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
332 {
333   enum gdb_rc rc;
334   char *mi_error_message;
335
336   if (argc != 0)
337     error ("mi_cmd_thread_list_ids: No arguments required.");
338
339   rc = gdb_list_thread_ids (uiout, &mi_error_message);
340
341   if (rc == GDB_RC_FAIL)
342     {
343       make_cleanup (xfree, mi_error_message);
344       error ("%s", mi_error_message);
345     }
346 }
347
348 void
349 mi_cmd_thread_info (char *command, char **argv, int argc)
350 {
351   int thread = -1;
352   
353   if (argc != 0 && argc != 1)
354     error ("Invalid MI command");
355
356   if (argc == 1)
357     thread = atoi (argv[0]);
358
359   print_thread_info (uiout, thread, -1);
360 }
361
362 static int
363 print_one_inferior (struct inferior *inferior, void *arg)
364 {
365   if (inferior->pid != 0)
366     {
367       struct cleanup *back_to
368         = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
369
370       ui_out_field_fmt (uiout, "id", "%d", inferior->pid);
371       ui_out_field_string (uiout, "type", "process");
372       ui_out_field_int (uiout, "pid", inferior->pid);
373
374       do_cleanups (back_to);
375     }
376
377   return 0;
378 }
379
380 void
381 mi_cmd_list_thread_groups (char *command, char **argv, int argc)
382 {
383   struct cleanup *back_to;
384   int available = 0;
385   char *id = NULL;
386
387   if (argc > 0 && strcmp (argv[0], "--available") == 0)
388     {
389       ++argv;
390       --argc;
391       available = 1;
392     }
393
394   if (argc > 0)
395     id = argv[0];
396
397   back_to = make_cleanup (null_cleanup, NULL);
398
399   if (available && id)
400     {
401       error (_("Can only report top-level available thread groups"));
402     }
403   else if (available)
404     {
405       struct osdata *data;
406       struct osdata_item *item;
407       int ix_items;
408
409       data = get_osdata ("processes");
410       make_cleanup_osdata_free (data);
411
412       make_cleanup_ui_out_list_begin_end (uiout, "groups");
413
414       for (ix_items = 0;
415            VEC_iterate (osdata_item_s, data->items,
416                         ix_items, item);
417            ix_items++)
418         {
419           struct cleanup *back_to =
420             make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
421
422           const char *pid = get_osdata_column (item, "pid");
423           const char *cmd = get_osdata_column (item, "command");
424           const char *user = get_osdata_column (item, "user");
425
426           ui_out_field_fmt (uiout, "id", "%s", pid);
427           ui_out_field_string (uiout, "type", "process");
428           if (cmd)
429             ui_out_field_string (uiout, "description", cmd);
430           if (user)
431             ui_out_field_string (uiout, "user", user);
432
433           do_cleanups (back_to);
434         }
435     }
436   else if (id)
437     {
438       int pid = atoi (id);
439       if (!in_inferior_list (pid))
440         error ("Invalid thread group id '%s'", id);
441       print_thread_info (uiout, -1, pid);    
442     }
443   else
444     {
445       make_cleanup_ui_out_list_begin_end (uiout, "groups");
446       iterate_over_inferiors (print_one_inferior, NULL);
447     }
448   
449   do_cleanups (back_to);
450 }
451
452 void
453 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
454 {
455   struct frame_info *frame;
456   struct gdbarch *gdbarch;
457   int regnum, numregs;
458   int i;
459   struct cleanup *cleanup;
460
461   /* Note that the test for a valid register must include checking the
462      gdbarch_register_name because gdbarch_num_regs may be allocated for
463      the union of the register sets within a family of related processors.
464      In this case, some entries of gdbarch_register_name will change depending
465      upon the particular processor being debugged.  */
466
467   frame = get_selected_frame (NULL);
468   gdbarch = get_frame_arch (frame);
469   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
470
471   cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
472
473   if (argc == 0)                /* No args, just do all the regs.  */
474     {
475       for (regnum = 0;
476            regnum < numregs;
477            regnum++)
478         {
479           if (gdbarch_register_name (gdbarch, regnum) == NULL
480               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
481             ui_out_field_string (uiout, NULL, "");
482           else
483             ui_out_field_string (uiout, NULL,
484                                  gdbarch_register_name (gdbarch, regnum));
485         }
486     }
487
488   /* Else, list of register #s, just do listed regs.  */
489   for (i = 0; i < argc; i++)
490     {
491       regnum = atoi (argv[i]);
492       if (regnum < 0 || regnum >= numregs)
493         error ("bad register number");
494
495       if (gdbarch_register_name (gdbarch, regnum) == NULL
496           || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
497         ui_out_field_string (uiout, NULL, "");
498       else
499         ui_out_field_string (uiout, NULL,
500                              gdbarch_register_name (gdbarch, regnum));
501     }
502   do_cleanups (cleanup);
503 }
504
505 void
506 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
507 {
508   static struct regcache *this_regs = NULL;
509   struct regcache *prev_regs;
510   struct gdbarch *gdbarch;
511   int regnum, numregs, changed;
512   int i;
513   struct cleanup *cleanup;
514
515   /* The last time we visited this function, the current frame's register
516      contents were saved in THIS_REGS.  Move THIS_REGS over to PREV_REGS,
517      and refresh THIS_REGS with the now-current register contents.  */
518
519   prev_regs = this_regs;
520   this_regs = frame_save_as_regcache (get_selected_frame (NULL));
521   cleanup = make_cleanup_regcache_xfree (prev_regs);
522
523   /* Note that the test for a valid register must include checking the
524      gdbarch_register_name because gdbarch_num_regs may be allocated for
525      the union of the register sets within a family of related processors.
526      In this  case, some entries of gdbarch_register_name will change depending
527      upon the particular processor being debugged.  */
528
529   gdbarch = get_regcache_arch (this_regs);
530   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
531
532   make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
533
534   if (argc == 0)                /* No args, just do all the regs.  */
535     {
536       for (regnum = 0;
537            regnum < numregs;
538            regnum++)
539         {
540           if (gdbarch_register_name (gdbarch, regnum) == NULL
541               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
542             continue;
543           changed = register_changed_p (regnum, prev_regs, this_regs);
544           if (changed < 0)
545             error ("mi_cmd_data_list_changed_registers: Unable to read register contents.");
546           else if (changed)
547             ui_out_field_int (uiout, NULL, regnum);
548         }
549     }
550
551   /* Else, list of register #s, just do listed regs.  */
552   for (i = 0; i < argc; i++)
553     {
554       regnum = atoi (argv[i]);
555
556       if (regnum >= 0
557           && regnum < numregs
558           && gdbarch_register_name (gdbarch, regnum) != NULL
559           && *gdbarch_register_name (gdbarch, regnum) != '\000')
560         {
561           changed = register_changed_p (regnum, prev_regs, this_regs);
562           if (changed < 0)
563             error ("mi_cmd_data_list_register_change: Unable to read register contents.");
564           else if (changed)
565             ui_out_field_int (uiout, NULL, regnum);
566         }
567       else
568         error ("bad register number");
569     }
570   do_cleanups (cleanup);
571 }
572
573 static int
574 register_changed_p (int regnum, struct regcache *prev_regs,
575                     struct regcache *this_regs)
576 {
577   struct gdbarch *gdbarch = get_regcache_arch (this_regs);
578   gdb_byte prev_buffer[MAX_REGISTER_SIZE];
579   gdb_byte this_buffer[MAX_REGISTER_SIZE];
580
581   /* Registers not valid in this frame return count as unchanged.  */
582   if (!regcache_valid_p (this_regs, regnum))
583     return 0;
584
585   /* First time through or after gdbarch change consider all registers as
586      changed.  Same for registers not valid in the previous frame.  */
587   if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch
588       || !regcache_valid_p (prev_regs, regnum))
589     return 1;
590
591   /* Get register contents and compare.  */
592   regcache_cooked_read (prev_regs, regnum, prev_buffer);
593   regcache_cooked_read (this_regs, regnum, this_buffer);
594
595   return memcmp (prev_buffer, this_buffer,
596                  register_size (gdbarch, regnum)) != 0;
597 }
598
599 /* Return a list of register number and value pairs.  The valid
600    arguments expected are: a letter indicating the format in which to
601    display the registers contents.  This can be one of: x (hexadecimal), d
602    (decimal), N (natural), t (binary), o (octal), r (raw).  After the
603    format argumetn there can be a sequence of numbers, indicating which
604    registers to fetch the content of.  If the format is the only argument,
605    a list of all the registers with their values is returned.  */
606 void
607 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
608 {
609   struct frame_info *frame;
610   struct gdbarch *gdbarch;
611   int regnum, numregs, format;
612   int i;
613   struct cleanup *list_cleanup, *tuple_cleanup;
614
615   /* Note that the test for a valid register must include checking the
616      gdbarch_register_name because gdbarch_num_regs may be allocated for
617      the union of the register sets within a family of related processors.
618      In this case, some entries of gdbarch_register_name will change depending
619      upon the particular processor being debugged.  */
620
621   if (argc == 0)
622     error ("mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
623
624   format = (int) argv[0][0];
625
626   frame = get_selected_frame (NULL);
627   gdbarch = get_frame_arch (frame);
628   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
629
630   list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
631
632   if (argc == 1)            /* No args, beside the format: do all the regs.  */
633     {
634       for (regnum = 0;
635            regnum < numregs;
636            regnum++)
637         {
638           if (gdbarch_register_name (gdbarch, regnum) == NULL
639               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
640             continue;
641           tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
642           ui_out_field_int (uiout, "number", regnum);
643           get_register (frame, regnum, format);
644           do_cleanups (tuple_cleanup);
645         }
646     }
647
648   /* Else, list of register #s, just do listed regs.  */
649   for (i = 1; i < argc; i++)
650     {
651       regnum = atoi (argv[i]);
652
653       if (regnum >= 0
654           && regnum < numregs
655           && gdbarch_register_name (gdbarch, regnum) != NULL
656           && *gdbarch_register_name (gdbarch, regnum) != '\000')
657         {
658           tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
659           ui_out_field_int (uiout, "number", regnum);
660           get_register (frame, regnum, format);
661           do_cleanups (tuple_cleanup);
662         }
663       else
664         error ("bad register number");
665     }
666   do_cleanups (list_cleanup);
667 }
668
669 /* Output one register's contents in the desired format.  */
670 static void
671 get_register (struct frame_info *frame, int regnum, int format)
672 {
673   struct gdbarch *gdbarch = get_frame_arch (frame);
674   gdb_byte buffer[MAX_REGISTER_SIZE];
675   int optim;
676   int realnum;
677   CORE_ADDR addr;
678   enum lval_type lval;
679   static struct ui_stream *stb = NULL;
680
681   stb = ui_out_stream_new (uiout);
682
683   if (format == 'N')
684     format = 0;
685
686   frame_register (frame, regnum, &optim, &lval, &addr, &realnum, buffer);
687
688   if (optim)
689     error ("Optimized out");
690
691   if (format == 'r')
692     {
693       int j;
694       char *ptr, buf[1024];
695
696       strcpy (buf, "0x");
697       ptr = buf + 2;
698       for (j = 0; j < register_size (gdbarch, regnum); j++)
699         {
700           int idx = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ?
701                     j : register_size (gdbarch, regnum) - 1 - j;
702           sprintf (ptr, "%02x", (unsigned char) buffer[idx]);
703           ptr += 2;
704         }
705       ui_out_field_string (uiout, "value", buf);
706       /*fputs_filtered (buf, gdb_stdout); */
707     }
708   else
709     {
710       struct value_print_options opts;
711       get_formatted_print_options (&opts, format);
712       opts.deref_ref = 1;
713       val_print (register_type (gdbarch, regnum), buffer, 0, 0,
714                  stb->stream, 0, &opts, current_language);
715       ui_out_field_stream (uiout, "value", stb);
716       ui_out_stream_delete (stb);
717     }
718 }
719
720 /* Write given values into registers. The registers and values are
721    given as pairs.  The corresponding MI command is 
722    -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]*/
723 void
724 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
725 {
726   struct regcache *regcache;
727   struct gdbarch *gdbarch;
728   int numregs, i;
729   char format;
730
731   /* Note that the test for a valid register must include checking the
732      gdbarch_register_name because gdbarch_num_regs may be allocated for
733      the union of the register sets within a family of related processors.
734      In this case, some entries of gdbarch_register_name will change depending
735      upon the particular processor being debugged.  */
736
737   regcache = get_current_regcache ();
738   gdbarch = get_regcache_arch (regcache);
739   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
740
741   if (argc == 0)
742     error ("mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
743
744   format = (int) argv[0][0];
745
746   if (!target_has_registers)
747     error ("mi_cmd_data_write_register_values: No registers.");
748
749   if (!(argc - 1))
750     error ("mi_cmd_data_write_register_values: No regs and values specified.");
751
752   if ((argc - 1) % 2)
753     error ("mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
754
755   for (i = 1; i < argc; i = i + 2)
756     {
757       int regnum = atoi (argv[i]);
758
759       if (regnum >= 0 && regnum < numregs
760           && gdbarch_register_name (gdbarch, regnum)
761           && *gdbarch_register_name (gdbarch, regnum))
762         {
763           LONGEST value;
764
765           /* Get the value as a number.  */
766           value = parse_and_eval_address (argv[i + 1]);
767
768           /* Write it down.  */
769           regcache_cooked_write_signed (regcache, regnum, value);
770         }
771       else
772         error ("bad register number");
773     }
774 }
775
776 /* Evaluate the value of the argument.  The argument is an
777    expression. If the expression contains spaces it needs to be
778    included in double quotes.  */
779 void
780 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
781 {
782   struct expression *expr;
783   struct cleanup *old_chain = NULL;
784   struct value *val;
785   struct ui_stream *stb = NULL;
786   struct value_print_options opts;
787
788   stb = ui_out_stream_new (uiout);
789
790   if (argc != 1)
791     {
792       ui_out_stream_delete (stb);
793       error ("mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
794     }
795
796   expr = parse_expression (argv[0]);
797
798   old_chain = make_cleanup (free_current_contents, &expr);
799
800   val = evaluate_expression (expr);
801
802   /* Print the result of the expression evaluation.  */
803   get_user_print_options (&opts);
804   opts.deref_ref = 0;
805   val_print (value_type (val), value_contents (val),
806              value_embedded_offset (val), value_address (val),
807              stb->stream, 0, &opts, current_language);
808
809   ui_out_field_stream (uiout, "value", stb);
810   ui_out_stream_delete (stb);
811
812   do_cleanups (old_chain);
813 }
814
815 /* DATA-MEMORY-READ:
816
817    ADDR: start address of data to be dumped.
818    WORD-FORMAT: a char indicating format for the ``word''.  See 
819    the ``x'' command.
820    WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
821    NR_ROW: Number of rows.
822    NR_COL: The number of colums (words per row).
823    ASCHAR: (OPTIONAL) Append an ascii character dump to each row.  Use
824    ASCHAR for unprintable characters.
825
826    Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
827    displayes them.  Returns:
828
829    {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
830
831    Returns: 
832    The number of bytes read is SIZE*ROW*COL. */
833
834 void
835 mi_cmd_data_read_memory (char *command, char **argv, int argc)
836 {
837   struct gdbarch *gdbarch = get_current_arch ();
838   struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
839   CORE_ADDR addr;
840   long total_bytes;
841   long nr_cols;
842   long nr_rows;
843   char word_format;
844   struct type *word_type;
845   long word_size;
846   char word_asize;
847   char aschar;
848   gdb_byte *mbuf;
849   int nr_bytes;
850   long offset = 0;
851   int optind = 0;
852   char *optarg;
853   enum opt
854     {
855       OFFSET_OPT
856     };
857   static struct mi_opt opts[] =
858   {
859     {"o", OFFSET_OPT, 1},
860     { 0, 0, 0 }
861   };
862
863   while (1)
864     {
865       int opt = mi_getopt ("mi_cmd_data_read_memory", argc, argv, opts,
866                            &optind, &optarg);
867       if (opt < 0)
868         break;
869       switch ((enum opt) opt)
870         {
871         case OFFSET_OPT:
872           offset = atol (optarg);
873           break;
874         }
875     }
876   argv += optind;
877   argc -= optind;
878
879   if (argc < 5 || argc > 6)
880     error ("mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
881
882   /* Extract all the arguments. */
883
884   /* Start address of the memory dump.  */
885   addr = parse_and_eval_address (argv[0]) + offset;
886   /* The format character to use when displaying a memory word.  See
887      the ``x'' command. */
888   word_format = argv[1][0];
889   /* The size of the memory word.  */
890   word_size = atol (argv[2]);
891   switch (word_size)
892     {
893     case 1:
894       word_type = builtin_type (gdbarch)->builtin_int8;
895       word_asize = 'b';
896       break;
897     case 2:
898       word_type = builtin_type (gdbarch)->builtin_int16;
899       word_asize = 'h';
900       break;
901     case 4:
902       word_type = builtin_type (gdbarch)->builtin_int32;
903       word_asize = 'w';
904       break;
905     case 8:
906       word_type = builtin_type (gdbarch)->builtin_int64;
907       word_asize = 'g';
908       break;
909     default:
910       word_type = builtin_type (gdbarch)->builtin_int8;
911       word_asize = 'b';
912     }
913   /* The number of rows.  */
914   nr_rows = atol (argv[3]);
915   if (nr_rows <= 0)
916     error ("mi_cmd_data_read_memory: invalid number of rows.");
917
918   /* Number of bytes per row.  */
919   nr_cols = atol (argv[4]);
920   if (nr_cols <= 0)
921     error ("mi_cmd_data_read_memory: invalid number of columns.");
922
923   /* The un-printable character when printing ascii.  */
924   if (argc == 6)
925     aschar = *argv[5];
926   else
927     aschar = 0;
928
929   /* Create a buffer and read it in.  */
930   total_bytes = word_size * nr_rows * nr_cols;
931   mbuf = xcalloc (total_bytes, 1);
932   make_cleanup (xfree, mbuf);
933
934   /* Dispatch memory reads to the topmost target, not the flattened
935      current_target.  */
936   nr_bytes = target_read_until_error (current_target.beneath,
937                                       TARGET_OBJECT_MEMORY, NULL, mbuf,
938                                       addr, total_bytes);
939   if (nr_bytes <= 0)
940     error ("Unable to read memory.");
941
942   /* Output the header information.  */
943   ui_out_field_core_addr (uiout, "addr", gdbarch, addr);
944   ui_out_field_int (uiout, "nr-bytes", nr_bytes);
945   ui_out_field_int (uiout, "total-bytes", total_bytes);
946   ui_out_field_core_addr (uiout, "next-row",
947                           gdbarch, addr + word_size * nr_cols);
948   ui_out_field_core_addr (uiout, "prev-row",
949                           gdbarch, addr - word_size * nr_cols);
950   ui_out_field_core_addr (uiout, "next-page", gdbarch, addr + total_bytes);
951   ui_out_field_core_addr (uiout, "prev-page", gdbarch, addr - total_bytes);
952
953   /* Build the result as a two dimentional table.  */
954   {
955     struct ui_stream *stream = ui_out_stream_new (uiout);
956     struct cleanup *cleanup_list_memory;
957     int row;
958     int row_byte;
959     cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
960     for (row = 0, row_byte = 0;
961          row < nr_rows;
962          row++, row_byte += nr_cols * word_size)
963       {
964         int col;
965         int col_byte;
966         struct cleanup *cleanup_tuple;
967         struct cleanup *cleanup_list_data;
968         struct value_print_options opts;
969
970         cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
971         ui_out_field_core_addr (uiout, "addr", gdbarch, addr + row_byte);
972         /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
973         cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
974         get_formatted_print_options (&opts, word_format);
975         for (col = 0, col_byte = row_byte;
976              col < nr_cols;
977              col++, col_byte += word_size)
978           {
979             if (col_byte + word_size > nr_bytes)
980               {
981                 ui_out_field_string (uiout, NULL, "N/A");
982               }
983             else
984               {
985                 ui_file_rewind (stream->stream);
986                 print_scalar_formatted (mbuf + col_byte, word_type, &opts,
987                                         word_asize, stream->stream);
988                 ui_out_field_stream (uiout, NULL, stream);
989               }
990           }
991         do_cleanups (cleanup_list_data);
992         if (aschar)
993           {
994             int byte;
995             ui_file_rewind (stream->stream);
996             for (byte = row_byte; byte < row_byte + word_size * nr_cols; byte++)
997               {
998                 if (byte >= nr_bytes)
999                   {
1000                     fputc_unfiltered ('X', stream->stream);
1001                   }
1002                 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
1003                   {
1004                     fputc_unfiltered (aschar, stream->stream);
1005                   }
1006                 else
1007                   fputc_unfiltered (mbuf[byte], stream->stream);
1008               }
1009             ui_out_field_stream (uiout, "ascii", stream);
1010           }
1011         do_cleanups (cleanup_tuple);
1012       }
1013     ui_out_stream_delete (stream);
1014     do_cleanups (cleanup_list_memory);
1015   }
1016   do_cleanups (cleanups);
1017 }
1018
1019 /* DATA-MEMORY-WRITE:
1020
1021    COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
1022    offset from the beginning of the memory grid row where the cell to
1023    be written is.
1024    ADDR: start address of the row in the memory grid where the memory
1025    cell is, if OFFSET_COLUMN is specified.  Otherwise, the address of
1026    the location to write to.
1027    FORMAT: a char indicating format for the ``word''.  See 
1028    the ``x'' command.
1029    WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
1030    VALUE: value to be written into the memory address.
1031
1032    Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1033
1034    Prints nothing.  */
1035 void
1036 mi_cmd_data_write_memory (char *command, char **argv, int argc)
1037 {
1038   struct gdbarch *gdbarch = get_current_arch ();
1039   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1040   CORE_ADDR addr;
1041   char word_format;
1042   long word_size;
1043   /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
1044      enough when using a compiler other than GCC.  */
1045   LONGEST value;
1046   void *buffer;
1047   struct cleanup *old_chain;
1048   long offset = 0;
1049   int optind = 0;
1050   char *optarg;
1051   enum opt
1052     {
1053       OFFSET_OPT
1054     };
1055   static struct mi_opt opts[] =
1056   {
1057     {"o", OFFSET_OPT, 1},
1058     { 0, 0, 0 }
1059   };
1060
1061   while (1)
1062     {
1063       int opt = mi_getopt ("mi_cmd_data_write_memory", argc, argv, opts,
1064                            &optind, &optarg);
1065       if (opt < 0)
1066         break;
1067       switch ((enum opt) opt)
1068         {
1069         case OFFSET_OPT:
1070           offset = atol (optarg);
1071           break;
1072         }
1073     }
1074   argv += optind;
1075   argc -= optind;
1076
1077   if (argc != 4)
1078     error ("mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
1079
1080   /* Extract all the arguments.  */
1081   /* Start address of the memory dump.  */
1082   addr = parse_and_eval_address (argv[0]);
1083   /* The format character to use when displaying a memory word.  See
1084      the ``x'' command.  */
1085   word_format = argv[1][0];
1086   /* The size of the memory word. */
1087   word_size = atol (argv[2]);
1088
1089   /* Calculate the real address of the write destination.  */
1090   addr += (offset * word_size);
1091
1092   /* Get the value as a number.  */
1093   value = parse_and_eval_address (argv[3]);
1094   /* Get the value into an array.  */
1095   buffer = xmalloc (word_size);
1096   old_chain = make_cleanup (xfree, buffer);
1097   store_signed_integer (buffer, word_size, byte_order, value);
1098   /* Write it down to memory.  */
1099   write_memory (addr, buffer, word_size);
1100   /* Free the buffer.  */
1101   do_cleanups (old_chain);
1102 }
1103
1104 void
1105 mi_cmd_enable_timings (char *command, char **argv, int argc)
1106 {
1107   if (argc == 0)
1108     do_timings = 1;
1109   else if (argc == 1)
1110     {
1111       if (strcmp (argv[0], "yes") == 0)
1112         do_timings = 1;
1113       else if (strcmp (argv[0], "no") == 0)
1114         do_timings = 0;
1115       else
1116         goto usage_error;
1117     }
1118   else
1119     goto usage_error;
1120     
1121   return;
1122
1123  usage_error:
1124   error ("mi_cmd_enable_timings: Usage: %s {yes|no}", command);
1125 }
1126
1127 void
1128 mi_cmd_list_features (char *command, char **argv, int argc)
1129 {
1130   if (argc == 0)
1131     {
1132       struct cleanup *cleanup = NULL;
1133       cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");      
1134
1135       ui_out_field_string (uiout, NULL, "frozen-varobjs");
1136       ui_out_field_string (uiout, NULL, "pending-breakpoints");
1137       ui_out_field_string (uiout, NULL, "thread-info");
1138       
1139 #if HAVE_PYTHON
1140       ui_out_field_string (uiout, NULL, "python");
1141 #endif
1142       
1143       do_cleanups (cleanup);
1144       return;
1145     }
1146
1147   error ("-list-features should be passed no arguments");
1148 }
1149
1150 void
1151 mi_cmd_list_target_features (char *command, char **argv, int argc)
1152 {
1153   if (argc == 0)
1154     {
1155       struct cleanup *cleanup = NULL;
1156       cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");      
1157
1158       if (target_can_async_p ())
1159         ui_out_field_string (uiout, NULL, "async");
1160       
1161       do_cleanups (cleanup);
1162       return;
1163     }
1164
1165   error ("-list-target-features should be passed no arguments");
1166 }
1167
1168 /* Execute a command within a safe environment.
1169    Return <0 for error; >=0 for ok.
1170
1171    args->action will tell mi_execute_command what action
1172    to perfrom after the given command has executed (display/suppress
1173    prompt, display error). */
1174
1175 static void
1176 captured_mi_execute_command (struct ui_out *uiout, void *data)
1177 {
1178   struct cleanup *cleanup;
1179   struct mi_parse *context = (struct mi_parse *) data;
1180
1181   if (do_timings)
1182     current_command_ts = context->cmd_start;
1183
1184   current_token = xstrdup (context->token);
1185   cleanup = make_cleanup (free_current_contents, &current_token);
1186
1187   running_result_record_printed = 0;
1188   mi_proceeded = 0;
1189   switch (context->op)
1190     {
1191     case MI_COMMAND:
1192       /* A MI command was read from the input stream.  */
1193       if (mi_debug_p)
1194         /* FIXME: gdb_???? */
1195         fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1196                             context->token, context->command, context->args);
1197
1198
1199       mi_cmd_execute (context);
1200
1201       /* Print the result if there were no errors.
1202
1203          Remember that on the way out of executing a command, you have
1204          to directly use the mi_interp's uiout, since the command could 
1205          have reset the interpreter, in which case the current uiout 
1206          will most likely crash in the mi_out_* routines.  */
1207       if (!running_result_record_printed)
1208         {
1209           fputs_unfiltered (context->token, raw_stdout);
1210           /* There's no particularly good reason why target-connect results
1211              in not ^done.  Should kill ^connected for MI3.  */
1212           fputs_unfiltered (strcmp (context->command, "target-select") == 0
1213                             ? "^connected" : "^done", raw_stdout);
1214           mi_out_put (uiout, raw_stdout);
1215           mi_out_rewind (uiout);
1216           mi_print_timing_maybe ();
1217           fputs_unfiltered ("\n", raw_stdout);
1218         }
1219       else
1220             /* The command does not want anything to be printed.  In that
1221                case, the command probably should not have written anything
1222                to uiout, but in case it has written something, discard it.  */
1223         mi_out_rewind (uiout);
1224       break;
1225
1226     case CLI_COMMAND:
1227       {
1228         char *argv[2];
1229         /* A CLI command was read from the input stream.  */
1230         /* This "feature" will be removed as soon as we have a
1231            complete set of mi commands.  */
1232         /* Echo the command on the console.  */
1233         fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1234         /* Call the "console" interpreter.  */
1235         argv[0] = "console";
1236         argv[1] = context->command;
1237         mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1238
1239         /* If we changed interpreters, DON'T print out anything.  */
1240         if (current_interp_named_p (INTERP_MI)
1241             || current_interp_named_p (INTERP_MI1)
1242             || current_interp_named_p (INTERP_MI2)
1243             || current_interp_named_p (INTERP_MI3))
1244           {
1245             if (!running_result_record_printed)
1246               {
1247                 fputs_unfiltered (context->token, raw_stdout);
1248                 fputs_unfiltered ("^done", raw_stdout);
1249                 mi_out_put (uiout, raw_stdout);
1250                 mi_out_rewind (uiout);
1251                 mi_print_timing_maybe ();
1252                 fputs_unfiltered ("\n", raw_stdout);            
1253               }
1254             else
1255               mi_out_rewind (uiout);
1256           }
1257         break;
1258       }
1259
1260     }
1261
1262   do_cleanups (cleanup);
1263
1264   return;
1265 }
1266
1267
1268 void
1269 mi_execute_command (char *cmd, int from_tty)
1270 {
1271   struct mi_parse *command;
1272   struct ui_out *saved_uiout = uiout;
1273
1274   /* This is to handle EOF (^D). We just quit gdb.  */
1275   /* FIXME: we should call some API function here.  */
1276   if (cmd == 0)
1277     quit_force (NULL, from_tty);
1278
1279   command = mi_parse (cmd);
1280
1281   if (command != NULL)
1282     {
1283       struct gdb_exception result;
1284       ptid_t previous_ptid = inferior_ptid;
1285
1286       if (do_timings)
1287         {
1288           command->cmd_start = (struct mi_timestamp *)
1289             xmalloc (sizeof (struct mi_timestamp));
1290           timestamp (command->cmd_start);
1291         }
1292
1293       result = catch_exception (uiout, captured_mi_execute_command, command,
1294                                 RETURN_MASK_ALL);
1295       if (result.reason < 0)
1296         {
1297           /* The command execution failed and error() was called
1298              somewhere.  */
1299           fputs_unfiltered (command->token, raw_stdout);
1300           fputs_unfiltered ("^error,msg=\"", raw_stdout);
1301           if (result.message == NULL)
1302             fputs_unfiltered ("unknown error", raw_stdout);
1303           else
1304             fputstr_unfiltered (result.message, '"', raw_stdout);
1305           fputs_unfiltered ("\"\n", raw_stdout);
1306           mi_out_rewind (uiout);
1307         }
1308
1309       if (/* The notifications are only output when the top-level
1310              interpreter (specified on the command line) is MI.  */      
1311           ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
1312           /* Don't try report anything if there are no threads -- 
1313              the program is dead.  */
1314           && thread_count () != 0
1315           /* -thread-select explicitly changes thread. If frontend uses that
1316              internally, we don't want to emit =thread-selected, since
1317              =thread-selected is supposed to indicate user's intentions.  */
1318           && strcmp (command->command, "thread-select") != 0)
1319         {
1320           struct mi_interp *mi = top_level_interpreter_data ();
1321           int report_change = 0;
1322
1323           if (command->thread == -1)
1324             {
1325               report_change = (!ptid_equal (previous_ptid, null_ptid)
1326                                && !ptid_equal (inferior_ptid, previous_ptid)
1327                                && !ptid_equal (inferior_ptid, null_ptid));
1328             }
1329           else if (!ptid_equal (inferior_ptid, null_ptid))
1330             {
1331               struct thread_info *ti = inferior_thread ();
1332               report_change = (ti->num != command->thread);
1333             }
1334
1335           if (report_change)
1336             {     
1337               struct thread_info *ti = inferior_thread ();
1338               target_terminal_ours ();
1339               fprintf_unfiltered (mi->event_channel, 
1340                                   "thread-selected,id=\"%d\"",
1341                                   ti->num);
1342               gdb_flush (mi->event_channel);
1343             }
1344         }
1345
1346       mi_parse_free (command);
1347     }
1348
1349   fputs_unfiltered ("(gdb) \n", raw_stdout);
1350   gdb_flush (raw_stdout);
1351   /* Print any buffered hook code.  */
1352   /* ..... */
1353 }
1354
1355 static void
1356 mi_cmd_execute (struct mi_parse *parse)
1357 {
1358   struct cleanup *cleanup;
1359   int i;
1360
1361   prepare_execute_command ();
1362
1363   cleanup = make_cleanup (null_cleanup, NULL);
1364
1365   if (parse->frame != -1 && parse->thread == -1)
1366     error (_("Cannot specify --frame without --thread"));
1367
1368   if (parse->thread != -1)
1369     {
1370       struct thread_info *tp = find_thread_id (parse->thread);
1371       if (!tp)
1372         error (_("Invalid thread id: %d"), parse->thread);
1373
1374       if (is_exited (tp->ptid))
1375         error (_("Thread id: %d has terminated"), parse->thread);
1376
1377       switch_to_thread (tp->ptid);
1378     }
1379
1380   if (parse->frame != -1)
1381     {
1382       struct frame_info *fid;
1383       int frame = parse->frame;
1384       fid = find_relative_frame (get_current_frame (), &frame);
1385       if (frame == 0)
1386         /* find_relative_frame was successful */
1387         select_frame (fid);
1388       else
1389         error (_("Invalid frame id: %d"), frame);
1390     }
1391
1392   if (parse->cmd->argv_func != NULL)
1393     parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
1394   else if (parse->cmd->cli.cmd != 0)
1395     {
1396       /* FIXME: DELETE THIS. */
1397       /* The operation is still implemented by a cli command.  */
1398       /* Must be a synchronous one.  */
1399       mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
1400                               parse->args);
1401     }
1402   else
1403     {
1404       /* FIXME: DELETE THIS.  */
1405       struct ui_file *stb;
1406
1407       stb = mem_fileopen ();
1408
1409       fputs_unfiltered ("Undefined mi command: ", stb);
1410       fputstr_unfiltered (parse->command, '"', stb);
1411       fputs_unfiltered (" (missing implementation)", stb);
1412
1413       make_cleanup_ui_file_delete (stb);
1414       error_stream (stb);
1415     }
1416   do_cleanups (cleanup);
1417 }
1418
1419 /* FIXME: This is just a hack so we can get some extra commands going.
1420    We don't want to channel things through the CLI, but call libgdb directly.
1421    Use only for synchronous commands.  */
1422
1423 void
1424 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
1425 {
1426   if (cmd != 0)
1427     {
1428       struct cleanup *old_cleanups;
1429       char *run;
1430       if (args_p)
1431         run = xstrprintf ("%s %s", cmd, args);
1432       else
1433         run = xstrdup (cmd);
1434       if (mi_debug_p)
1435         /* FIXME: gdb_???? */
1436         fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
1437                             cmd, run);
1438       old_cleanups = make_cleanup (xfree, run);
1439       execute_command ( /*ui */ run, 0 /*from_tty */ );
1440       do_cleanups (old_cleanups);
1441       return;
1442     }
1443 }
1444
1445 void
1446 mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
1447 {
1448   struct cleanup *old_cleanups;
1449   char *run;
1450
1451   if (target_can_async_p ())
1452     run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
1453   else
1454     run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
1455   old_cleanups = make_cleanup (xfree, run);  
1456
1457   execute_command ( /*ui */ run, 0 /*from_tty */ );
1458
1459   if (target_can_async_p ())
1460     {
1461       /* If we're not executing, an exception should have been throw.  */
1462       gdb_assert (is_running (inferior_ptid));
1463       do_cleanups (old_cleanups);
1464     }
1465   else
1466     {
1467       /* Do this before doing any printing.  It would appear that some
1468          print code leaves garbage around in the buffer.  */
1469       do_cleanups (old_cleanups);
1470     }
1471 }
1472
1473 void
1474 mi_load_progress (const char *section_name,
1475                   unsigned long sent_so_far,
1476                   unsigned long total_section,
1477                   unsigned long total_sent,
1478                   unsigned long grand_total)
1479 {
1480   struct timeval time_now, delta, update_threshold;
1481   static struct timeval last_update;
1482   static char *previous_sect_name = NULL;
1483   int new_section;
1484   struct ui_out *saved_uiout;
1485
1486   /* This function is called through deprecated_show_load_progress
1487      which means uiout may not be correct.  Fix it for the duration
1488      of this function.  */
1489   saved_uiout = uiout;
1490
1491   if (current_interp_named_p (INTERP_MI)
1492       || current_interp_named_p (INTERP_MI2))
1493     uiout = mi_out_new (2);
1494   else if (current_interp_named_p (INTERP_MI1))
1495     uiout = mi_out_new (1);
1496   else if (current_interp_named_p (INTERP_MI3))
1497     uiout = mi_out_new (3);
1498   else
1499     return;
1500
1501   update_threshold.tv_sec = 0;
1502   update_threshold.tv_usec = 500000;
1503   gettimeofday (&time_now, NULL);
1504
1505   delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
1506   delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
1507
1508   if (delta.tv_usec < 0)
1509     {
1510       delta.tv_sec -= 1;
1511       delta.tv_usec += 1000000L;
1512     }
1513
1514   new_section = (previous_sect_name ?
1515                  strcmp (previous_sect_name, section_name) : 1);
1516   if (new_section)
1517     {
1518       struct cleanup *cleanup_tuple;
1519       xfree (previous_sect_name);
1520       previous_sect_name = xstrdup (section_name);
1521
1522       if (current_token)
1523         fputs_unfiltered (current_token, raw_stdout);
1524       fputs_unfiltered ("+download", raw_stdout);
1525       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1526       ui_out_field_string (uiout, "section", section_name);
1527       ui_out_field_int (uiout, "section-size", total_section);
1528       ui_out_field_int (uiout, "total-size", grand_total);
1529       do_cleanups (cleanup_tuple);
1530       mi_out_put (uiout, raw_stdout);
1531       fputs_unfiltered ("\n", raw_stdout);
1532       gdb_flush (raw_stdout);
1533     }
1534
1535   if (delta.tv_sec >= update_threshold.tv_sec &&
1536       delta.tv_usec >= update_threshold.tv_usec)
1537     {
1538       struct cleanup *cleanup_tuple;
1539       last_update.tv_sec = time_now.tv_sec;
1540       last_update.tv_usec = time_now.tv_usec;
1541       if (current_token)
1542         fputs_unfiltered (current_token, raw_stdout);
1543       fputs_unfiltered ("+download", raw_stdout);
1544       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1545       ui_out_field_string (uiout, "section", section_name);
1546       ui_out_field_int (uiout, "section-sent", sent_so_far);
1547       ui_out_field_int (uiout, "section-size", total_section);
1548       ui_out_field_int (uiout, "total-sent", total_sent);
1549       ui_out_field_int (uiout, "total-size", grand_total);
1550       do_cleanups (cleanup_tuple);
1551       mi_out_put (uiout, raw_stdout);
1552       fputs_unfiltered ("\n", raw_stdout);
1553       gdb_flush (raw_stdout);
1554     }
1555
1556   xfree (uiout);
1557   uiout = saved_uiout;
1558 }
1559
1560 static void 
1561 timestamp (struct mi_timestamp *tv)
1562   {
1563     long usec;
1564     gettimeofday (&tv->wallclock, NULL);
1565 #ifdef HAVE_GETRUSAGE
1566     getrusage (RUSAGE_SELF, &rusage);
1567     tv->utime.tv_sec = rusage.ru_utime.tv_sec;
1568     tv->utime.tv_usec = rusage.ru_utime.tv_usec;
1569     tv->stime.tv_sec = rusage.ru_stime.tv_sec;
1570     tv->stime.tv_usec = rusage.ru_stime.tv_usec;
1571 #else
1572     usec = get_run_time ();
1573     tv->utime.tv_sec = usec/1000000L;
1574     tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
1575     tv->stime.tv_sec = 0;
1576     tv->stime.tv_usec = 0;
1577 #endif
1578   }
1579
1580 static void 
1581 print_diff_now (struct mi_timestamp *start)
1582   {
1583     struct mi_timestamp now;
1584     timestamp (&now);
1585     print_diff (start, &now);
1586   }
1587
1588 void
1589 mi_print_timing_maybe (void)
1590 {
1591   /* If the command is -enable-timing then do_timings may be
1592      true whilst current_command_ts is not initialized.  */
1593   if (do_timings && current_command_ts)
1594     print_diff_now (current_command_ts);
1595 }
1596
1597 static long 
1598 timeval_diff (struct timeval start, struct timeval end)
1599   {
1600     return ((end.tv_sec - start.tv_sec) * 1000000L)
1601       + (end.tv_usec - start.tv_usec);
1602   }
1603
1604 static void 
1605 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
1606   {
1607     fprintf_unfiltered
1608       (raw_stdout,
1609        ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}", 
1610        timeval_diff (start->wallclock, end->wallclock) / 1000000.0, 
1611        timeval_diff (start->utime, end->utime) / 1000000.0, 
1612        timeval_diff (start->stime, end->stime) / 1000000.0);
1613   }