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