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