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