use gnulib's update-copyright script to update copyright years
[deliverable/binutils-gdb.git] / gdb / interps.c
CommitLineData
4a8f6654
AC
1/* Manages interpreters for GDB, the GNU debugger.
2
7b6bb8da 3 Copyright (C) 2000, 2002, 2003, 2007, 2008, 2009, 2010, 2011
0fb0cc75 4 Free Software Foundation, Inc.
4a8f6654
AC
5
6 Written by Jim Ingham <jingham@apple.com> of Apple Computer, Inc.
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
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
4a8f6654
AC
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
1777feb0 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
4a8f6654
AC
22
23/* This is just a first cut at separating out the "interpreter"
24 functions of gdb into self-contained modules. There are a couple
25 of open areas that need to be sorted out:
26
27 1) The interpreter explicitly contains a UI_OUT, and can insert itself
28 into the event loop, but it doesn't explicitly contain hooks for readline.
29 I did this because it seems to me many interpreters won't want to use
30 the readline command interface, and it is probably simpler to just let
31 them take over the input in their resume proc. */
32
33#include "defs.h"
34#include "gdbcmd.h"
35#include "ui-out.h"
36#include "event-loop.h"
37#include "event-top.h"
38#include "interps.h"
39#include "completer.h"
40#include "gdb_string.h"
4a8f6654
AC
41#include "gdb_assert.h"
42#include "top.h" /* For command_loop. */
c1043fc2 43#include "exceptions.h"
be34f849 44#include "continuations.h"
4a8f6654 45
b4a14fd0
PA
46/* True if the current interpreter in is async mode. See interps.h
47 for more details. This starts out disabled, until all the explicit
48 command line arguments (e.g., `gdb -ex "start" -ex "next"') are
49 processed. */
50int interpreter_async = 0;
51
4a8f6654
AC
52struct interp
53{
1777feb0 54 /* This is the name in "-i=" and set interpreter. */
4a8f6654
AC
55 const char *name;
56
57 /* Interpreters are stored in a linked list, this is the next
58 one... */
59 struct interp *next;
60
61 /* This is a cookie that an instance of the interpreter can use.
62 This is a bit confused right now as the exact initialization
63 sequence for it, and how it relates to the interpreter's uiout
64 object is a bit confused. */
65 void *data;
66
1777feb0 67 /* Has the init_proc been run? */
4a8f6654
AC
68 int inited;
69
4a8f6654
AC
70 const struct interp_procs *procs;
71 int quiet_p;
72};
73
1777feb0 74/* Functions local to this file. */
4a8f6654 75static void initialize_interps (void);
d8906c6f
TJB
76static char **interpreter_completer (struct cmd_list_element *cmd,
77 char *text, char *word);
4a8f6654 78
1777feb0 79/* The magic initialization routine for this module. */
4a8f6654
AC
80
81void _initialize_interpreter (void);
82
83/* Variables local to this file: */
84
85static struct interp *interp_list = NULL;
86static struct interp *current_interpreter = NULL;
eb18d289 87static struct interp *top_level_interpreter_ptr = NULL;
4a8f6654
AC
88
89static int interpreter_initialized = 0;
90
91/* interp_new - This allocates space for a new interpreter,
92 fills the fields from the inputs, and returns a pointer to the
1777feb0 93 interpreter. */
4a8f6654 94struct interp *
4801a9a3 95interp_new (const char *name, const struct interp_procs *procs)
4a8f6654
AC
96{
97 struct interp *new_interp;
98
99 new_interp = XMALLOC (struct interp);
100
101 new_interp->name = xstrdup (name);
4801a9a3 102 new_interp->data = NULL;
4a8f6654
AC
103 new_interp->quiet_p = 0;
104 new_interp->procs = procs;
105 new_interp->inited = 0;
106
107 return new_interp;
108}
109
110/* Add interpreter INTERP to the gdb interpreter list. The
111 interpreter must not have previously been added. */
112void
113interp_add (struct interp *interp)
114{
115 if (!interpreter_initialized)
116 initialize_interps ();
117
118 gdb_assert (interp_lookup (interp->name) == NULL);
119
120 interp->next = interp_list;
121 interp_list = interp;
122}
123
124/* This sets the current interpreter to be INTERP. If INTERP has not
125 been initialized, then this will also run the init proc. If the
126 init proc is successful, return 1, if it fails, set the old
127 interpreter back in place and return 0. If we can't restore the
128 old interpreter, then raise an internal error, since we are in
1777feb0 129 pretty bad shape at this point.
683f2885
VP
130
131 The TOP_LEVEL parameter tells if this new interpreter is
132 the top-level one. The top-level is what is requested
133 on the command line, and is responsible for reporting general
134 notification about target state changes. For example, if
135 MI is the top-level interpreter, then it will always report
136 events such as target stops and new thread creation, even if they
137 are caused by CLI commands. */
4a8f6654 138int
683f2885 139interp_set (struct interp *interp, int top_level)
4a8f6654
AC
140{
141 struct interp *old_interp = current_interpreter;
142 int first_time = 0;
4a8f6654
AC
143 char buffer[64];
144
683f2885
VP
145 /* If we already have an interpreter, then trying to
146 set top level interpreter is kinda pointless. */
147 gdb_assert (!top_level || !current_interpreter);
eb18d289 148 gdb_assert (!top_level || !top_level_interpreter_ptr);
683f2885 149
4a8f6654
AC
150 if (current_interpreter != NULL)
151 {
79a45e25 152 ui_out_flush (current_uiout);
4a8f6654
AC
153 if (current_interpreter->procs->suspend_proc
154 && !current_interpreter->procs->suspend_proc (current_interpreter->
155 data))
156 {
8a3fe4f8 157 error (_("Could not suspend interpreter \"%s\"."),
4a8f6654
AC
158 current_interpreter->name);
159 }
160 }
161 else
162 {
163 first_time = 1;
164 }
165
166 current_interpreter = interp;
683f2885 167 if (top_level)
eb18d289 168 top_level_interpreter_ptr = interp;
4a8f6654
AC
169
170 /* We use interpreter_p for the "set interpreter" variable, so we need
1777feb0 171 to make sure we have a malloc'ed copy for the set command to free. */
4a8f6654
AC
172 if (interpreter_p != NULL
173 && strcmp (current_interpreter->name, interpreter_p) != 0)
174 {
175 xfree (interpreter_p);
176
177 interpreter_p = xstrdup (current_interpreter->name);
178 }
179
1777feb0 180 /* Run the init proc. If it fails, try to restore the old interp. */
4a8f6654
AC
181
182 if (!interp->inited)
183 {
184 if (interp->procs->init_proc != NULL)
185 {
4801a9a3 186 interp->data = interp->procs->init_proc (interp, top_level);
4a8f6654
AC
187 }
188 interp->inited = 1;
189 }
190
4801a9a3
PA
191 /* Do this only after the interpreter is initialized. */
192 current_uiout = interp->procs->ui_out_proc (interp);
193
907d819a 194 /* Clear out any installed interpreter hooks/event handlers. */
4a8f6654
AC
195 clear_interpreter_hooks ();
196
197 if (interp->procs->resume_proc != NULL
198 && (!interp->procs->resume_proc (interp->data)))
199 {
683f2885 200 if (old_interp == NULL || !interp_set (old_interp, 0))
4a8f6654 201 internal_error (__FILE__, __LINE__,
e2e0b3e5 202 _("Failed to initialize new interp \"%s\" %s"),
4a8f6654
AC
203 interp->name, "and could not restore old interp!\n");
204 return 0;
205 }
206
207 /* Finally, put up the new prompt to show that we are indeed here.
208 Also, display_gdb_prompt for the console does some readline magic
1777feb0 209 which is needed for the console interpreter, at least... */
4a8f6654
AC
210
211 if (!first_time)
212 {
213 if (!interp_quiet_p (interp))
214 {
215 sprintf (buffer, "Switching to interpreter \"%.24s\".\n",
216 interp->name);
79a45e25 217 ui_out_text (current_uiout, buffer);
4a8f6654
AC
218 }
219 display_gdb_prompt (NULL);
220 }
221
222 return 1;
223}
224
225/* interp_lookup - Looks up the interpreter for NAME. If no such
226 interpreter exists, return NULL, otherwise return a pointer to the
227 interpreter. */
228struct interp *
229interp_lookup (const char *name)
230{
231 struct interp *interp;
232
233 if (name == NULL || strlen (name) == 0)
234 return NULL;
235
236 for (interp = interp_list; interp != NULL; interp = interp->next)
237 {
238 if (strcmp (interp->name, name) == 0)
239 return interp;
240 }
241
242 return NULL;
243}
244
1777feb0 245/* Returns the current interpreter. */
4a8f6654
AC
246
247struct ui_out *
248interp_ui_out (struct interp *interp)
249{
250 if (interp != NULL)
4801a9a3
PA
251 return interp->procs->ui_out_proc (interp);
252
253 return current_interpreter->procs->ui_out_proc (current_interpreter);
254}
255
256/* Returns the interpreter's cookie. */
4a8f6654 257
4801a9a3
PA
258void *
259interp_data (struct interp *interp)
260{
261 return interp->data;
262}
263
264/* Returns the interpreter's name. */
265
266const char *
267interp_name (struct interp *interp)
268{
269 return interp->name;
4a8f6654
AC
270}
271
1777feb0 272/* Returns true if the current interp is the passed in name. */
4a8f6654
AC
273int
274current_interp_named_p (const char *interp_name)
275{
276 if (current_interpreter)
277 return (strcmp (current_interpreter->name, interp_name) == 0);
278
279 return 0;
280}
281
282/* This is called in display_gdb_prompt. If the proc returns a zero
283 value, display_gdb_prompt will return without displaying the
284 prompt. */
285int
286current_interp_display_prompt_p (void)
287{
288 if (current_interpreter == NULL
289 || current_interpreter->procs->prompt_proc_p == NULL)
290 return 0;
291 else
292 return current_interpreter->procs->prompt_proc_p (current_interpreter->
293 data);
294}
295
296/* Run the current command interpreter's main loop. */
297void
298current_interp_command_loop (void)
299{
300 /* Somewhat messy. For the moment prop up all the old ways of
9a4105ab
AC
301 selecting the command loop. `deprecated_command_loop_hook'
302 should be deprecated. */
303 if (deprecated_command_loop_hook != NULL)
304 deprecated_command_loop_hook ();
4a8f6654
AC
305 else if (current_interpreter != NULL
306 && current_interpreter->procs->command_loop_proc != NULL)
307 current_interpreter->procs->command_loop_proc (current_interpreter->data);
308 else
362646f5 309 cli_command_loop ();
4a8f6654
AC
310}
311
312int
313interp_quiet_p (struct interp *interp)
314{
315 if (interp != NULL)
316 return interp->quiet_p;
317 else
318 return current_interpreter->quiet_p;
319}
320
b9362cc7 321static int
4a8f6654
AC
322interp_set_quiet (struct interp *interp, int quiet)
323{
324 int old_val = interp->quiet_p;
abbb1732 325
4a8f6654
AC
326 interp->quiet_p = quiet;
327 return old_val;
328}
329
330/* interp_exec - This executes COMMAND_STR in the current
1777feb0 331 interpreter. */
4a8f6654
AC
332int
333interp_exec_p (struct interp *interp)
334{
335 return interp->procs->exec_proc != NULL;
336}
337
71fff37b 338struct gdb_exception
4a8f6654
AC
339interp_exec (struct interp *interp, const char *command_str)
340{
341 if (interp->procs->exec_proc != NULL)
342 {
343 return interp->procs->exec_proc (interp->data, command_str);
344 }
c1043fc2 345 return exception_none;
4a8f6654
AC
346}
347
907d819a
MS
348/* A convenience routine that nulls out all the common command hooks.
349 Use it when removing your interpreter in its suspend proc. */
4a8f6654 350void
11308a41 351clear_interpreter_hooks (void)
4a8f6654 352{
9a4105ab
AC
353 deprecated_init_ui_hook = 0;
354 deprecated_print_frame_info_listing_hook = 0;
4a8f6654 355 /*print_frame_more_info_hook = 0; */
9a4105ab
AC
356 deprecated_query_hook = 0;
357 deprecated_warning_hook = 0;
9a4105ab 358 deprecated_interactive_hook = 0;
9a4105ab
AC
359 deprecated_readline_begin_hook = 0;
360 deprecated_readline_hook = 0;
361 deprecated_readline_end_hook = 0;
362 deprecated_register_changed_hook = 0;
9a4105ab
AC
363 deprecated_context_hook = 0;
364 deprecated_target_wait_hook = 0;
365 deprecated_call_command_hook = 0;
9a4105ab
AC
366 deprecated_error_begin_hook = 0;
367 deprecated_command_loop_hook = 0;
4a8f6654
AC
368}
369
907d819a
MS
370/* This is a lazy init routine, called the first time the interpreter
371 module is used. I put it here just in case, but I haven't thought
372 of a use for it yet. I will probably bag it soon, since I don't
373 think it will be necessary. */
4a8f6654
AC
374static void
375initialize_interps (void)
376{
377 interpreter_initialized = 1;
1777feb0 378 /* Don't know if anything needs to be done here... */
4a8f6654
AC
379}
380
b9362cc7 381static void
4a8f6654
AC
382interpreter_exec_cmd (char *args, int from_tty)
383{
384 struct interp *old_interp, *interp_to_use;
385 char **prules = NULL;
386 char **trule = NULL;
387 unsigned int nrules;
388 unsigned int i;
389 int old_quiet, use_quiet;
390
d1a41061
PP
391 if (args == NULL)
392 error_no_arg (_("interpreter-exec command"));
393
394 prules = gdb_buildargv (args);
395 make_cleanup_freeargv (prules);
4a8f6654
AC
396
397 nrules = 0;
d1a41061
PP
398 for (trule = prules; *trule != NULL; trule++)
399 nrules++;
4a8f6654
AC
400
401 if (nrules < 2)
8a3fe4f8 402 error (_("usage: interpreter-exec <interpreter> [ <command> ... ]"));
4a8f6654
AC
403
404 old_interp = current_interpreter;
405
406 interp_to_use = interp_lookup (prules[0]);
407 if (interp_to_use == NULL)
8a3fe4f8 408 error (_("Could not find interpreter \"%s\"."), prules[0]);
4a8f6654 409
1777feb0 410 /* Temporarily set interpreters quiet. */
4a8f6654
AC
411 old_quiet = interp_set_quiet (old_interp, 1);
412 use_quiet = interp_set_quiet (interp_to_use, 1);
413
683f2885 414 if (!interp_set (interp_to_use, 0))
8a3fe4f8 415 error (_("Could not switch to interpreter \"%s\"."), prules[0]);
4a8f6654
AC
416
417 for (i = 1; i < nrules; i++)
418 {
71fff37b 419 struct gdb_exception e = interp_exec (interp_to_use, prules[i]);
abbb1732 420
a7479e7e 421 if (e.reason < 0)
4a8f6654 422 {
683f2885 423 interp_set (old_interp, 0);
04d1f770
DJ
424 interp_set_quiet (interp_to_use, use_quiet);
425 interp_set_quiet (old_interp, old_quiet);
8a3fe4f8 426 error (_("error in command: \"%s\"."), prules[i]);
4a8f6654
AC
427 }
428 }
429
683f2885 430 interp_set (old_interp, 0);
4a8f6654
AC
431 interp_set_quiet (interp_to_use, use_quiet);
432 interp_set_quiet (old_interp, old_quiet);
433}
434
1777feb0 435/* List the possible interpreters which could complete the given text. */
4a8f6654 436static char **
d8906c6f 437interpreter_completer (struct cmd_list_element *ignore, char *text, char *word)
4a8f6654
AC
438{
439 int alloced = 0;
440 int textlen;
441 int num_matches;
442 char **matches;
443 struct interp *interp;
444
445 /* We expect only a very limited number of interpreters, so just
9af2a054 446 allocate room for all of them plus one for the last that must be NULL
1777feb0 447 to correctly end the list. */
4a8f6654
AC
448 for (interp = interp_list; interp != NULL; interp = interp->next)
449 ++alloced;
9af2a054 450 matches = (char **) xcalloc (alloced + 1, sizeof (char *));
4a8f6654
AC
451
452 num_matches = 0;
453 textlen = strlen (text);
454 for (interp = interp_list; interp != NULL; interp = interp->next)
455 {
456 if (strncmp (interp->name, text, textlen) == 0)
457 {
458 matches[num_matches] =
459 (char *) xmalloc (strlen (word) + strlen (interp->name) + 1);
460 if (word == text)
461 strcpy (matches[num_matches], interp->name);
462 else if (word > text)
463 {
1777feb0 464 /* Return some portion of interp->name. */
4a8f6654
AC
465 strcpy (matches[num_matches], interp->name + (word - text));
466 }
467 else
468 {
1777feb0 469 /* Return some of text plus interp->name. */
4a8f6654
AC
470 strncpy (matches[num_matches], word, text - word);
471 matches[num_matches][text - word] = '\0';
472 strcat (matches[num_matches], interp->name);
473 }
474 ++num_matches;
475 }
476 }
477
478 if (num_matches == 0)
479 {
480 xfree (matches);
481 matches = NULL;
482 }
4a8f6654
AC
483
484 return matches;
485}
486
eb18d289
NR
487struct interp *
488top_level_interpreter (void)
489{
490 return top_level_interpreter_ptr;
491}
492
493void *
683f2885
VP
494top_level_interpreter_data (void)
495{
eb18d289
NR
496 gdb_assert (top_level_interpreter_ptr);
497 return top_level_interpreter_ptr->data;
683f2885
VP
498}
499
4a8f6654
AC
500/* This just adds the "interpreter-exec" command. */
501void
502_initialize_interpreter (void)
503{
504 struct cmd_list_element *c;
505
506 c = add_cmd ("interpreter-exec", class_support,
1a966eab
AC
507 interpreter_exec_cmd, _("\
508Execute a command in an interpreter. It takes two arguments:\n\
4a8f6654 509The first argument is the name of the interpreter to use.\n\
1a966eab 510The second argument is the command to execute.\n"), &cmdlist);
4a8f6654
AC
511 set_cmd_completer (c, interpreter_completer);
512}
This page took 0.734865 seconds and 4 git commands to generate.