2011-08-04 Pedro Alves <pedro@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / cli / cli-script.c
1 /* GDB CLI command scripting.
2
3 Copyright (c) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008,
5 2009, 2010, 2011 Free Software Foundation, 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 #include "defs.h"
23 #include "value.h"
24 #include "language.h" /* For value_true */
25 #include <ctype.h>
26
27 #include "ui-out.h"
28 #include "gdb_string.h"
29 #include "exceptions.h"
30 #include "top.h"
31 #include "breakpoint.h"
32 #include "cli/cli-cmds.h"
33 #include "cli/cli-decode.h"
34 #include "cli/cli-script.h"
35 #include "gdb_assert.h"
36
37 #include "python/python.h"
38
39 /* Prototypes for local functions. */
40
41 static enum command_control_type
42 recurse_read_control_structure (char * (*read_next_line_func) (void),
43 struct command_line *current_cmd,
44 void (*validator)(char *, void *),
45 void *closure);
46
47 static char *insert_args (char *line);
48
49 static struct cleanup * setup_user_args (char *p);
50
51 static char *read_next_line (void);
52
53 /* Level of control structure when reading. */
54 static int control_level;
55
56 /* Level of control structure when executing. */
57 static int command_nest_depth = 1;
58
59 /* This is to prevent certain commands being printed twice. */
60 static int suppress_next_print_command_trace = 0;
61
62 /* Structure for arguments to user defined functions. */
63 #define MAXUSERARGS 10
64 struct user_args
65 {
66 struct user_args *next;
67 /* It is necessary to store a malloced copy of the command line to
68 ensure that the arguments are not overwritten before they are
69 used. */
70 char *command;
71 struct
72 {
73 char *arg;
74 int len;
75 }
76 a[MAXUSERARGS];
77 int count;
78 }
79 *user_args;
80
81 \f
82 /* Allocate, initialize a new command line structure for one of the
83 control commands (if/while). */
84
85 static struct command_line *
86 build_command_line (enum command_control_type type, char *args)
87 {
88 struct command_line *cmd;
89
90 if (args == NULL && (type == if_control || type == while_control))
91 error (_("if/while commands require arguments."));
92 gdb_assert (args != NULL);
93
94 cmd = (struct command_line *) xmalloc (sizeof (struct command_line));
95 cmd->next = NULL;
96 cmd->control_type = type;
97
98 cmd->body_count = 1;
99 cmd->body_list
100 = (struct command_line **) xmalloc (sizeof (struct command_line *)
101 * cmd->body_count);
102 memset (cmd->body_list, 0, sizeof (struct command_line *) * cmd->body_count);
103 cmd->line = xstrdup (args);
104
105 return cmd;
106 }
107
108 /* Build and return a new command structure for the control commands
109 such as "if" and "while". */
110
111 struct command_line *
112 get_command_line (enum command_control_type type, char *arg)
113 {
114 struct command_line *cmd;
115 struct cleanup *old_chain = NULL;
116
117 /* Allocate and build a new command line structure. */
118 cmd = build_command_line (type, arg);
119
120 old_chain = make_cleanup_free_command_lines (&cmd);
121
122 /* Read in the body of this command. */
123 if (recurse_read_control_structure (read_next_line, cmd, 0, 0)
124 == invalid_control)
125 {
126 warning (_("Error reading in canned sequence of commands."));
127 do_cleanups (old_chain);
128 return NULL;
129 }
130
131 discard_cleanups (old_chain);
132 return cmd;
133 }
134
135 /* Recursively print a command (including full control structures). */
136
137 void
138 print_command_lines (struct ui_out *uiout, struct command_line *cmd,
139 unsigned int depth)
140 {
141 struct command_line *list;
142
143 list = cmd;
144 while (list)
145 {
146 if (depth)
147 ui_out_spaces (uiout, 2 * depth);
148
149 /* A simple command, print it and continue. */
150 if (list->control_type == simple_control)
151 {
152 ui_out_field_string (uiout, NULL, list->line);
153 ui_out_text (uiout, "\n");
154 list = list->next;
155 continue;
156 }
157
158 /* loop_continue to jump to the start of a while loop, print it
159 and continue. */
160 if (list->control_type == continue_control)
161 {
162 ui_out_field_string (uiout, NULL, "loop_continue");
163 ui_out_text (uiout, "\n");
164 list = list->next;
165 continue;
166 }
167
168 /* loop_break to break out of a while loop, print it and
169 continue. */
170 if (list->control_type == break_control)
171 {
172 ui_out_field_string (uiout, NULL, "loop_break");
173 ui_out_text (uiout, "\n");
174 list = list->next;
175 continue;
176 }
177
178 /* A while command. Recursively print its subcommands and
179 continue. */
180 if (list->control_type == while_control
181 || list->control_type == while_stepping_control)
182 {
183 /* For while-stepping, the line includes the 'while-stepping'
184 token. See comment in process_next_line for explanation.
185 Here, take care not print 'while-stepping' twice. */
186 if (list->control_type == while_control)
187 ui_out_field_fmt (uiout, NULL, "while %s", list->line);
188 else
189 ui_out_field_string (uiout, NULL, list->line);
190 ui_out_text (uiout, "\n");
191 print_command_lines (uiout, *list->body_list, depth + 1);
192 if (depth)
193 ui_out_spaces (uiout, 2 * depth);
194 ui_out_field_string (uiout, NULL, "end");
195 ui_out_text (uiout, "\n");
196 list = list->next;
197 continue;
198 }
199
200 /* An if command. Recursively print both arms before
201 continueing. */
202 if (list->control_type == if_control)
203 {
204 ui_out_field_fmt (uiout, NULL, "if %s", list->line);
205 ui_out_text (uiout, "\n");
206 /* The true arm. */
207 print_command_lines (uiout, list->body_list[0], depth + 1);
208
209 /* Show the false arm if it exists. */
210 if (list->body_count == 2)
211 {
212 if (depth)
213 ui_out_spaces (uiout, 2 * depth);
214 ui_out_field_string (uiout, NULL, "else");
215 ui_out_text (uiout, "\n");
216 print_command_lines (uiout, list->body_list[1], depth + 1);
217 }
218
219 if (depth)
220 ui_out_spaces (uiout, 2 * depth);
221 ui_out_field_string (uiout, NULL, "end");
222 ui_out_text (uiout, "\n");
223 list = list->next;
224 continue;
225 }
226
227 /* A commands command. Print the breakpoint commands and
228 continue. */
229 if (list->control_type == commands_control)
230 {
231 if (*(list->line))
232 ui_out_field_fmt (uiout, NULL, "commands %s", list->line);
233 else
234 ui_out_field_string (uiout, NULL, "commands");
235 ui_out_text (uiout, "\n");
236 print_command_lines (uiout, *list->body_list, depth + 1);
237 if (depth)
238 ui_out_spaces (uiout, 2 * depth);
239 ui_out_field_string (uiout, NULL, "end");
240 ui_out_text (uiout, "\n");
241 list = list->next;
242 continue;
243 }
244
245 if (list->control_type == python_control)
246 {
247 ui_out_field_string (uiout, NULL, "python");
248 ui_out_text (uiout, "\n");
249 /* Don't indent python code at all. */
250 print_command_lines (uiout, *list->body_list, 0);
251 if (depth)
252 ui_out_spaces (uiout, 2 * depth);
253 ui_out_field_string (uiout, NULL, "end");
254 ui_out_text (uiout, "\n");
255 list = list->next;
256 continue;
257 }
258
259 /* Ignore illegal command type and try next. */
260 list = list->next;
261 } /* while (list) */
262 }
263
264 /* Handle pre-post hooks. */
265
266 static void
267 clear_hook_in_cleanup (void *data)
268 {
269 struct cmd_list_element *c = data;
270
271 c->hook_in = 0; /* Allow hook to work again once it is complete. */
272 }
273
274 void
275 execute_cmd_pre_hook (struct cmd_list_element *c)
276 {
277 if ((c->hook_pre) && (!c->hook_in))
278 {
279 struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
280 c->hook_in = 1; /* Prevent recursive hooking. */
281 execute_user_command (c->hook_pre, (char *) 0);
282 do_cleanups (cleanups);
283 }
284 }
285
286 void
287 execute_cmd_post_hook (struct cmd_list_element *c)
288 {
289 if ((c->hook_post) && (!c->hook_in))
290 {
291 struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
292
293 c->hook_in = 1; /* Prevent recursive hooking. */
294 execute_user_command (c->hook_post, (char *) 0);
295 do_cleanups (cleanups);
296 }
297 }
298
299 /* Execute the command in CMD. */
300 static void
301 do_restore_user_call_depth (void * call_depth)
302 {
303 int *depth = call_depth;
304
305 (*depth)--;
306 if ((*depth) == 0)
307 in_user_command = 0;
308 }
309
310
311 void
312 execute_user_command (struct cmd_list_element *c, char *args)
313 {
314 struct command_line *cmdlines;
315 struct cleanup *old_chain;
316 enum command_control_type ret;
317 static int user_call_depth = 0;
318 extern int max_user_call_depth;
319
320 cmdlines = c->user_commands;
321 if (cmdlines == 0)
322 /* Null command */
323 return;
324
325 old_chain = setup_user_args (args);
326
327 if (++user_call_depth > max_user_call_depth)
328 error (_("Max user call depth exceeded -- command aborted."));
329
330 make_cleanup (do_restore_user_call_depth, &user_call_depth);
331
332 /* Set the instream to 0, indicating execution of a
333 user-defined function. */
334 make_cleanup (do_restore_instream_cleanup, instream);
335 instream = (FILE *) 0;
336
337 /* Also set the global in_user_command, so that NULL instream is
338 not confused with Insight. */
339 in_user_command = 1;
340
341 command_nest_depth++;
342 while (cmdlines)
343 {
344 ret = execute_control_command (cmdlines);
345 if (ret != simple_control && ret != break_control)
346 {
347 warning (_("Error executing canned sequence of commands."));
348 break;
349 }
350 cmdlines = cmdlines->next;
351 }
352 command_nest_depth--;
353 do_cleanups (old_chain);
354 }
355
356 /* This function is called every time GDB prints a prompt. It ensures
357 that errors and the like do not confuse the command tracing. */
358
359 void
360 reset_command_nest_depth (void)
361 {
362 command_nest_depth = 1;
363
364 /* Just in case. */
365 suppress_next_print_command_trace = 0;
366 }
367
368 /* Print the command, prefixed with '+' to represent the call depth.
369 This is slightly complicated because this function may be called
370 from execute_command and execute_control_command. Unfortunately
371 execute_command also prints the top level control commands.
372 In these cases execute_command will call execute_control_command
373 via while_command or if_command. Inner levels of 'if' and 'while'
374 are dealt with directly. Therefore we can use these functions
375 to determine whether the command has been printed already or not. */
376 void
377 print_command_trace (const char *cmd)
378 {
379 int i;
380
381 if (suppress_next_print_command_trace)
382 {
383 suppress_next_print_command_trace = 0;
384 return;
385 }
386
387 if (!source_verbose && !trace_commands)
388 return;
389
390 for (i=0; i < command_nest_depth; i++)
391 printf_filtered ("+");
392
393 printf_filtered ("%s\n", cmd);
394 }
395
396 enum command_control_type
397 execute_control_command (struct command_line *cmd)
398 {
399 struct expression *expr;
400 struct command_line *current;
401 struct cleanup *old_chain = make_cleanup (null_cleanup, 0);
402 struct value *val;
403 struct value *val_mark;
404 int loop;
405 enum command_control_type ret;
406 char *new_line;
407
408 /* Start by assuming failure, if a problem is detected, the code
409 below will simply "break" out of the switch. */
410 ret = invalid_control;
411
412 switch (cmd->control_type)
413 {
414 case simple_control:
415 /* A simple command, execute it and return. */
416 new_line = insert_args (cmd->line);
417 if (!new_line)
418 break;
419 make_cleanup (free_current_contents, &new_line);
420 execute_command (new_line, 0);
421 ret = cmd->control_type;
422 break;
423
424 case continue_control:
425 print_command_trace ("loop_continue");
426
427 /* Return for "continue", and "break" so we can either
428 continue the loop at the top, or break out. */
429 ret = cmd->control_type;
430 break;
431
432 case break_control:
433 print_command_trace ("loop_break");
434
435 /* Return for "continue", and "break" so we can either
436 continue the loop at the top, or break out. */
437 ret = cmd->control_type;
438 break;
439
440 case while_control:
441 {
442 char *buffer = alloca (strlen (cmd->line) + 7);
443
444 sprintf (buffer, "while %s", cmd->line);
445 print_command_trace (buffer);
446
447 /* Parse the loop control expression for the while statement. */
448 new_line = insert_args (cmd->line);
449 if (!new_line)
450 break;
451 make_cleanup (free_current_contents, &new_line);
452 expr = parse_expression (new_line);
453 make_cleanup (free_current_contents, &expr);
454
455 ret = simple_control;
456 loop = 1;
457
458 /* Keep iterating so long as the expression is true. */
459 while (loop == 1)
460 {
461 int cond_result;
462
463 QUIT;
464
465 /* Evaluate the expression. */
466 val_mark = value_mark ();
467 val = evaluate_expression (expr);
468 cond_result = value_true (val);
469 value_free_to_mark (val_mark);
470
471 /* If the value is false, then break out of the loop. */
472 if (!cond_result)
473 break;
474
475 /* Execute the body of the while statement. */
476 current = *cmd->body_list;
477 while (current)
478 {
479 command_nest_depth++;
480 ret = execute_control_command (current);
481 command_nest_depth--;
482
483 /* If we got an error, or a "break" command, then stop
484 looping. */
485 if (ret == invalid_control || ret == break_control)
486 {
487 loop = 0;
488 break;
489 }
490
491 /* If we got a "continue" command, then restart the loop
492 at this point. */
493 if (ret == continue_control)
494 break;
495
496 /* Get the next statement. */
497 current = current->next;
498 }
499 }
500
501 /* Reset RET so that we don't recurse the break all the way down. */
502 if (ret == break_control)
503 ret = simple_control;
504
505 break;
506 }
507
508 case if_control:
509 {
510 char *buffer = alloca (strlen (cmd->line) + 4);
511
512 sprintf (buffer, "if %s", cmd->line);
513 print_command_trace (buffer);
514
515 new_line = insert_args (cmd->line);
516 if (!new_line)
517 break;
518 make_cleanup (free_current_contents, &new_line);
519 /* Parse the conditional for the if statement. */
520 expr = parse_expression (new_line);
521 make_cleanup (free_current_contents, &expr);
522
523 current = NULL;
524 ret = simple_control;
525
526 /* Evaluate the conditional. */
527 val_mark = value_mark ();
528 val = evaluate_expression (expr);
529
530 /* Choose which arm to take commands from based on the value
531 of the conditional expression. */
532 if (value_true (val))
533 current = *cmd->body_list;
534 else if (cmd->body_count == 2)
535 current = *(cmd->body_list + 1);
536 value_free_to_mark (val_mark);
537
538 /* Execute commands in the given arm. */
539 while (current)
540 {
541 command_nest_depth++;
542 ret = execute_control_command (current);
543 command_nest_depth--;
544
545 /* If we got an error, get out. */
546 if (ret != simple_control)
547 break;
548
549 /* Get the next statement in the body. */
550 current = current->next;
551 }
552
553 break;
554 }
555 case commands_control:
556 {
557 /* Breakpoint commands list, record the commands in the
558 breakpoint's command list and return. */
559 new_line = insert_args (cmd->line);
560 if (!new_line)
561 break;
562 make_cleanup (free_current_contents, &new_line);
563 ret = commands_from_control_command (new_line, cmd);
564 break;
565 }
566 case python_control:
567 {
568 eval_python_from_control_command (cmd);
569 ret = simple_control;
570 break;
571 }
572
573 default:
574 warning (_("Invalid control type in canned commands structure."));
575 break;
576 }
577
578 do_cleanups (old_chain);
579
580 return ret;
581 }
582
583 /* Like execute_control_command, but first set
584 suppress_next_print_command_trace. */
585
586 enum command_control_type
587 execute_control_command_untraced (struct command_line *cmd)
588 {
589 suppress_next_print_command_trace = 1;
590 return execute_control_command (cmd);
591 }
592
593
594 /* "while" command support. Executes a body of statements while the
595 loop condition is nonzero. */
596
597 void
598 while_command (char *arg, int from_tty)
599 {
600 struct command_line *command = NULL;
601
602 control_level = 1;
603 command = get_command_line (while_control, arg);
604
605 if (command == NULL)
606 return;
607
608 execute_control_command_untraced (command);
609 free_command_lines (&command);
610 }
611
612 /* "if" command support. Execute either the true or false arm depending
613 on the value of the if conditional. */
614
615 void
616 if_command (char *arg, int from_tty)
617 {
618 struct command_line *command = NULL;
619
620 control_level = 1;
621 command = get_command_line (if_control, arg);
622
623 if (command == NULL)
624 return;
625
626 execute_control_command_untraced (command);
627 free_command_lines (&command);
628 }
629
630 /* Cleanup */
631 static void
632 arg_cleanup (void *ignore)
633 {
634 struct user_args *oargs = user_args;
635
636 if (!user_args)
637 internal_error (__FILE__, __LINE__,
638 _("arg_cleanup called with no user args.\n"));
639
640 user_args = user_args->next;
641 xfree (oargs->command);
642 xfree (oargs);
643 }
644
645 /* Bind the incomming arguments for a user defined command to
646 $arg0, $arg1 ... $argMAXUSERARGS. */
647
648 static struct cleanup *
649 setup_user_args (char *p)
650 {
651 struct user_args *args;
652 struct cleanup *old_chain;
653 unsigned int arg_count = 0;
654
655 args = (struct user_args *) xmalloc (sizeof (struct user_args));
656 memset (args, 0, sizeof (struct user_args));
657
658 args->next = user_args;
659 user_args = args;
660
661 old_chain = make_cleanup (arg_cleanup, 0/*ignored*/);
662
663 if (p == NULL)
664 return old_chain;
665
666 user_args->command = p = xstrdup (p);
667
668 while (*p)
669 {
670 char *start_arg;
671 int squote = 0;
672 int dquote = 0;
673 int bsquote = 0;
674
675 if (arg_count >= MAXUSERARGS)
676 {
677 error (_("user defined function may only have %d arguments."),
678 MAXUSERARGS);
679 return old_chain;
680 }
681
682 /* Strip whitespace. */
683 while (*p == ' ' || *p == '\t')
684 p++;
685
686 /* P now points to an argument. */
687 start_arg = p;
688 user_args->a[arg_count].arg = p;
689
690 /* Get to the end of this argument. */
691 while (*p)
692 {
693 if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
694 break;
695 else
696 {
697 if (bsquote)
698 bsquote = 0;
699 else if (*p == '\\')
700 bsquote = 1;
701 else if (squote)
702 {
703 if (*p == '\'')
704 squote = 0;
705 }
706 else if (dquote)
707 {
708 if (*p == '"')
709 dquote = 0;
710 }
711 else
712 {
713 if (*p == '\'')
714 squote = 1;
715 else if (*p == '"')
716 dquote = 1;
717 }
718 p++;
719 }
720 }
721
722 user_args->a[arg_count].len = p - start_arg;
723 arg_count++;
724 user_args->count++;
725 }
726 return old_chain;
727 }
728
729 /* Given character string P, return a point to the first argument
730 ($arg), or NULL if P contains no arguments. */
731
732 static char *
733 locate_arg (char *p)
734 {
735 while ((p = strchr (p, '$')))
736 {
737 if (strncmp (p, "$arg", 4) == 0
738 && (isdigit (p[4]) || p[4] == 'c'))
739 return p;
740 p++;
741 }
742 return NULL;
743 }
744
745 /* Insert the user defined arguments stored in user_arg into the $arg
746 arguments found in line, with the updated copy being placed into
747 nline. */
748
749 static char *
750 insert_args (char *line)
751 {
752 char *p, *save_line, *new_line;
753 unsigned len, i;
754
755 /* If we are not in a user-defined function, treat $argc, $arg0, et
756 cetera as normal convenience variables. */
757 if (user_args == NULL)
758 return xstrdup (line);
759
760 /* First we need to know how much memory to allocate for the new
761 line. */
762 save_line = line;
763 len = 0;
764 while ((p = locate_arg (line)))
765 {
766 len += p - line;
767 i = p[4] - '0';
768
769 if (p[4] == 'c')
770 {
771 /* $argc. Number will be <=10. */
772 len += user_args->count == 10 ? 2 : 1;
773 }
774 else if (i >= user_args->count)
775 {
776 error (_("Missing argument %d in user function."), i);
777 return NULL;
778 }
779 else
780 {
781 len += user_args->a[i].len;
782 }
783 line = p + 5;
784 }
785
786 /* Don't forget the tail. */
787 len += strlen (line);
788
789 /* Allocate space for the new line and fill it in. */
790 new_line = (char *) xmalloc (len + 1);
791 if (new_line == NULL)
792 return NULL;
793
794 /* Restore pointer to beginning of old line. */
795 line = save_line;
796
797 /* Save pointer to beginning of new line. */
798 save_line = new_line;
799
800 while ((p = locate_arg (line)))
801 {
802 int i, len;
803
804 memcpy (new_line, line, p - line);
805 new_line += p - line;
806
807 if (p[4] == 'c')
808 {
809 gdb_assert (user_args->count >= 0 && user_args->count <= 10);
810 if (user_args->count == 10)
811 {
812 *(new_line++) = '1';
813 *(new_line++) = '0';
814 }
815 else
816 *(new_line++) = user_args->count + '0';
817 }
818 else
819 {
820 i = p[4] - '0';
821 len = user_args->a[i].len;
822 if (len)
823 {
824 memcpy (new_line, user_args->a[i].arg, len);
825 new_line += len;
826 }
827 }
828 line = p + 5;
829 }
830 /* Don't forget the tail. */
831 strcpy (new_line, line);
832
833 /* Return a pointer to the beginning of the new line. */
834 return save_line;
835 }
836
837 \f
838 /* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
839 code bodies. This is typically used when we encounter an "else"
840 clause for an "if" command. */
841
842 static void
843 realloc_body_list (struct command_line *command, int new_length)
844 {
845 int n;
846 struct command_line **body_list;
847
848 n = command->body_count;
849
850 /* Nothing to do? */
851 if (new_length <= n)
852 return;
853
854 body_list = (struct command_line **)
855 xmalloc (sizeof (struct command_line *) * new_length);
856
857 memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
858 memset (body_list + n, 0, sizeof (struct command_line *) * (new_length - n));
859
860 xfree (command->body_list);
861 command->body_list = body_list;
862 command->body_count = new_length;
863 }
864
865 /* Read next line from stdout. Passed to read_command_line_1 and
866 recurse_read_control_structure whenever we need to read commands
867 from stdout. */
868
869 static char *
870 read_next_line (void)
871 {
872 char *prompt_ptr, control_prompt[256];
873 int i = 0;
874
875 if (control_level >= 254)
876 error (_("Control nesting too deep!"));
877
878 /* Set a prompt based on the nesting of the control commands. */
879 if (instream == stdin || (instream == 0 && deprecated_readline_hook != NULL))
880 {
881 for (i = 0; i < control_level; i++)
882 control_prompt[i] = ' ';
883 control_prompt[i] = '>';
884 control_prompt[i + 1] = '\0';
885 prompt_ptr = (char *) &control_prompt[0];
886 }
887 else
888 prompt_ptr = NULL;
889
890 return command_line_input (prompt_ptr, instream == stdin, "commands");
891 }
892
893 /* Process one input line. If the command is an "end", return such an
894 indication to the caller. If PARSE_COMMANDS is true, strip leading
895 whitespace (trailing whitespace is always stripped) in the line,
896 attempt to recognize GDB control commands, and also return an
897 indication if the command is an "else" or a nop.
898
899 Otherwise, only "end" is recognized. */
900
901 static enum misc_command_type
902 process_next_line (char *p, struct command_line **command, int parse_commands,
903 void (*validator)(char *, void *), void *closure)
904 {
905 char *p_end;
906 char *p_start;
907 int not_handled = 0;
908
909 /* Not sure what to do here. */
910 if (p == NULL)
911 return end_command;
912
913 /* Strip trailing whitespace. */
914 p_end = p + strlen (p);
915 while (p_end > p && (p_end[-1] == ' ' || p_end[-1] == '\t'))
916 p_end--;
917
918 p_start = p;
919 /* Strip leading whitespace. */
920 while (p_start < p_end && (*p_start == ' ' || *p_start == '\t'))
921 p_start++;
922
923 /* 'end' is always recognized, regardless of parse_commands value.
924 We also permit whitespace before end and after. */
925 if (p_end - p_start == 3 && !strncmp (p_start, "end", 3))
926 return end_command;
927
928 if (parse_commands)
929 {
930 /* If commands are parsed, we skip initial spaces. Otherwise,
931 which is the case for Python commands and documentation
932 (see the 'document' command), spaces are preserved. */
933 p = p_start;
934
935 /* Blanks and comments don't really do anything, but we need to
936 distinguish them from else, end and other commands which can
937 be executed. */
938 if (p_end == p || p[0] == '#')
939 return nop_command;
940
941 /* Is the else clause of an if control structure? */
942 if (p_end - p == 4 && !strncmp (p, "else", 4))
943 return else_command;
944
945 /* Check for while, if, break, continue, etc and build a new
946 command line structure for them. */
947 if ((p_end - p >= 14 && !strncmp (p, "while-stepping", 14))
948 || (p_end - p >= 8 && !strncmp (p, "stepping", 8))
949 || (p_end - p >= 2 && !strncmp (p, "ws", 2)))
950 {
951 /* Because validate_actionline and encode_action lookup
952 command's line as command, we need the line to
953 include 'while-stepping'.
954
955 For 'ws' alias, the command will have 'ws', not expanded
956 to 'while-stepping'. This is intentional -- we don't
957 really want frontend to send a command list with 'ws',
958 and next break-info returning command line with
959 'while-stepping'. This should work, but might cause the
960 breakpoint to be marked as changed while it's actually
961 not. */
962 *command = build_command_line (while_stepping_control, p);
963 }
964 else if (p_end - p > 5 && !strncmp (p, "while", 5))
965 {
966 char *first_arg;
967
968 first_arg = p + 5;
969 while (first_arg < p_end && isspace (*first_arg))
970 first_arg++;
971 *command = build_command_line (while_control, first_arg);
972 }
973 else if (p_end - p > 2 && !strncmp (p, "if", 2))
974 {
975 char *first_arg;
976
977 first_arg = p + 2;
978 while (first_arg < p_end && isspace (*first_arg))
979 first_arg++;
980 *command = build_command_line (if_control, first_arg);
981 }
982 else if (p_end - p >= 8 && !strncmp (p, "commands", 8))
983 {
984 char *first_arg;
985
986 first_arg = p + 8;
987 while (first_arg < p_end && isspace (*first_arg))
988 first_arg++;
989 *command = build_command_line (commands_control, first_arg);
990 }
991 else if (p_end - p == 6 && !strncmp (p, "python", 6))
992 {
993 /* Note that we ignore the inline "python command" form
994 here. */
995 *command = build_command_line (python_control, "");
996 }
997 else if (p_end - p == 10 && !strncmp (p, "loop_break", 10))
998 {
999 *command = (struct command_line *)
1000 xmalloc (sizeof (struct command_line));
1001 (*command)->next = NULL;
1002 (*command)->line = NULL;
1003 (*command)->control_type = break_control;
1004 (*command)->body_count = 0;
1005 (*command)->body_list = NULL;
1006 }
1007 else if (p_end - p == 13 && !strncmp (p, "loop_continue", 13))
1008 {
1009 *command = (struct command_line *)
1010 xmalloc (sizeof (struct command_line));
1011 (*command)->next = NULL;
1012 (*command)->line = NULL;
1013 (*command)->control_type = continue_control;
1014 (*command)->body_count = 0;
1015 (*command)->body_list = NULL;
1016 }
1017 else
1018 not_handled = 1;
1019 }
1020
1021 if (!parse_commands || not_handled)
1022 {
1023 /* A normal command. */
1024 *command = (struct command_line *)
1025 xmalloc (sizeof (struct command_line));
1026 (*command)->next = NULL;
1027 (*command)->line = savestring (p, p_end - p);
1028 (*command)->control_type = simple_control;
1029 (*command)->body_count = 0;
1030 (*command)->body_list = NULL;
1031 }
1032
1033 if (validator)
1034 {
1035 volatile struct gdb_exception ex;
1036
1037 TRY_CATCH (ex, RETURN_MASK_ALL)
1038 {
1039 validator ((*command)->line, closure);
1040 }
1041 if (ex.reason < 0)
1042 {
1043 xfree (*command);
1044 throw_exception (ex);
1045 }
1046 }
1047
1048 /* Nothing special. */
1049 return ok_command;
1050 }
1051
1052 /* Recursively read in the control structures and create a
1053 command_line structure from them. Use read_next_line_func to
1054 obtain lines of the command. */
1055
1056 static enum command_control_type
1057 recurse_read_control_structure (char * (*read_next_line_func) (void),
1058 struct command_line *current_cmd,
1059 void (*validator)(char *, void *),
1060 void *closure)
1061 {
1062 int current_body, i;
1063 enum misc_command_type val;
1064 enum command_control_type ret;
1065 struct command_line **body_ptr, *child_tail, *next;
1066
1067 child_tail = NULL;
1068 current_body = 1;
1069
1070 /* Sanity checks. */
1071 if (current_cmd->control_type == simple_control)
1072 error (_("Recursed on a simple control type."));
1073
1074 if (current_body > current_cmd->body_count)
1075 error (_("Allocated body is smaller than this command type needs."));
1076
1077 /* Read lines from the input stream and build control structures. */
1078 while (1)
1079 {
1080 dont_repeat ();
1081
1082 next = NULL;
1083 val = process_next_line (read_next_line_func (), &next,
1084 current_cmd->control_type != python_control,
1085 validator, closure);
1086
1087 /* Just skip blanks and comments. */
1088 if (val == nop_command)
1089 continue;
1090
1091 if (val == end_command)
1092 {
1093 if (current_cmd->control_type == while_control
1094 || current_cmd->control_type == while_stepping_control
1095 || current_cmd->control_type == if_control
1096 || current_cmd->control_type == python_control
1097 || current_cmd->control_type == commands_control)
1098 {
1099 /* Success reading an entire canned sequence of commands. */
1100 ret = simple_control;
1101 break;
1102 }
1103 else
1104 {
1105 ret = invalid_control;
1106 break;
1107 }
1108 }
1109
1110 /* Not the end of a control structure. */
1111 if (val == else_command)
1112 {
1113 if (current_cmd->control_type == if_control
1114 && current_body == 1)
1115 {
1116 realloc_body_list (current_cmd, 2);
1117 current_body = 2;
1118 child_tail = NULL;
1119 continue;
1120 }
1121 else
1122 {
1123 ret = invalid_control;
1124 break;
1125 }
1126 }
1127
1128 if (child_tail)
1129 {
1130 child_tail->next = next;
1131 }
1132 else
1133 {
1134 body_ptr = current_cmd->body_list;
1135 for (i = 1; i < current_body; i++)
1136 body_ptr++;
1137
1138 *body_ptr = next;
1139
1140 }
1141
1142 child_tail = next;
1143
1144 /* If the latest line is another control structure, then recurse
1145 on it. */
1146 if (next->control_type == while_control
1147 || next->control_type == while_stepping_control
1148 || next->control_type == if_control
1149 || next->control_type == python_control
1150 || next->control_type == commands_control)
1151 {
1152 control_level++;
1153 ret = recurse_read_control_structure (read_next_line_func, next,
1154 validator, closure);
1155 control_level--;
1156
1157 if (ret != simple_control)
1158 break;
1159 }
1160 }
1161
1162 dont_repeat ();
1163
1164 return ret;
1165 }
1166
1167 /* Read lines from the input stream and accumulate them in a chain of
1168 struct command_line's, which is then returned. For input from a
1169 terminal, the special command "end" is used to mark the end of the
1170 input, and is not included in the returned chain of commands.
1171
1172 If PARSE_COMMANDS is true, strip leading whitespace (trailing whitespace
1173 is always stripped) in the line and attempt to recognize GDB control
1174 commands. Otherwise, only "end" is recognized. */
1175
1176 #define END_MESSAGE "End with a line saying just \"end\"."
1177
1178 struct command_line *
1179 read_command_lines (char *prompt_arg, int from_tty, int parse_commands,
1180 void (*validator)(char *, void *), void *closure)
1181 {
1182 struct command_line *head;
1183
1184 if (from_tty && input_from_terminal_p ())
1185 {
1186 if (deprecated_readline_begin_hook)
1187 {
1188 /* Note - intentional to merge messages with no newline. */
1189 (*deprecated_readline_begin_hook) ("%s %s\n", prompt_arg,
1190 END_MESSAGE);
1191 }
1192 else
1193 {
1194 printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
1195 gdb_flush (gdb_stdout);
1196 }
1197 }
1198
1199 head = read_command_lines_1 (read_next_line, parse_commands,
1200 validator, closure);
1201
1202 if (deprecated_readline_end_hook && from_tty && input_from_terminal_p ())
1203 {
1204 (*deprecated_readline_end_hook) ();
1205 }
1206 return (head);
1207 }
1208
1209 /* Act the same way as read_command_lines, except that each new line is
1210 obtained using READ_NEXT_LINE_FUNC. */
1211
1212 struct command_line *
1213 read_command_lines_1 (char * (*read_next_line_func) (void), int parse_commands,
1214 void (*validator)(char *, void *), void *closure)
1215 {
1216 struct command_line *head, *tail, *next;
1217 struct cleanup *old_chain;
1218 enum command_control_type ret;
1219 enum misc_command_type val;
1220
1221 control_level = 0;
1222 head = tail = NULL;
1223 old_chain = NULL;
1224
1225 while (1)
1226 {
1227 dont_repeat ();
1228 val = process_next_line (read_next_line_func (), &next, parse_commands,
1229 validator, closure);
1230
1231 /* Ignore blank lines or comments. */
1232 if (val == nop_command)
1233 continue;
1234
1235 if (val == end_command)
1236 {
1237 ret = simple_control;
1238 break;
1239 }
1240
1241 if (val != ok_command)
1242 {
1243 ret = invalid_control;
1244 break;
1245 }
1246
1247 if (next->control_type == while_control
1248 || next->control_type == if_control
1249 || next->control_type == python_control
1250 || next->control_type == commands_control
1251 || next->control_type == while_stepping_control)
1252 {
1253 control_level++;
1254 ret = recurse_read_control_structure (read_next_line_func, next,
1255 validator, closure);
1256 control_level--;
1257
1258 if (ret == invalid_control)
1259 break;
1260 }
1261
1262 if (tail)
1263 {
1264 tail->next = next;
1265 }
1266 else
1267 {
1268 head = next;
1269 old_chain = make_cleanup_free_command_lines (&head);
1270 }
1271 tail = next;
1272 }
1273
1274 dont_repeat ();
1275
1276 if (head)
1277 {
1278 if (ret != invalid_control)
1279 {
1280 discard_cleanups (old_chain);
1281 }
1282 else
1283 do_cleanups (old_chain);
1284 }
1285
1286 return head;
1287 }
1288
1289 /* Free a chain of struct command_line's. */
1290
1291 void
1292 free_command_lines (struct command_line **lptr)
1293 {
1294 struct command_line *l = *lptr;
1295 struct command_line *next;
1296 struct command_line **blist;
1297 int i;
1298
1299 while (l)
1300 {
1301 if (l->body_count > 0)
1302 {
1303 blist = l->body_list;
1304 for (i = 0; i < l->body_count; i++, blist++)
1305 free_command_lines (blist);
1306 }
1307 next = l->next;
1308 xfree (l->line);
1309 xfree (l);
1310 l = next;
1311 }
1312 *lptr = NULL;
1313 }
1314
1315 static void
1316 do_free_command_lines_cleanup (void *arg)
1317 {
1318 free_command_lines (arg);
1319 }
1320
1321 struct cleanup *
1322 make_cleanup_free_command_lines (struct command_line **arg)
1323 {
1324 return make_cleanup (do_free_command_lines_cleanup, arg);
1325 }
1326
1327 struct command_line *
1328 copy_command_lines (struct command_line *cmds)
1329 {
1330 struct command_line *result = NULL;
1331
1332 if (cmds)
1333 {
1334 result = (struct command_line *) xmalloc (sizeof (struct command_line));
1335
1336 result->next = copy_command_lines (cmds->next);
1337 result->line = xstrdup (cmds->line);
1338 result->control_type = cmds->control_type;
1339 result->body_count = cmds->body_count;
1340 if (cmds->body_count > 0)
1341 {
1342 int i;
1343
1344 result->body_list = (struct command_line **)
1345 xmalloc (sizeof (struct command_line *) * cmds->body_count);
1346
1347 for (i = 0; i < cmds->body_count; i++)
1348 result->body_list[i] = copy_command_lines (cmds->body_list[i]);
1349 }
1350 else
1351 result->body_list = NULL;
1352 }
1353
1354 return result;
1355 }
1356 \f
1357 /* Validate that *COMNAME is a valid name for a command. Return the
1358 containing command list, in case it starts with a prefix command.
1359 The prefix must already exist. *COMNAME is advanced to point after
1360 any prefix, and a NUL character overwrites the space after the
1361 prefix. */
1362
1363 static struct cmd_list_element **
1364 validate_comname (char **comname)
1365 {
1366 struct cmd_list_element **list = &cmdlist;
1367 char *p, *last_word;
1368
1369 if (*comname == 0)
1370 error_no_arg (_("name of command to define"));
1371
1372 /* Find the last word of the argument. */
1373 p = *comname + strlen (*comname);
1374 while (p > *comname && isspace (p[-1]))
1375 p--;
1376 while (p > *comname && !isspace (p[-1]))
1377 p--;
1378 last_word = p;
1379
1380 /* Find the corresponding command list. */
1381 if (last_word != *comname)
1382 {
1383 struct cmd_list_element *c;
1384 char saved_char, *tem = *comname;
1385
1386 /* Separate the prefix and the command. */
1387 saved_char = last_word[-1];
1388 last_word[-1] = '\0';
1389
1390 c = lookup_cmd (&tem, cmdlist, "", 0, 1);
1391 if (c->prefixlist == NULL)
1392 error (_("\"%s\" is not a prefix command."), *comname);
1393
1394 list = c->prefixlist;
1395 last_word[-1] = saved_char;
1396 *comname = last_word;
1397 }
1398
1399 p = *comname;
1400 while (*p)
1401 {
1402 if (!isalnum (*p) && *p != '-' && *p != '_')
1403 error (_("Junk in argument list: \"%s\""), p);
1404 p++;
1405 }
1406
1407 return list;
1408 }
1409
1410 /* This is just a placeholder in the command data structures. */
1411 static void
1412 user_defined_command (char *ignore, int from_tty)
1413 {
1414 }
1415
1416 void
1417 define_command (char *comname, int from_tty)
1418 {
1419 #define MAX_TMPBUF 128
1420 enum cmd_hook_type
1421 {
1422 CMD_NO_HOOK = 0,
1423 CMD_PRE_HOOK,
1424 CMD_POST_HOOK
1425 };
1426 struct command_line *cmds;
1427 struct cmd_list_element *c, *newc, *hookc = 0, **list;
1428 char *tem, *comfull;
1429 char tmpbuf[MAX_TMPBUF];
1430 int hook_type = CMD_NO_HOOK;
1431 int hook_name_size = 0;
1432
1433 #define HOOK_STRING "hook-"
1434 #define HOOK_LEN 5
1435 #define HOOK_POST_STRING "hookpost-"
1436 #define HOOK_POST_LEN 9
1437
1438 comfull = comname;
1439 list = validate_comname (&comname);
1440
1441 /* Look it up, and verify that we got an exact match. */
1442 tem = comname;
1443 c = lookup_cmd (&tem, *list, "", -1, 1);
1444 if (c && strcmp (comname, c->name) != 0)
1445 c = 0;
1446
1447 if (c)
1448 {
1449 int q;
1450
1451 if (c->class == class_user || c->class == class_alias)
1452 q = query (_("Redefine command \"%s\"? "), c->name);
1453 else
1454 q = query (_("Really redefine built-in command \"%s\"? "), c->name);
1455 if (!q)
1456 error (_("Command \"%s\" not redefined."), c->name);
1457 }
1458
1459 /* If this new command is a hook, then mark the command which it
1460 is hooking. Note that we allow hooking `help' commands, so that
1461 we can hook the `stop' pseudo-command. */
1462
1463 if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
1464 {
1465 hook_type = CMD_PRE_HOOK;
1466 hook_name_size = HOOK_LEN;
1467 }
1468 else if (!strncmp (comname, HOOK_POST_STRING, HOOK_POST_LEN))
1469 {
1470 hook_type = CMD_POST_HOOK;
1471 hook_name_size = HOOK_POST_LEN;
1472 }
1473
1474 if (hook_type != CMD_NO_HOOK)
1475 {
1476 /* Look up cmd it hooks, and verify that we got an exact match. */
1477 tem = comname + hook_name_size;
1478 hookc = lookup_cmd (&tem, *list, "", -1, 0);
1479 if (hookc && strcmp (comname + hook_name_size, hookc->name) != 0)
1480 hookc = 0;
1481 if (!hookc)
1482 {
1483 warning (_("Your new `%s' command does not "
1484 "hook any existing command."),
1485 comfull);
1486 if (!query (_("Proceed? ")))
1487 error (_("Not confirmed."));
1488 }
1489 }
1490
1491 comname = xstrdup (comname);
1492
1493 /* If the rest of the commands will be case insensitive, this one
1494 should behave in the same manner. */
1495 for (tem = comname; *tem; tem++)
1496 if (isupper (*tem))
1497 *tem = tolower (*tem);
1498
1499 sprintf (tmpbuf, "Type commands for definition of \"%s\".", comfull);
1500 cmds = read_command_lines (tmpbuf, from_tty, 1, 0, 0);
1501
1502 if (c && c->class == class_user)
1503 free_command_lines (&c->user_commands);
1504
1505 newc = add_cmd (comname, class_user, user_defined_command,
1506 (c && c->class == class_user)
1507 ? c->doc : xstrdup ("User-defined."), list);
1508 newc->user_commands = cmds;
1509
1510 /* If this new command is a hook, then mark both commands as being
1511 tied. */
1512 if (hookc)
1513 {
1514 switch (hook_type)
1515 {
1516 case CMD_PRE_HOOK:
1517 hookc->hook_pre = newc; /* Target gets hooked. */
1518 newc->hookee_pre = hookc; /* We are marked as hooking target cmd. */
1519 break;
1520 case CMD_POST_HOOK:
1521 hookc->hook_post = newc; /* Target gets hooked. */
1522 newc->hookee_post = hookc; /* We are marked as hooking
1523 target cmd. */
1524 break;
1525 default:
1526 /* Should never come here as hookc would be 0. */
1527 internal_error (__FILE__, __LINE__, _("bad switch"));
1528 }
1529 }
1530 }
1531
1532 void
1533 document_command (char *comname, int from_tty)
1534 {
1535 struct command_line *doclines;
1536 struct cmd_list_element *c, **list;
1537 char *tem, *comfull;
1538 char tmpbuf[128];
1539
1540 comfull = comname;
1541 list = validate_comname (&comname);
1542
1543 tem = comname;
1544 c = lookup_cmd (&tem, *list, "", 0, 1);
1545
1546 if (c->class != class_user)
1547 error (_("Command \"%s\" is built-in."), comfull);
1548
1549 sprintf (tmpbuf, "Type documentation for \"%s\".", comfull);
1550 doclines = read_command_lines (tmpbuf, from_tty, 0, 0, 0);
1551
1552 if (c->doc)
1553 xfree (c->doc);
1554
1555 {
1556 struct command_line *cl1;
1557 int len = 0;
1558
1559 for (cl1 = doclines; cl1; cl1 = cl1->next)
1560 len += strlen (cl1->line) + 1;
1561
1562 c->doc = (char *) xmalloc (len + 1);
1563 *c->doc = 0;
1564
1565 for (cl1 = doclines; cl1; cl1 = cl1->next)
1566 {
1567 strcat (c->doc, cl1->line);
1568 if (cl1->next)
1569 strcat (c->doc, "\n");
1570 }
1571 }
1572
1573 free_command_lines (&doclines);
1574 }
1575 \f
1576 struct source_cleanup_lines_args
1577 {
1578 int old_line;
1579 const char *old_file;
1580 };
1581
1582 static void
1583 source_cleanup_lines (void *args)
1584 {
1585 struct source_cleanup_lines_args *p =
1586 (struct source_cleanup_lines_args *) args;
1587
1588 source_line_number = p->old_line;
1589 source_file_name = p->old_file;
1590 }
1591
1592 /* Used to implement source_command. */
1593
1594 void
1595 script_from_file (FILE *stream, const char *file)
1596 {
1597 struct cleanup *old_cleanups;
1598 struct source_cleanup_lines_args old_lines;
1599
1600 if (stream == NULL)
1601 internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
1602
1603 old_cleanups = make_cleanup_fclose (stream);
1604
1605 old_lines.old_line = source_line_number;
1606 old_lines.old_file = source_file_name;
1607 make_cleanup (source_cleanup_lines, &old_lines);
1608 source_line_number = 0;
1609 source_file_name = file;
1610 /* This will get set every time we read a line. So it won't stay ""
1611 for long. */
1612 error_pre_print = "";
1613
1614 {
1615 volatile struct gdb_exception e;
1616
1617 TRY_CATCH (e, RETURN_MASK_ERROR)
1618 {
1619 read_command_file (stream);
1620 }
1621 switch (e.reason)
1622 {
1623 case 0:
1624 break;
1625 case RETURN_ERROR:
1626 /* Re-throw the error, but with the file name information
1627 prepended. */
1628 throw_error (e.error,
1629 _("%s:%d: Error in sourced command file:\n%s"),
1630 source_file_name, source_line_number, e.message);
1631 default:
1632 internal_error (__FILE__, __LINE__, _("bad reason"));
1633 }
1634 }
1635
1636 do_cleanups (old_cleanups);
1637 }
1638
1639 /* Print the definition of user command C to STREAM. Or, if C is a
1640 prefix command, show the definitions of all user commands under C
1641 (recursively). PREFIX and NAME combined are the name of the
1642 current command. */
1643 void
1644 show_user_1 (struct cmd_list_element *c, char *prefix, char *name,
1645 struct ui_file *stream)
1646 {
1647 struct command_line *cmdlines;
1648
1649 if (c->prefixlist != NULL)
1650 {
1651 char *prefixname = c->prefixname;
1652
1653 for (c = *c->prefixlist; c != NULL; c = c->next)
1654 if (c->class == class_user || c->prefixlist != NULL)
1655 show_user_1 (c, prefixname, c->name, gdb_stdout);
1656 return;
1657 }
1658
1659 cmdlines = c->user_commands;
1660 if (!cmdlines)
1661 return;
1662 fprintf_filtered (stream, "User command \"%s%s\":\n", prefix, name);
1663
1664 print_command_lines (current_uiout, cmdlines, 1);
1665 fputs_filtered ("\n", stream);
1666 }
1667
This page took 0.07518 seconds and 4 git commands to generate.