Use XCNEW gdbarch_tdep
[external/binutils.git] / gdb / interps.c
1 /* Manages interpreters for GDB, the GNU debugger.
2
3    Copyright (C) 2000-2017 Free Software Foundation, Inc.
4
5    Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 /* This is just a first cut at separating out the "interpreter"
23    functions of gdb into self-contained modules.  There are a couple
24    of open areas that need to be sorted out:
25
26    1) The interpreter explicitly contains a UI_OUT, and can insert itself
27    into the event loop, but it doesn't explicitly contain hooks for readline.
28    I did this because it seems to me many interpreters won't want to use
29    the readline command interface, and it is probably simpler to just let
30    them take over the input in their resume proc.  */
31
32 #include "defs.h"
33 #include "gdbcmd.h"
34 #include "ui-out.h"
35 #include "event-loop.h"
36 #include "event-top.h"
37 #include "interps.h"
38 #include "completer.h"
39 #include "top.h"                /* For command_loop.  */
40 #include "continuations.h"
41
42 /* Each UI has its own independent set of interpreters.  */
43
44 struct ui_interp_info
45 {
46   /* Each top level has its own independent set of interpreters.  */
47   struct interp *interp_list;
48   struct interp *current_interpreter;
49   struct interp *top_level_interpreter;
50
51   /* The interpreter that is active while `interp_exec' is active, NULL
52      at all other times.  */
53   struct interp *command_interpreter;
54 };
55
56 /* Get UI's ui_interp_info object.  Never returns NULL.  */
57
58 static struct ui_interp_info *
59 get_interp_info (struct ui *ui)
60 {
61   if (ui->interp_info == NULL)
62     ui->interp_info = XCNEW (struct ui_interp_info);
63   return ui->interp_info;
64 }
65
66 /* Get the current UI's ui_interp_info object.  Never returns
67    NULL.  */
68
69 static struct ui_interp_info *
70 get_current_interp_info (void)
71 {
72   return get_interp_info (current_ui);
73 }
74
75 /* The magic initialization routine for this module.  */
76
77 void _initialize_interpreter (void);
78
79 static struct interp *interp_lookup_existing (struct ui *ui,
80                                               const char *name);
81
82 interp::interp (const char *name)
83 {
84   this->name = xstrdup (name);
85   this->inited = false;
86 }
87
88 interp::~interp ()
89 {}
90
91 /* An interpreter factory.  Maps an interpreter name to the factory
92    function that instantiates an interpreter by that name.  */
93
94 struct interp_factory
95 {
96   /* This is the name in "-i=INTERP" and "interpreter-exec INTERP".  */
97   const char *name;
98
99   /* The function that creates the interpreter.  */
100   interp_factory_func func;
101 };
102
103 typedef struct interp_factory *interp_factory_p;
104 DEF_VEC_P(interp_factory_p);
105
106 /* The registered interpreter factories.  */
107 static VEC(interp_factory_p) *interpreter_factories = NULL;
108
109 /* See interps.h.  */
110
111 void
112 interp_factory_register (const char *name, interp_factory_func func)
113 {
114   struct interp_factory *f;
115   int ix;
116
117   /* Assert that no factory for NAME is already registered.  */
118   for (ix = 0;
119        VEC_iterate (interp_factory_p, interpreter_factories, ix, f);
120        ++ix)
121     if (strcmp (f->name, name) == 0)
122       {
123         internal_error (__FILE__, __LINE__,
124                         _("interpreter factory already registered: \"%s\"\n"),
125                         name);
126       }
127
128   f = XNEW (struct interp_factory);
129   f->name = name;
130   f->func = func;
131   VEC_safe_push (interp_factory_p, interpreter_factories, f);
132 }
133
134 /* Add interpreter INTERP to the gdb interpreter list.  The
135    interpreter must not have previously been added.  */
136 void
137 interp_add (struct ui *ui, struct interp *interp)
138 {
139   struct ui_interp_info *ui_interp = get_interp_info (ui);
140
141   gdb_assert (interp_lookup_existing (ui, interp->name) == NULL);
142
143   interp->next = ui_interp->interp_list;
144   ui_interp->interp_list = interp;
145 }
146
147 /* This sets the current interpreter to be INTERP.  If INTERP has not
148    been initialized, then this will also run the init method.
149
150    The TOP_LEVEL parameter tells if this new interpreter is
151    the top-level one.  The top-level is what is requested
152    on the command line, and is responsible for reporting general
153    notification about target state changes.  For example, if
154    MI is the top-level interpreter, then it will always report
155    events such as target stops and new thread creation, even if they
156    are caused by CLI commands.  */
157
158 static void
159 interp_set (struct interp *interp, bool top_level)
160 {
161   struct ui_interp_info *ui_interp = get_current_interp_info ();
162   struct interp *old_interp = ui_interp->current_interpreter;
163
164   /* If we already have an interpreter, then trying to
165      set top level interpreter is kinda pointless.  */
166   gdb_assert (!top_level || !ui_interp->current_interpreter);
167   gdb_assert (!top_level || !ui_interp->top_level_interpreter);
168
169   if (old_interp != NULL)
170     {
171       current_uiout->flush ();
172       old_interp->suspend ();
173     }
174
175   ui_interp->current_interpreter = interp;
176   if (top_level)
177     ui_interp->top_level_interpreter = interp;
178
179   /* We use interpreter_p for the "set interpreter" variable, so we need
180      to make sure we have a malloc'ed copy for the set command to free.  */
181   if (interpreter_p != NULL
182       && strcmp (interp->name, interpreter_p) != 0)
183     {
184       xfree (interpreter_p);
185
186       interpreter_p = xstrdup (interp->name);
187     }
188
189   /* Run the init proc.  */
190   if (!interp->inited)
191     {
192       interp->init (top_level);
193       interp->inited = true;
194     }
195
196   /* Do this only after the interpreter is initialized.  */
197   current_uiout = interp->interp_ui_out ();
198
199   /* Clear out any installed interpreter hooks/event handlers.  */
200   clear_interpreter_hooks ();
201
202   interp->resume ();
203 }
204
205 /* Look up the interpreter for NAME.  If no such interpreter exists,
206    return NULL, otherwise return a pointer to the interpreter.  */
207
208 static struct interp *
209 interp_lookup_existing (struct ui *ui, const char *name)
210 {
211   struct ui_interp_info *ui_interp = get_interp_info (ui);
212   struct interp *interp;
213
214   for (interp = ui_interp->interp_list;
215        interp != NULL;
216        interp = interp->next)
217     {
218       if (strcmp (interp->name, name) == 0)
219         return interp;
220     }
221
222   return NULL;
223 }
224
225 /* See interps.h.  */
226
227 struct interp *
228 interp_lookup (struct ui *ui, const char *name)
229 {
230   struct interp_factory *factory;
231   struct interp *interp;
232   int ix;
233
234   if (name == NULL || strlen (name) == 0)
235     return NULL;
236
237   /* Only create each interpreter once per top level.  */
238   interp = interp_lookup_existing (ui, name);
239   if (interp != NULL)
240     return interp;
241
242   for (ix = 0;
243        VEC_iterate (interp_factory_p, interpreter_factories, ix, factory);
244        ++ix)
245     if (strcmp (factory->name, name) == 0)
246       {
247         interp = factory->func (name);
248         interp_add (ui, interp);
249         return interp;
250       }
251
252   return NULL;
253 }
254
255 /* See interps.h.  */
256
257 void
258 set_top_level_interpreter (const char *name)
259 {
260   /* Find it.  */
261   struct interp *interp = interp_lookup (current_ui, name);
262
263   if (interp == NULL)
264     error (_("Interpreter `%s' unrecognized"), name);
265   /* Install it.  */
266   interp_set (interp, true);
267 }
268
269 /* Returns the current interpreter.  */
270
271 struct ui_out *
272 interp_ui_out (struct interp *interp)
273 {
274   struct ui_interp_info *ui_interp = get_current_interp_info ();
275
276   if (interp == NULL)
277     interp = ui_interp->current_interpreter;
278   return interp->interp_ui_out ();
279 }
280
281 void
282 current_interp_set_logging (ui_file_up logfile,
283                             bool logging_redirect)
284 {
285   struct ui_interp_info *ui_interp = get_current_interp_info ();
286   struct interp *interp = ui_interp->current_interpreter;
287
288   interp->set_logging (std::move (logfile), logging_redirect);
289 }
290
291 /* Temporarily overrides the current interpreter.  */
292 struct interp *
293 interp_set_temp (const char *name)
294 {
295   struct ui_interp_info *ui_interp = get_current_interp_info ();
296   struct interp *interp = interp_lookup (current_ui, name);
297   struct interp *old_interp = ui_interp->current_interpreter;
298
299   if (interp)
300     ui_interp->current_interpreter = interp;
301   return old_interp;
302 }
303
304 /* Returns the interpreter's name.  */
305
306 const char *
307 interp_name (struct interp *interp)
308 {
309   return interp->name;
310 }
311
312 /* Returns true if the current interp is the passed in name.  */
313 int
314 current_interp_named_p (const char *interp_name)
315 {
316   struct ui_interp_info *ui_interp = get_current_interp_info ();
317   struct interp *interp = ui_interp->current_interpreter;
318
319   if (interp != NULL)
320     return (strcmp (interp->name, interp_name) == 0);
321
322   return 0;
323 }
324
325 /* The interpreter that was active when a command was executed.
326    Normally that'd always be CURRENT_INTERPRETER, except that MI's
327    -interpreter-exec command doesn't actually flip the current
328    interpreter when running its sub-command.  The
329    `command_interpreter' global tracks when interp_exec is called
330    (IOW, when -interpreter-exec is called).  If that is set, it is
331    INTERP in '-interpreter-exec INTERP "CMD"' or in 'interpreter-exec
332    INTERP "CMD".  Otherwise, interp_exec isn't active, and so the
333    interpreter running the command is the current interpreter.  */
334
335 struct interp *
336 command_interp (void)
337 {
338   struct ui_interp_info *ui_interp = get_current_interp_info ();
339
340   if (ui_interp->command_interpreter != NULL)
341     return ui_interp->command_interpreter;
342   else
343     return ui_interp->current_interpreter;
344 }
345
346 /* See interps.h.  */
347
348 void
349 interp_pre_command_loop (struct interp *interp)
350 {
351   gdb_assert (interp != NULL);
352
353   interp->pre_command_loop ();
354 }
355
356 /* See interp.h  */
357
358 int
359 interp_supports_command_editing (struct interp *interp)
360 {
361   return interp->supports_command_editing ();
362 }
363
364 /* interp_exec - This executes COMMAND_STR in the current 
365    interpreter.  */
366
367 struct gdb_exception
368 interp_exec (struct interp *interp, const char *command_str)
369 {
370   struct ui_interp_info *ui_interp = get_current_interp_info ();
371
372   struct gdb_exception ex;
373   struct interp *save_command_interp;
374
375   /* See `command_interp' for why we do this.  */
376   save_command_interp = ui_interp->command_interpreter;
377   ui_interp->command_interpreter = interp;
378
379   ex = interp->exec (command_str);
380
381   ui_interp->command_interpreter = save_command_interp;
382
383   return ex;
384 }
385
386 /* A convenience routine that nulls out all the common command hooks.
387    Use it when removing your interpreter in its suspend proc.  */
388 void
389 clear_interpreter_hooks (void)
390 {
391   deprecated_print_frame_info_listing_hook = 0;
392   /*print_frame_more_info_hook = 0; */
393   deprecated_query_hook = 0;
394   deprecated_warning_hook = 0;
395   deprecated_interactive_hook = 0;
396   deprecated_readline_begin_hook = 0;
397   deprecated_readline_hook = 0;
398   deprecated_readline_end_hook = 0;
399   deprecated_context_hook = 0;
400   deprecated_target_wait_hook = 0;
401   deprecated_call_command_hook = 0;
402   deprecated_error_begin_hook = 0;
403 }
404
405 static void
406 interpreter_exec_cmd (char *args, int from_tty)
407 {
408   struct ui_interp_info *ui_interp = get_current_interp_info ();
409   struct interp *old_interp, *interp_to_use;
410   char **prules = NULL;
411   char **trule = NULL;
412   unsigned int nrules;
413   unsigned int i;
414   struct cleanup *cleanup;
415
416   if (args == NULL)
417     error_no_arg (_("interpreter-exec command"));
418
419   prules = gdb_buildargv (args);
420   cleanup = make_cleanup_freeargv (prules);
421
422   nrules = 0;
423   for (trule = prules; *trule != NULL; trule++)
424     nrules++;
425
426   if (nrules < 2)
427     error (_("usage: interpreter-exec <interpreter> [ <command> ... ]"));
428
429   old_interp = ui_interp->current_interpreter;
430
431   interp_to_use = interp_lookup (current_ui, prules[0]);
432   if (interp_to_use == NULL)
433     error (_("Could not find interpreter \"%s\"."), prules[0]);
434
435   interp_set (interp_to_use, false);
436
437   for (i = 1; i < nrules; i++)
438     {
439       struct gdb_exception e = interp_exec (interp_to_use, prules[i]);
440
441       if (e.reason < 0)
442         {
443           interp_set (old_interp, 0);
444           error (_("error in command: \"%s\"."), prules[i]);
445         }
446     }
447
448   interp_set (old_interp, 0);
449
450   do_cleanups (cleanup);
451 }
452
453 /* See interps.h.  */
454
455 VEC (char_ptr) *
456 interpreter_completer (struct cmd_list_element *ignore,
457                        const char *text, const char *word)
458 {
459   struct interp_factory *interp;
460   int textlen;
461   VEC (char_ptr) *matches = NULL;
462   int ix;
463
464   textlen = strlen (text);
465   for (ix = 0;
466        VEC_iterate (interp_factory_p, interpreter_factories, ix, interp);
467        ++ix)
468     {
469       if (strncmp (interp->name, text, textlen) == 0)
470         {
471           char *match;
472
473           match = (char *) xmalloc (strlen (word) + strlen (interp->name) + 1);
474           if (word == text)
475             strcpy (match, interp->name);
476           else if (word > text)
477             {
478               /* Return some portion of interp->name.  */
479               strcpy (match, interp->name + (word - text));
480             }
481           else
482             {
483               /* Return some of text plus interp->name.  */
484               strncpy (match, word, text - word);
485               match[text - word] = '\0';
486               strcat (match, interp->name);
487             }
488           VEC_safe_push (char_ptr, matches, match);
489         }
490     }
491
492   return matches;
493 }
494
495 struct interp *
496 top_level_interpreter (void)
497 {
498   struct ui_interp_info *ui_interp = get_current_interp_info ();
499
500   return ui_interp->top_level_interpreter;
501 }
502
503 /* See interps.h.  */
504
505 struct interp *
506 current_interpreter (void)
507 {
508   struct ui_interp_info *ui_interp = get_interp_info (current_ui);
509
510   return ui_interp->current_interpreter;
511 }
512
513 /* This just adds the "interpreter-exec" command.  */
514 void
515 _initialize_interpreter (void)
516 {
517   struct cmd_list_element *c;
518
519   c = add_cmd ("interpreter-exec", class_support,
520                interpreter_exec_cmd, _("\
521 Execute a command in an interpreter.  It takes two arguments:\n\
522 The first argument is the name of the interpreter to use.\n\
523 The second argument is the command to execute.\n"), &cmdlist);
524   set_cmd_completer (c, interpreter_completer);
525 }