* mi/mi-interp.c (mi_solib_loaded, mi_solib_unloaded): New.
[external/binutils.git] / gdb / mi / mi-interp.c
1 /* MI Interpreter Definitions and Commands for GDB, the GNU debugger.
2
3    Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22 #include "gdb_string.h"
23 #include "interps.h"
24 #include "event-top.h"
25 #include "event-loop.h"
26 #include "inferior.h"
27 #include "ui-out.h"
28 #include "top.h"
29 #include "exceptions.h"
30 #include "mi-main.h"
31 #include "mi-cmds.h"
32 #include "mi-out.h"
33 #include "mi-console.h"
34 #include "mi-common.h"
35 #include "observer.h"
36 #include "gdbthread.h"
37 #include "solist.h"
38
39 /* These are the interpreter setup, etc. functions for the MI interpreter */
40 static void mi_execute_command_wrapper (char *cmd);
41 static void mi_command_loop (int mi_version);
42
43 /* These are hooks that we put in place while doing interpreter_exec
44    so we can report interesting things that happened "behind the mi's
45    back" in this command */
46 static int mi_interp_query_hook (const char *ctlstr, va_list ap)
47      ATTR_FORMAT (printf, 1, 0);
48
49 static void mi3_command_loop (void);
50 static void mi2_command_loop (void);
51 static void mi1_command_loop (void);
52
53 static void mi_insert_notify_hooks (void);
54 static void mi_remove_notify_hooks (void);
55 static void mi_on_normal_stop (struct bpstats *bs, int print_frame);
56
57 static void mi_new_thread (struct thread_info *t);
58 static void mi_thread_exit (struct thread_info *t);
59 static void mi_new_inferior (int pid);
60 static void mi_inferior_exit (int pid);
61 static void mi_on_resume (ptid_t ptid);
62 static void mi_solib_loaded (struct so_list *solib);
63 static void mi_solib_unloaded (struct so_list *solib);
64
65 static void *
66 mi_interpreter_init (int top_level)
67 {
68   struct mi_interp *mi = XMALLOC (struct mi_interp);
69
70   /* HACK: We need to force stdout/stderr to point at the console.  This avoids
71      any potential side effects caused by legacy code that is still
72      using the TUI / fputs_unfiltered_hook.  So we set up output channels for
73      this now, and swap them in when we are run. */
74
75   raw_stdout = stdio_fileopen (stdout);
76
77   /* Create MI channels */
78   mi->out = mi_console_file_new (raw_stdout, "~", '"');
79   mi->err = mi_console_file_new (raw_stdout, "&", '"');
80   mi->log = mi->err;
81   mi->targ = mi_console_file_new (raw_stdout, "@", '"');
82   mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
83
84   if (top_level)
85     {
86       observer_attach_new_thread (mi_new_thread);
87       observer_attach_thread_exit (mi_thread_exit);
88       observer_attach_new_inferior (mi_new_inferior);
89       observer_attach_inferior_exit (mi_inferior_exit);
90       observer_attach_normal_stop (mi_on_normal_stop);
91       observer_attach_target_resumed (mi_on_resume);
92       observer_attach_solib_loaded (mi_solib_loaded);
93       observer_attach_solib_unloaded (mi_solib_unloaded);
94     }
95
96   return mi;
97 }
98
99 static int
100 mi_interpreter_resume (void *data)
101 {
102   struct mi_interp *mi = data;
103   /* As per hack note in mi_interpreter_init, swap in the output channels... */
104
105   gdb_setup_readline ();
106
107   /* These overwrite some of the initialization done in
108      _intialize_event_loop.  */
109   call_readline = gdb_readline2;
110   input_handler = mi_execute_command_wrapper;
111   add_file_handler (input_fd, stdin_event_handler, 0);
112   async_command_editing_p = 0;
113   /* FIXME: This is a total hack for now.  PB's use of the MI
114      implicitly relies on a bug in the async support which allows
115      asynchronous commands to leak through the commmand loop.  The bug
116      involves (but is not limited to) the fact that sync_execution was
117      erroneously initialized to 0.  Duplicate by initializing it thus
118      here...  */
119   sync_execution = 0;
120
121   gdb_stdout = mi->out;
122   /* Route error and log output through the MI */
123   gdb_stderr = mi->err;
124   gdb_stdlog = mi->log;
125   /* Route target output through the MI. */
126   gdb_stdtarg = mi->targ;
127   /* Route target error through the MI as well. */
128   gdb_stdtargerr = mi->targ;
129
130   /* Replace all the hooks that we know about.  There really needs to
131      be a better way of doing this... */
132   clear_interpreter_hooks ();
133
134   deprecated_show_load_progress = mi_load_progress;
135
136   /* If we're _the_ interpreter, take control. */
137   if (current_interp_named_p (INTERP_MI1))
138     deprecated_command_loop_hook = mi1_command_loop;
139   else if (current_interp_named_p (INTERP_MI2))
140     deprecated_command_loop_hook = mi2_command_loop;
141   else if (current_interp_named_p (INTERP_MI3))
142     deprecated_command_loop_hook = mi3_command_loop;
143   else
144     deprecated_command_loop_hook = mi2_command_loop;
145
146   return 1;
147 }
148
149 static int
150 mi_interpreter_suspend (void *data)
151 {
152   gdb_disable_readline ();
153   return 1;
154 }
155
156 static struct gdb_exception
157 mi_interpreter_exec (void *data, const char *command)
158 {
159   static struct gdb_exception ok;
160   char *tmp = alloca (strlen (command) + 1);
161   strcpy (tmp, command);
162   mi_execute_command_wrapper (tmp);
163   return exception_none;
164 }
165
166 /* Never display the default gdb prompt in mi case.  */
167 static int
168 mi_interpreter_prompt_p (void *data)
169 {
170   return 0;
171 }
172
173 void
174 mi_cmd_interpreter_exec (char *command, char **argv, int argc)
175 {
176   struct interp *interp_to_use;
177   int i;
178   struct interp_procs *procs;
179   char *mi_error_message = NULL;
180   struct cleanup *old_chain;
181
182   if (argc < 2)
183     error ("mi_cmd_interpreter_exec: Usage: -interpreter-exec interp command");
184
185   interp_to_use = interp_lookup (argv[0]);
186   if (interp_to_use == NULL)
187     error ("mi_cmd_interpreter_exec: could not find interpreter \"%s\"", argv[0]);
188
189   if (!interp_exec_p (interp_to_use))
190     error ("mi_cmd_interpreter_exec: interpreter \"%s\" does not support command execution",
191               argv[0]);
192
193   /* Insert the MI out hooks, making sure to also call the interpreter's hooks
194      if it has any. */
195   /* KRS: We shouldn't need this... Events should be installed and they should
196      just ALWAYS fire something out down the MI channel... */
197   mi_insert_notify_hooks ();
198
199   /* Now run the code... */
200
201   old_chain = make_cleanup (null_cleanup, 0);
202   for (i = 1; i < argc; i++)
203     {
204       struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
205       if (e.reason < 0)
206         {
207           mi_error_message = xstrdup (e.message);
208           make_cleanup (xfree, mi_error_message);
209           break;
210         }
211     }
212
213   mi_remove_notify_hooks ();
214
215   if (mi_error_message != NULL)
216     error ("%s", mi_error_message);
217   do_cleanups (old_chain);
218 }
219
220 /*
221  * mi_insert_notify_hooks - This inserts a number of hooks that are meant to produce
222  * async-notify ("=") MI messages while running commands in another interpreter
223  * using mi_interpreter_exec.  The canonical use for this is to allow access to
224  * the gdb CLI interpreter from within the MI, while still producing MI style output
225  * when actions in the CLI command change gdb's state.
226 */
227
228 static void
229 mi_insert_notify_hooks (void)
230 {
231   deprecated_query_hook = mi_interp_query_hook;
232 }
233
234 static void
235 mi_remove_notify_hooks (void)
236 {
237   deprecated_query_hook = NULL;
238 }
239
240 static int
241 mi_interp_query_hook (const char *ctlstr, va_list ap)
242 {
243   return 1;
244 }
245
246 static void
247 mi_execute_command_wrapper (char *cmd)
248 {
249   mi_execute_command (cmd, stdin == instream);
250 }
251
252 static void
253 mi1_command_loop (void)
254 {
255   mi_command_loop (1);
256 }
257
258 static void
259 mi2_command_loop (void)
260 {
261   mi_command_loop (2);
262 }
263
264 static void
265 mi3_command_loop (void)
266 {
267   mi_command_loop (3);
268 }
269
270 static void
271 mi_command_loop (int mi_version)
272 {
273   /* Turn off 8 bit strings in quoted output.  Any character with the
274      high bit set is printed using C's octal format. */
275   sevenbit_strings = 1;
276   /* Tell the world that we're alive */
277   fputs_unfiltered ("(gdb) \n", raw_stdout);
278   gdb_flush (raw_stdout);
279   start_event_loop ();
280 }
281
282 static void
283 mi_new_thread (struct thread_info *t)
284 {
285   struct mi_interp *mi = top_level_interpreter_data ();
286
287   fprintf_unfiltered (mi->event_channel, 
288                       "thread-created,id=\"%d\",group-id=\"%d\"", 
289                       t->num, t->ptid.pid);
290   gdb_flush (mi->event_channel);
291 }
292
293 static void
294 mi_thread_exit (struct thread_info *t)
295 {
296   struct mi_interp *mi = top_level_interpreter_data ();
297   target_terminal_ours ();
298   fprintf_unfiltered (mi->event_channel, 
299                       "thread-exited,id=\"%d\",group-id=\"%d\"", 
300                       t->num,t->ptid.pid);
301   gdb_flush (mi->event_channel);
302 }
303
304 static void
305 mi_new_inferior (int pid)
306 {
307   struct mi_interp *mi = top_level_interpreter_data ();
308   target_terminal_ours ();
309   fprintf_unfiltered (mi->event_channel, "thread-group-created,id=\"%d\"", 
310                       pid);
311   gdb_flush (mi->event_channel);
312 }
313
314 static void
315 mi_inferior_exit (int pid)
316 {
317   struct mi_interp *mi = top_level_interpreter_data ();
318   target_terminal_ours ();
319   fprintf_unfiltered (mi->event_channel, "thread-group-exited,id=\"%d\"", 
320                       pid);
321   gdb_flush (mi->event_channel);  
322 }
323
324 static void
325 mi_on_normal_stop (struct bpstats *bs, int print_frame)
326 {
327   /* Since this can be called when CLI command is executing,
328      using cli interpreter, be sure to use MI uiout for output,
329      not the current one.  */
330   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
331   struct mi_interp *mi = top_level_interpreter_data ();
332
333   if (print_frame)
334     {
335       if (uiout != mi_uiout)
336         {
337           /* The normal_stop function has printed frame information into 
338              CLI uiout, or some other non-MI uiout.  There's no way we
339              can extract proper fields from random uiout object, so we print
340              the frame again.  In practice, this can only happen when running
341              a CLI command in MI.  */
342           struct ui_out *saved_uiout = uiout;
343           uiout = mi_uiout;
344           print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
345           uiout = saved_uiout;
346         }
347
348       ui_out_field_int (mi_uiout, "thread-id",
349                         pid_to_thread_id (inferior_ptid));
350       if (non_stop)
351         {
352           struct cleanup *back_to = make_cleanup_ui_out_list_begin_end 
353             (mi_uiout, "stopped-threads");
354           ui_out_field_int (mi_uiout, NULL,
355                             pid_to_thread_id (inferior_ptid));                            
356           do_cleanups (back_to);
357         }
358       else
359         ui_out_field_string (mi_uiout, "stopped-threads", "all");
360     }
361   
362   fputs_unfiltered ("*stopped", raw_stdout);
363   mi_out_put (mi_uiout, raw_stdout);
364   mi_out_rewind (mi_uiout);
365   fputs_unfiltered ("\n", raw_stdout);
366   gdb_flush (raw_stdout);
367 }
368
369 static void
370 mi_on_resume (ptid_t ptid)
371 {
372   /* To cater for older frontends, emit ^running, but do it only once
373      per each command.  We do it here, since at this point we know
374      that the target was successfully resumed, and in non-async mode,
375      we won't return back to MI interpreter code until the target
376      is done running, so delaying the output of "^running" until then
377      will make it impossible for frontend to know what's going on.
378
379      In future (MI3), we'll be outputting "^done" here.  */
380   if (!running_result_record_printed)
381     {
382       if (current_token)
383         fputs_unfiltered (current_token, raw_stdout);
384       fputs_unfiltered ("^running\n", raw_stdout);
385     }
386
387   if (PIDGET (ptid) == -1)
388     fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
389   else if (thread_count () == 0)
390     {
391       /* This is a target where for single-threaded programs the thread
392          table has zero threads.  Don't print any thread-id field.  */
393       fprintf_unfiltered (raw_stdout, "*running\n");
394     }
395   else
396     {
397       struct thread_info *ti = find_thread_pid (ptid);
398       gdb_assert (ti);
399       fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num);
400     }
401
402   if (!running_result_record_printed)
403     {
404       running_result_record_printed = 1;
405       /* This is what gdb used to do historically -- printing prompt even if
406          it cannot actually accept any input.  This will be surely removed
407          for MI3, and may be removed even earler.  */
408       /* FIXME: review the use of target_is_async_p here -- is that
409          what we want? */
410       if (!target_is_async_p ())
411         fputs_unfiltered ("(gdb) \n", raw_stdout);
412     }
413   gdb_flush (raw_stdout);
414 }
415
416 static void
417 mi_solib_loaded (struct so_list *solib)
418 {
419   struct mi_interp *mi = top_level_interpreter_data ();
420   target_terminal_ours ();
421   fprintf_unfiltered (mi->event_channel, 
422                       "library-loaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\",symbols-loaded=\"%d\"", 
423                       solib->so_original_name, solib->so_original_name, 
424                       solib->so_name, solib->symbols_loaded);
425   gdb_flush (mi->event_channel);
426 }
427
428 static void
429 mi_solib_unloaded (struct so_list *solib)
430 {
431   struct mi_interp *mi = top_level_interpreter_data ();
432   target_terminal_ours ();
433   fprintf_unfiltered (mi->event_channel, 
434                       "library-unloaded,id=\"%s\",target-name=\"%s\",host-name=\"%s\"", 
435                       solib->so_original_name, solib->so_original_name, 
436                       solib->so_name);
437   gdb_flush (mi->event_channel);
438 }
439
440
441 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
442
443 void
444 _initialize_mi_interp (void)
445 {
446   static const struct interp_procs procs =
447   {
448     mi_interpreter_init,        /* init_proc */
449     mi_interpreter_resume,      /* resume_proc */
450     mi_interpreter_suspend,     /* suspend_proc */
451     mi_interpreter_exec,        /* exec_proc */
452     mi_interpreter_prompt_p     /* prompt_proc_p */
453   };
454
455   /* The various interpreter levels.  */
456   interp_add (interp_new (INTERP_MI1, NULL, mi_out_new (1), &procs));
457   interp_add (interp_new (INTERP_MI2, NULL, mi_out_new (2), &procs));
458   interp_add (interp_new (INTERP_MI3, NULL, mi_out_new (3), &procs));
459
460   /* "mi" selects the most recent released version.  "mi2" was
461      released as part of GDB 6.0.  */
462   interp_add (interp_new (INTERP_MI, NULL, mi_out_new (2), &procs));
463 }