Thu May 21 13:14:25 1998 John Metzler <jmetzler@cygnus.com>
[deliverable/binutils-gdb.git] / gdb / top.c
1 /* Top level stuff for GDB, the GNU debugger.
2 Copyright 1986, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20
21 #include "defs.h"
22 #include "gdbcmd.h"
23 #include "call-cmds.h"
24 #include "symtab.h"
25 #include "inferior.h"
26 #include "signals.h"
27 #include "target.h"
28 #include "breakpoint.h"
29 #include "gdbtypes.h"
30 #include "expression.h"
31 #include "value.h"
32 #include "language.h"
33 #include "terminal.h" /* For job_control. */
34 #include "annotate.h"
35 #include <setjmp.h>
36 #include "top.h"
37
38 /* readline include files */
39 #include "readline.h"
40 #include "history.h"
41
42 /* readline defines this. */
43 #undef savestring
44
45 #include <sys/types.h>
46 #ifdef HAVE_UNISTD_H
47 #include <unistd.h>
48 #endif
49
50 #include "gdb_string.h"
51 #include "gdb_stat.h"
52 #include <ctype.h>
53
54 extern void initialize_utils PARAMS ((void));
55
56 /* Prototypes for local functions */
57
58 static void dont_repeat_command PARAMS ((char *, int));
59
60 static void source_cleanup_lines PARAMS ((PTR));
61
62 static void user_defined_command PARAMS ((char *, int));
63
64 static void init_signals PARAMS ((void));
65
66 #ifdef STOP_SIGNAL
67 static void stop_sig PARAMS ((int));
68 #endif
69
70 static char * line_completion_function PARAMS ((char *, int, char *, int));
71
72 static char * readline_line_completion_function PARAMS ((char *, int));
73
74 static void command_loop_marker PARAMS ((int));
75
76 static void while_command PARAMS ((char *, int));
77
78 static void if_command PARAMS ((char *, int));
79
80 static struct command_line *
81 build_command_line PARAMS ((enum command_control_type, char *));
82
83 static struct command_line *
84 get_command_line PARAMS ((enum command_control_type, char *));
85
86 static void realloc_body_list PARAMS ((struct command_line *, int));
87
88 static enum misc_command_type read_next_line PARAMS ((struct command_line **));
89
90 static enum command_control_type
91 recurse_read_control_structure PARAMS ((struct command_line *));
92
93 static struct cleanup * setup_user_args PARAMS ((char *));
94
95 static char * locate_arg PARAMS ((char *));
96
97 static char * insert_args PARAMS ((char *));
98
99 static void arg_cleanup PARAMS ((void));
100
101 static void init_main PARAMS ((void));
102
103 static void init_cmd_lists PARAMS ((void));
104
105 static void float_handler PARAMS ((int));
106
107 static void init_signals PARAMS ((void));
108
109 static void set_verbose PARAMS ((char *, int, struct cmd_list_element *));
110
111 static void set_endian PARAMS ((char *, int));
112
113 static void set_endian_big PARAMS ((char *, int));
114
115 static void set_endian_little PARAMS ((char *, int));
116
117 static void set_endian_auto PARAMS ((char *, int));
118
119 static void show_endian PARAMS ((char *, int));
120
121 static void set_architecture PARAMS ((char *, int));
122
123 static void show_architecture PARAMS ((char *, int));
124
125 static void info_architecture PARAMS ((char *, int));
126
127 static void show_history PARAMS ((char *, int));
128
129 static void set_history PARAMS ((char *, int));
130
131 static void set_history_size_command PARAMS ((char *, int,
132 struct cmd_list_element *));
133
134 static void show_commands PARAMS ((char *, int));
135
136 static void echo_command PARAMS ((char *, int));
137
138 static void pwd_command PARAMS ((char *, int));
139
140 static void show_version PARAMS ((char *, int));
141
142 static void document_command PARAMS ((char *, int));
143
144 static void define_command PARAMS ((char *, int));
145
146 static void validate_comname PARAMS ((char *));
147
148 static void help_command PARAMS ((char *, int));
149
150 static void show_command PARAMS ((char *, int));
151
152 static void info_command PARAMS ((char *, int));
153
154 static void complete_command PARAMS ((char *, int));
155
156 static void do_nothing PARAMS ((int));
157
158 #ifdef SIGHUP
159 static int quit_cover PARAMS ((char *));
160
161 static void disconnect PARAMS ((int));
162 #endif
163
164 static void source_cleanup PARAMS ((FILE *));
165
166 /* If this definition isn't overridden by the header files, assume
167 that isatty and fileno exist on this system. */
168 #ifndef ISATTY
169 #define ISATTY(FP) (isatty (fileno (FP)))
170 #endif
171
172 /* Initialization file name for gdb. This is overridden in some configs. */
173
174 #ifndef GDBINIT_FILENAME
175 #define GDBINIT_FILENAME ".gdbinit"
176 #endif
177 char gdbinit[] = GDBINIT_FILENAME;
178
179 int inhibit_gdbinit = 0;
180
181 /* If nonzero, and GDB has been configured to be able to use windows,
182 attempt to open them upon startup. */
183
184 int use_windows = 1;
185
186 /* Version number of GDB, as a string. */
187
188 extern char *version;
189
190 /* Canonical host name as a string. */
191
192 extern char *host_name;
193
194 /* Canonical target name as a string. */
195
196 extern char *target_name;
197
198 extern char lang_frame_mismatch_warn[]; /* language.c */
199
200 /* Flag for whether we want all the "from_tty" gubbish printed. */
201
202 int caution = 1; /* Default is yes, sigh. */
203
204 /* Define all cmd_list_elements. */
205
206 /* Chain containing all defined commands. */
207
208 struct cmd_list_element *cmdlist;
209
210 /* Chain containing all defined info subcommands. */
211
212 struct cmd_list_element *infolist;
213
214 /* Chain containing all defined enable subcommands. */
215
216 struct cmd_list_element *enablelist;
217
218 /* Chain containing all defined disable subcommands. */
219
220 struct cmd_list_element *disablelist;
221
222 /* Chain containing all defined delete subcommands. */
223
224 struct cmd_list_element *deletelist;
225
226 /* Chain containing all defined "enable breakpoint" subcommands. */
227
228 struct cmd_list_element *enablebreaklist;
229
230 /* Chain containing all defined set subcommands */
231
232 struct cmd_list_element *setlist;
233
234 /* Chain containing all defined unset subcommands */
235
236 struct cmd_list_element *unsetlist;
237
238 /* Chain containing all defined show subcommands. */
239
240 struct cmd_list_element *showlist;
241
242 /* Chain containing the \"set endian\" commands. */
243
244 struct cmd_list_element *endianlist;
245
246 /* Chain containing all defined \"set history\". */
247
248 struct cmd_list_element *sethistlist;
249
250 /* Chain containing all defined \"show history\". */
251
252 struct cmd_list_element *showhistlist;
253
254 /* Chain containing all defined \"unset history\". */
255
256 struct cmd_list_element *unsethistlist;
257
258 /* Chain containing all defined maintenance subcommands. */
259
260 #if MAINTENANCE_CMDS
261 struct cmd_list_element *maintenancelist;
262 #endif
263
264 /* Chain containing all defined "maintenance info" subcommands. */
265
266 #if MAINTENANCE_CMDS
267 struct cmd_list_element *maintenanceinfolist;
268 #endif
269
270 /* Chain containing all defined "maintenance print" subcommands. */
271
272 #if MAINTENANCE_CMDS
273 struct cmd_list_element *maintenanceprintlist;
274 #endif
275
276 struct cmd_list_element *setprintlist;
277
278 struct cmd_list_element *showprintlist;
279
280 struct cmd_list_element *setchecklist;
281
282 struct cmd_list_element *showchecklist;
283
284 /* stdio stream that command input is being read from. Set to stdin normally.
285 Set by source_command to the file we are sourcing. Set to NULL if we are
286 executing a user-defined command or interacting via a GUI. */
287
288 FILE *instream;
289
290 /* Current working directory. */
291
292 char *current_directory;
293
294 /* The directory name is actually stored here (usually). */
295 char gdb_dirbuf[1024];
296
297 /* Function to call before reading a command, if nonzero.
298 The function receives two args: an input stream,
299 and a prompt string. */
300
301 void (*window_hook) PARAMS ((FILE *, char *));
302
303 int epoch_interface;
304 int xgdb_verbose;
305
306 /* gdb prints this when reading a command interactively */
307 static char *prompt;
308
309 /* Buffer used for reading command lines, and the size
310 allocated for it so far. */
311
312 char *line;
313 int linesize = 100;
314
315 /* Nonzero if the current command is modified by "server ". This
316 affects things like recording into the command history, comamnds
317 repeating on RETURN, etc. This is so a user interface (emacs, GUI,
318 whatever) can issue its own commands and also send along commands
319 from the user, and have the user not notice that the user interface
320 is issuing commands too. */
321 int server_command;
322
323 /* Baud rate specified for talking to serial target systems. Default
324 is left as -1, so targets can choose their own defaults. */
325 /* FIXME: This means that "show remotebaud" and gr_files_info can print -1
326 or (unsigned int)-1. This is a Bad User Interface. */
327
328 int baud_rate = -1;
329
330 /* Timeout limit for response from target. */
331
332 int remote_timeout = 20; /* Set default to 20 */
333
334 /* Non-zero tells remote* modules to output debugging info. */
335
336 int remote_debug = 0;
337
338 /* Level of control structure. */
339 static int control_level;
340
341 /* Structure for arguments to user defined functions. */
342 #define MAXUSERARGS 10
343 struct user_args
344 {
345 struct user_args *next;
346 struct
347 {
348 char *arg;
349 int len;
350 } a[MAXUSERARGS];
351 int count;
352 } *user_args;
353
354 /* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */
355
356 #ifndef STOP_SIGNAL
357 #ifdef SIGTSTP
358 #define STOP_SIGNAL SIGTSTP
359 static void stop_sig PARAMS ((int));
360 #endif
361 #endif
362
363 /* Some System V have job control but not sigsetmask(). */
364 #if !defined (HAVE_SIGSETMASK)
365 #if !defined (USG)
366 #define HAVE_SIGSETMASK 1
367 #else
368 #define HAVE_SIGSETMASK 0
369 #endif
370 #endif
371
372 #if 0 == (HAVE_SIGSETMASK)
373 #define sigsetmask(n)
374 #endif
375
376 /* Hooks for alternate command interfaces. */
377
378 /* Called after most modules have been initialized, but before taking users
379 command file. */
380
381 void (*init_ui_hook) PARAMS ((char *argv0));
382
383 /* Called instead of command_loop at top level. Can be invoked via
384 return_to_top_level. */
385
386 void (*command_loop_hook) PARAMS ((void));
387
388
389 /* Called instead of fputs for all output. */
390
391 void (*fputs_unfiltered_hook) PARAMS ((const char *linebuffer, FILE *stream));
392
393 /* Called when the target says something to the host, which may
394 want to appear in a different window. */
395
396 void (*target_output_hook) PARAMS ((char *));
397
398 /* Called from print_frame_info to list the line we stopped in. */
399
400 void (*print_frame_info_listing_hook) PARAMS ((struct symtab *s, int line,
401 int stopline, int noerror));
402 /* Replaces most of query. */
403
404 int (*query_hook) PARAMS ((const char *, va_list));
405
406 /* Replaces most of warning. */
407
408 void (*warning_hook) PARAMS ((const char *, va_list));
409
410 /* Called from gdb_flush to flush output. */
411
412 void (*flush_hook) PARAMS ((FILE *stream));
413
414 /* These three functions support getting lines of text from the user. They
415 are used in sequence. First readline_begin_hook is called with a text
416 string that might be (for example) a message for the user to type in a
417 sequence of commands to be executed at a breakpoint. If this function
418 calls back to a GUI, it might take this opportunity to pop up a text
419 interaction window with this message. Next, readline_hook is called
420 with a prompt that is emitted prior to collecting the user input.
421 It can be called multiple times. Finally, readline_end_hook is called
422 to notify the GUI that we are done with the interaction window and it
423 can close it. */
424
425 void (*readline_begin_hook) PARAMS ((char *, ...));
426 char * (*readline_hook) PARAMS ((char *));
427 void (*readline_end_hook) PARAMS ((void));
428
429 /* Called as appropriate to notify the interface of the specified breakpoint
430 conditions. */
431
432 void (*create_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
433 void (*delete_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
434 void (*modify_breakpoint_hook) PARAMS ((struct breakpoint *bpt));
435
436 /* Called during long calculations to allow GUI to repair window damage, and to
437 check for stop buttons, etc... */
438
439 void (*interactive_hook) PARAMS ((void));
440
441 /* Called when the registers have changed, as a hint to a GUI
442 to minimize window update. */
443
444 void (*registers_changed_hook) PARAMS ((void));
445
446 /* tell the GUI someone changed the PC */
447 void (*pc_changed_hook) PARAMS ((void));
448
449 /* Called when going to wait for the target. Usually allows the GUI to run
450 while waiting for target events. */
451
452 int (*target_wait_hook) PARAMS ((int pid, struct target_waitstatus *status));
453
454 /* Used by UI as a wrapper around command execution. May do various things
455 like enabling/disabling buttons, etc... */
456
457 void (*call_command_hook) PARAMS ((struct cmd_list_element *c, char *cmd,
458 int from_tty));
459
460
461 /* Takes control from error (). Typically used to prevent longjmps out of the
462 middle of the GUI. Usually used in conjunction with a catch routine. */
463
464 NORETURN void (*error_hook) PARAMS ((void)) ATTR_NORETURN;
465
466 \f
467 /* Where to go for return_to_top_level (RETURN_ERROR). */
468 SIGJMP_BUF error_return;
469 /* Where to go for return_to_top_level (RETURN_QUIT). */
470 SIGJMP_BUF quit_return;
471
472 /* Return for reason REASON. This generally gets back to the command
473 loop, but can be caught via catch_errors. */
474
475 NORETURN void
476 return_to_top_level (reason)
477 enum return_reason reason;
478 {
479 quit_flag = 0;
480 immediate_quit = 0;
481
482 /* Perhaps it would be cleaner to do this via the cleanup chain (not sure
483 I can think of a reason why that is vital, though). */
484 bpstat_clear_actions(stop_bpstat); /* Clear queued breakpoint commands */
485
486 disable_current_display ();
487 do_cleanups (ALL_CLEANUPS);
488
489 if (annotation_level > 1)
490 switch (reason)
491 {
492 case RETURN_QUIT:
493 annotate_quit ();
494 break;
495 case RETURN_ERROR:
496 annotate_error ();
497 break;
498 }
499
500 (NORETURN void) SIGLONGJMP
501 (reason == RETURN_ERROR ? error_return : quit_return, 1);
502 }
503
504 /* Call FUNC with arg ARGS, catching any errors. If there is no
505 error, return the value returned by FUNC. If there is an error,
506 print ERRSTRING, print the specific error message, then return
507 zero.
508
509 Must not be called with immediate_quit in effect (bad things might
510 happen, say we got a signal in the middle of a memcpy to quit_return).
511 This is an OK restriction; with very few exceptions immediate_quit can
512 be replaced by judicious use of QUIT.
513
514 MASK specifies what to catch; it is normally set to
515 RETURN_MASK_ALL, if for no other reason than that the code which
516 calls catch_errors might not be set up to deal with a quit which
517 isn't caught. But if the code can deal with it, it generally
518 should be RETURN_MASK_ERROR, unless for some reason it is more
519 useful to abort only the portion of the operation inside the
520 catch_errors. Note that quit should return to the command line
521 fairly quickly, even if some further processing is being done. */
522
523 int
524 catch_errors (func, args, errstring, mask)
525 int (*func) PARAMS ((char *));
526 PTR args;
527 char *errstring;
528 return_mask mask;
529 {
530 SIGJMP_BUF saved_error;
531 SIGJMP_BUF saved_quit;
532 SIGJMP_BUF tmp_jmp;
533 int val;
534 struct cleanup *saved_cleanup_chain;
535 char *saved_error_pre_print;
536 char *saved_quit_pre_print;
537
538 saved_cleanup_chain = save_cleanups ();
539 saved_error_pre_print = error_pre_print;
540 saved_quit_pre_print = quit_pre_print;
541
542 if (mask & RETURN_MASK_ERROR)
543 {
544 memcpy ((char *)saved_error, (char *)error_return, sizeof (SIGJMP_BUF));
545 error_pre_print = errstring;
546 }
547 if (mask & RETURN_MASK_QUIT)
548 {
549 memcpy (saved_quit, quit_return, sizeof (SIGJMP_BUF));
550 quit_pre_print = errstring;
551 }
552
553 if (SIGSETJMP (tmp_jmp) == 0)
554 {
555 if (mask & RETURN_MASK_ERROR)
556 memcpy (error_return, tmp_jmp, sizeof (SIGJMP_BUF));
557 if (mask & RETURN_MASK_QUIT)
558 memcpy (quit_return, tmp_jmp, sizeof (SIGJMP_BUF));
559 val = (*func) (args);
560 }
561 else
562 val = 0;
563
564 restore_cleanups (saved_cleanup_chain);
565
566 if (mask & RETURN_MASK_ERROR)
567 {
568 memcpy (error_return, saved_error, sizeof (SIGJMP_BUF));
569 error_pre_print = saved_error_pre_print;
570 }
571 if (mask & RETURN_MASK_QUIT)
572 {
573 memcpy (quit_return, saved_quit, sizeof (SIGJMP_BUF));
574 quit_pre_print = saved_quit_pre_print;
575 }
576 return val;
577 }
578
579 /* Handler for SIGHUP. */
580
581 #ifdef SIGHUP
582 static void
583 disconnect (signo)
584 int signo;
585 {
586 catch_errors (quit_cover, NULL,
587 "Could not kill the program being debugged", RETURN_MASK_ALL);
588 signal (SIGHUP, SIG_DFL);
589 kill (getpid (), SIGHUP);
590 }
591
592 /* Just a little helper function for disconnect(). */
593
594 static int
595 quit_cover (s)
596 char *s;
597 {
598 caution = 0; /* Throw caution to the wind -- we're exiting.
599 This prevents asking the user dumb questions. */
600 quit_command((char *)0, 0);
601 return 0;
602 }
603 #endif /* defined SIGHUP */
604 \f
605 /* Line number we are currently in in a file which is being sourced. */
606 static int source_line_number;
607
608 /* Name of the file we are sourcing. */
609 static char *source_file_name;
610
611 /* Buffer containing the error_pre_print used by the source stuff.
612 Malloc'd. */
613 static char *source_error;
614 static int source_error_allocated;
615
616 /* Something to glom on to the start of error_pre_print if source_file_name
617 is set. */
618 static char *source_pre_error;
619
620 /* Clean up on error during a "source" command (or execution of a
621 user-defined command). */
622
623 static void
624 source_cleanup (stream)
625 FILE *stream;
626 {
627 /* Restore the previous input stream. */
628 instream = stream;
629 }
630
631 /* Read commands from STREAM. */
632 void
633 read_command_file (stream)
634 FILE *stream;
635 {
636 struct cleanup *cleanups;
637
638 cleanups = make_cleanup (source_cleanup, instream);
639 instream = stream;
640 command_loop ();
641 do_cleanups (cleanups);
642 }
643 \f
644 extern void init_proc PARAMS ((void));
645
646 void (*pre_init_ui_hook) PARAMS ((void));
647
648 void
649 gdb_init (argv0)
650 char *argv0;
651 {
652 if (pre_init_ui_hook)
653 pre_init_ui_hook ();
654
655 /* Run the init function of each source file */
656
657 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
658 current_directory = gdb_dirbuf;
659
660 init_cmd_lists (); /* This needs to be done first */
661 initialize_targets (); /* Setup target_terminal macros for utils.c */
662 initialize_utils (); /* Make errors and warnings possible */
663 initialize_all_files ();
664 init_main (); /* But that omits this file! Do it now */
665 init_signals ();
666
667 init_proc ();
668
669 /* We need a default language for parsing expressions, so simple things like
670 "set width 0" won't fail if no language is explicitly set in a config file
671 or implicitly set by reading an executable during startup. */
672 set_language (language_c);
673 expected_language = current_language; /* don't warn about the change. */
674
675 if (init_ui_hook)
676 init_ui_hook (argv0);
677 }
678
679 /* Allocate, initialize a new command line structure for one of the
680 control commands (if/while). */
681
682 static struct command_line *
683 build_command_line (type, args)
684 enum command_control_type type;
685 char *args;
686 {
687 struct command_line *cmd;
688
689 if (args == NULL)
690 error ("if/while commands require arguments.\n");
691
692 cmd = (struct command_line *)xmalloc (sizeof (struct command_line));
693 cmd->next = NULL;
694 cmd->control_type = type;
695
696 cmd->body_count = 1;
697 cmd->body_list
698 = (struct command_line **)xmalloc (sizeof (struct command_line *)
699 * cmd->body_count);
700 memset (cmd->body_list, 0, sizeof (struct command_line *) * cmd->body_count);
701 cmd->line = savestring (args, strlen (args));
702 return cmd;
703 }
704
705 /* Build and return a new command structure for the control commands
706 such as "if" and "while". */
707
708 static struct command_line *
709 get_command_line (type, arg)
710 enum command_control_type type;
711 char *arg;
712 {
713 struct command_line *cmd;
714 struct cleanup *old_chain = NULL;
715
716 /* Allocate and build a new command line structure. */
717 cmd = build_command_line (type, arg);
718
719 old_chain = make_cleanup (free_command_lines, &cmd);
720
721 /* Read in the body of this command. */
722 if (recurse_read_control_structure (cmd) == invalid_control)
723 {
724 warning ("error reading in control structure\n");
725 do_cleanups (old_chain);
726 return NULL;
727 }
728
729 discard_cleanups (old_chain);
730 return cmd;
731 }
732
733 /* Recursively print a command (including full control structures). */
734 void
735 print_command_line (cmd, depth)
736 struct command_line *cmd;
737 unsigned int depth;
738 {
739 unsigned int i;
740
741 if (depth)
742 {
743 for (i = 0; i < depth; i++)
744 fputs_filtered (" ", gdb_stdout);
745 }
746
747 /* A simple command, print it and return. */
748 if (cmd->control_type == simple_control)
749 {
750 fputs_filtered (cmd->line, gdb_stdout);
751 fputs_filtered ("\n", gdb_stdout);
752 return;
753 }
754
755 /* loop_continue to jump to the start of a while loop, print it
756 and return. */
757 if (cmd->control_type == continue_control)
758 {
759 fputs_filtered ("loop_continue\n", gdb_stdout);
760 return;
761 }
762
763 /* loop_break to break out of a while loop, print it and return. */
764 if (cmd->control_type == break_control)
765 {
766 fputs_filtered ("loop_break\n", gdb_stdout);
767 return;
768 }
769
770 /* A while command. Recursively print its subcommands before returning. */
771 if (cmd->control_type == while_control)
772 {
773 struct command_line *list;
774 fputs_filtered ("while ", gdb_stdout);
775 fputs_filtered (cmd->line, gdb_stdout);
776 fputs_filtered ("\n", gdb_stdout);
777 list = *cmd->body_list;
778 while (list)
779 {
780 print_command_line (list, depth + 1);
781 list = list->next;
782 }
783 }
784
785 /* An if command. Recursively print both arms before returning. */
786 if (cmd->control_type == if_control)
787 {
788 fputs_filtered ("if ", gdb_stdout);
789 fputs_filtered (cmd->line, gdb_stdout);
790 fputs_filtered ("\n", gdb_stdout);
791 /* The true arm. */
792 print_command_line (cmd->body_list[0], depth + 1);
793
794 /* Show the false arm if it exists. */
795 if (cmd->body_count == 2)
796 {
797 if (depth)
798 {
799 for (i = 0; i < depth; i++)
800 fputs_filtered (" ", gdb_stdout);
801 }
802 fputs_filtered ("else\n", gdb_stdout);
803 print_command_line (cmd->body_list[1], depth + 1);
804 }
805 if (depth)
806 {
807 for (i = 0; i < depth; i++)
808 fputs_filtered (" ", gdb_stdout);
809 }
810 fputs_filtered ("end\n", gdb_stdout);
811 }
812 }
813
814 /* Execute the command in CMD. */
815
816 enum command_control_type
817 execute_control_command (cmd)
818 struct command_line *cmd;
819 {
820 struct expression *expr;
821 struct command_line *current;
822 struct cleanup *old_chain = 0;
823 value_ptr val;
824 value_ptr val_mark;
825 int loop;
826 enum command_control_type ret;
827 char *new_line;
828
829 switch (cmd->control_type)
830 {
831 case simple_control:
832 /* A simple command, execute it and return. */
833 new_line = insert_args (cmd->line);
834 if (!new_line)
835 return invalid_control;
836 old_chain = make_cleanup (free_current_contents, &new_line);
837 execute_command (new_line, 0);
838 ret = cmd->control_type;
839 break;
840
841 case continue_control:
842 case break_control:
843 /* Return for "continue", and "break" so we can either
844 continue the loop at the top, or break out. */
845 ret = cmd->control_type;
846 break;
847
848 case while_control:
849 {
850 /* Parse the loop control expression for the while statement. */
851 new_line = insert_args (cmd->line);
852 if (!new_line)
853 return invalid_control;
854 old_chain = make_cleanup (free_current_contents, &new_line);
855 expr = parse_expression (new_line);
856 make_cleanup (free_current_contents, &expr);
857
858 ret = simple_control;
859 loop = 1;
860
861 /* Keep iterating so long as the expression is true. */
862 while (loop == 1)
863 {
864 int cond_result;
865
866 QUIT;
867
868 /* Evaluate the expression. */
869 val_mark = value_mark ();
870 val = evaluate_expression (expr);
871 cond_result = value_true (val);
872 value_free_to_mark (val_mark);
873
874 /* If the value is false, then break out of the loop. */
875 if (!cond_result)
876 break;
877
878 /* Execute the body of the while statement. */
879 current = *cmd->body_list;
880 while (current)
881 {
882 ret = execute_control_command (current);
883
884 /* If we got an error, or a "break" command, then stop
885 looping. */
886 if (ret == invalid_control || ret == break_control)
887 {
888 loop = 0;
889 break;
890 }
891
892 /* If we got a "continue" command, then restart the loop
893 at this point. */
894 if (ret == continue_control)
895 break;
896
897 /* Get the next statement. */
898 current = current->next;
899 }
900 }
901
902 /* Reset RET so that we don't recurse the break all the way down. */
903 if (ret == break_control)
904 ret = simple_control;
905
906 break;
907 }
908
909 case if_control:
910 {
911 new_line = insert_args (cmd->line);
912 if (!new_line)
913 return invalid_control;
914 old_chain = make_cleanup (free_current_contents, &new_line);
915 /* Parse the conditional for the if statement. */
916 expr = parse_expression (new_line);
917 make_cleanup (free_current_contents, &expr);
918
919 current = NULL;
920 ret = simple_control;
921
922 /* Evaluate the conditional. */
923 val_mark = value_mark ();
924 val = evaluate_expression (expr);
925
926 /* Choose which arm to take commands from based on the value of the
927 conditional expression. */
928 if (value_true (val))
929 current = *cmd->body_list;
930 else if (cmd->body_count == 2)
931 current = *(cmd->body_list + 1);
932 value_free_to_mark (val_mark);
933
934 /* Execute commands in the given arm. */
935 while (current)
936 {
937 ret = execute_control_command (current);
938
939 /* If we got an error, get out. */
940 if (ret != simple_control)
941 break;
942
943 /* Get the next statement in the body. */
944 current = current->next;
945 }
946
947 break;
948 }
949
950 default:
951 warning ("Invalid control type in command structure.");
952 return invalid_control;
953 }
954
955 if (old_chain)
956 do_cleanups (old_chain);
957
958 return ret;
959 }
960
961 /* "while" command support. Executes a body of statements while the
962 loop condition is nonzero. */
963
964 static void
965 while_command (arg, from_tty)
966 char *arg;
967 int from_tty;
968 {
969 struct command_line *command = NULL;
970
971 control_level = 1;
972 command = get_command_line (while_control, arg);
973
974 if (command == NULL)
975 return;
976
977 execute_control_command (command);
978 free_command_lines (&command);
979 }
980
981 /* "if" command support. Execute either the true or false arm depending
982 on the value of the if conditional. */
983
984 static void
985 if_command (arg, from_tty)
986 char *arg;
987 int from_tty;
988 {
989 struct command_line *command = NULL;
990
991 control_level = 1;
992 command = get_command_line (if_control, arg);
993
994 if (command == NULL)
995 return;
996
997 execute_control_command (command);
998 free_command_lines (&command);
999 }
1000
1001 /* Cleanup */
1002 static void
1003 arg_cleanup ()
1004 {
1005 struct user_args *oargs = user_args;
1006 if (!user_args)
1007 fatal ("Internal error, arg_cleanup called with no user args.\n");
1008
1009 user_args = user_args->next;
1010 free (oargs);
1011 }
1012
1013 /* Bind the incomming arguments for a user defined command to
1014 $arg0, $arg1 ... $argMAXUSERARGS. */
1015
1016 static struct cleanup *
1017 setup_user_args (p)
1018 char *p;
1019 {
1020 struct user_args *args;
1021 struct cleanup *old_chain;
1022 unsigned int arg_count = 0;
1023
1024 args = (struct user_args *)xmalloc (sizeof (struct user_args));
1025 memset (args, 0, sizeof (struct user_args));
1026
1027 args->next = user_args;
1028 user_args = args;
1029
1030 old_chain = make_cleanup (arg_cleanup, 0);
1031
1032 if (p == NULL)
1033 return old_chain;
1034
1035 while (*p)
1036 {
1037 char *start_arg;
1038 int squote = 0;
1039 int dquote = 0;
1040 int bsquote = 0;
1041
1042 if (arg_count >= MAXUSERARGS)
1043 {
1044 error ("user defined function may only have %d arguments.\n",
1045 MAXUSERARGS);
1046 return old_chain;
1047 }
1048
1049 /* Strip whitespace. */
1050 while (*p == ' ' || *p == '\t')
1051 p++;
1052
1053 /* P now points to an argument. */
1054 start_arg = p;
1055 user_args->a[arg_count].arg = p;
1056
1057 /* Get to the end of this argument. */
1058 while (*p)
1059 {
1060 if (((*p == ' ' || *p == '\t')) && !squote && !dquote && !bsquote)
1061 break;
1062 else
1063 {
1064 if (bsquote)
1065 bsquote = 0;
1066 else if (*p == '\\')
1067 bsquote = 1;
1068 else if (squote)
1069 {
1070 if (*p == '\'')
1071 squote = 0;
1072 }
1073 else if (dquote)
1074 {
1075 if (*p == '"')
1076 dquote = 0;
1077 }
1078 else
1079 {
1080 if (*p == '\'')
1081 squote = 1;
1082 else if (*p == '"')
1083 dquote = 1;
1084 }
1085 p++;
1086 }
1087 }
1088
1089 user_args->a[arg_count].len = p - start_arg;
1090 arg_count++;
1091 user_args->count++;
1092 }
1093 return old_chain;
1094 }
1095
1096 /* Given character string P, return a point to the first argument ($arg),
1097 or NULL if P contains no arguments. */
1098
1099 static char *
1100 locate_arg (p)
1101 char *p;
1102 {
1103 while ((p = strchr (p, '$')))
1104 {
1105 if (strncmp (p, "$arg", 4) == 0 && isdigit (p[4]))
1106 return p;
1107 p++;
1108 }
1109 return NULL;
1110 }
1111
1112 /* Insert the user defined arguments stored in user_arg into the $arg
1113 arguments found in line, with the updated copy being placed into nline. */
1114
1115 static char *
1116 insert_args (line)
1117 char *line;
1118 {
1119 char *p, *save_line, *new_line;
1120 unsigned len, i;
1121
1122 /* First we need to know how much memory to allocate for the new line. */
1123 save_line = line;
1124 len = 0;
1125 while ((p = locate_arg (line)))
1126 {
1127 len += p - line;
1128 i = p[4] - '0';
1129
1130 if (i >= user_args->count)
1131 {
1132 error ("Missing argument %d in user function.\n", i);
1133 return NULL;
1134 }
1135 len += user_args->a[i].len;
1136 line = p + 5;
1137 }
1138
1139 /* Don't forget the tail. */
1140 len += strlen (line);
1141
1142 /* Allocate space for the new line and fill it in. */
1143 new_line = (char *)xmalloc (len + 1);
1144 if (new_line == NULL)
1145 return NULL;
1146
1147 /* Restore pointer to beginning of old line. */
1148 line = save_line;
1149
1150 /* Save pointer to beginning of new line. */
1151 save_line = new_line;
1152
1153 while ((p = locate_arg (line)))
1154 {
1155 int i, len;
1156
1157 memcpy (new_line, line, p - line);
1158 new_line += p - line;
1159 i = p[4] - '0';
1160
1161 len = user_args->a[i].len;
1162 if (len)
1163 {
1164 memcpy (new_line, user_args->a[i].arg, len);
1165 new_line += len;
1166 }
1167 line = p + 5;
1168 }
1169 /* Don't forget the tail. */
1170 strcpy (new_line, line);
1171
1172 /* Return a pointer to the beginning of the new line. */
1173 return save_line;
1174 }
1175
1176 void
1177 execute_user_command (c, args)
1178 struct cmd_list_element *c;
1179 char *args;
1180 {
1181 register struct command_line *cmdlines;
1182 struct cleanup *old_chain;
1183 enum command_control_type ret;
1184
1185 old_chain = setup_user_args (args);
1186
1187 cmdlines = c->user_commands;
1188 if (cmdlines == 0)
1189 /* Null command */
1190 return;
1191
1192 /* Set the instream to 0, indicating execution of a
1193 user-defined function. */
1194 old_chain = make_cleanup (source_cleanup, instream);
1195 instream = (FILE *) 0;
1196 while (cmdlines)
1197 {
1198 ret = execute_control_command (cmdlines);
1199 if (ret != simple_control && ret != break_control)
1200 {
1201 warning ("Error in control structure.\n");
1202 break;
1203 }
1204 cmdlines = cmdlines->next;
1205 }
1206 do_cleanups (old_chain);
1207 }
1208
1209 /* Execute the line P as a command.
1210 Pass FROM_TTY as second argument to the defining function. */
1211
1212 void
1213 execute_command (p, from_tty)
1214 char *p;
1215 int from_tty;
1216 {
1217 register struct cmd_list_element *c;
1218 register enum language flang;
1219 static int warned = 0;
1220 /* FIXME: These should really be in an appropriate header file */
1221 extern void serial_log_command PARAMS ((const char *));
1222
1223 free_all_values ();
1224
1225 /* Force cleanup of any alloca areas if using C alloca instead of
1226 a builtin alloca. */
1227 alloca (0);
1228
1229 /* This can happen when command_line_input hits end of file. */
1230 if (p == NULL)
1231 return;
1232
1233 serial_log_command (p);
1234
1235 while (*p == ' ' || *p == '\t') p++;
1236 if (*p)
1237 {
1238 char *arg;
1239
1240 c = lookup_cmd (&p, cmdlist, "", 0, 1);
1241 /* Pass null arg rather than an empty one. */
1242 arg = *p ? p : 0;
1243
1244 /* Clear off trailing whitespace, except for set and complete command. */
1245 if (arg && c->type != set_cmd && c->function.cfunc != complete_command)
1246 {
1247 p = arg + strlen (arg) - 1;
1248 while (p >= arg && (*p == ' ' || *p == '\t'))
1249 p--;
1250 *(p + 1) = '\0';
1251 }
1252
1253 /* If this command has been hooked, run the hook first. */
1254 if (c->hook)
1255 execute_user_command (c->hook, (char *)0);
1256
1257 if (c->class == class_user)
1258 execute_user_command (c, arg);
1259 else if (c->type == set_cmd || c->type == show_cmd)
1260 do_setshow_command (arg, from_tty & caution, c);
1261 else if (c->function.cfunc == NO_FUNCTION)
1262 error ("That is not a command, just a help topic.");
1263 else if (call_command_hook)
1264 call_command_hook (c, arg, from_tty & caution);
1265 else
1266 (*c->function.cfunc) (arg, from_tty & caution);
1267 }
1268
1269 /* Tell the user if the language has changed (except first time). */
1270 if (current_language != expected_language)
1271 {
1272 if (language_mode == language_mode_auto) {
1273 language_info (1); /* Print what changed. */
1274 }
1275 warned = 0;
1276 }
1277
1278 /* Warn the user if the working language does not match the
1279 language of the current frame. Only warn the user if we are
1280 actually running the program, i.e. there is a stack. */
1281 /* FIXME: This should be cacheing the frame and only running when
1282 the frame changes. */
1283
1284 if (target_has_stack)
1285 {
1286 flang = get_frame_language ();
1287 if (!warned
1288 && flang != language_unknown
1289 && flang != current_language->la_language)
1290 {
1291 printf_filtered ("%s\n", lang_frame_mismatch_warn);
1292 warned = 1;
1293 }
1294 }
1295 }
1296
1297 /* ARGSUSED */
1298 static void
1299 command_loop_marker (foo)
1300 int foo;
1301 {
1302 }
1303
1304 /* Read commands from `instream' and execute them
1305 until end of file or error reading instream. */
1306
1307 void
1308 command_loop ()
1309 {
1310 struct cleanup *old_chain;
1311 char *command;
1312 int stdin_is_tty = ISATTY (stdin);
1313 long time_at_cmd_start;
1314 #ifdef HAVE_SBRK
1315 long space_at_cmd_start;
1316 #endif
1317 extern int display_time;
1318 extern int display_space;
1319
1320 while (instream && !feof (instream))
1321 {
1322 if (window_hook && instream == stdin)
1323 (*window_hook) (instream, prompt);
1324
1325 quit_flag = 0;
1326 if (instream == stdin && stdin_is_tty)
1327 reinitialize_more_filter ();
1328 old_chain = make_cleanup (command_loop_marker, 0);
1329 command = command_line_input (instream == stdin ? prompt : (char *) NULL,
1330 instream == stdin, "prompt");
1331 if (command == 0)
1332 return;
1333
1334 time_at_cmd_start = get_run_time ();
1335
1336 if (display_space)
1337 {
1338 #ifdef HAVE_SBRK
1339 extern char **environ;
1340 char *lim = (char *) sbrk (0);
1341
1342 space_at_cmd_start = (long) (lim - (char *) &environ);
1343 #endif
1344 }
1345
1346 execute_command (command, instream == stdin);
1347 /* Do any commands attached to breakpoint we stopped at. */
1348 bpstat_do_actions (&stop_bpstat);
1349 do_cleanups (old_chain);
1350
1351 if (display_time)
1352 {
1353 long cmd_time = get_run_time () - time_at_cmd_start;
1354
1355 printf_unfiltered ("Command execution time: %ld.%06ld\n",
1356 cmd_time / 1000000, cmd_time % 1000000);
1357 }
1358
1359 if (display_space)
1360 {
1361 #ifdef HAVE_SBRK
1362 extern char **environ;
1363 char *lim = (char *) sbrk (0);
1364 long space_now = lim - (char *) &environ;
1365 long space_diff = space_now - space_at_cmd_start;
1366
1367 printf_unfiltered ("Space used: %ld (%c%ld for this command)\n",
1368 space_now,
1369 (space_diff >= 0 ? '+' : '-'),
1370 space_diff);
1371 #endif
1372 }
1373 }
1374 }
1375 \f
1376 /* Commands call this if they do not want to be repeated by null lines. */
1377
1378 void
1379 dont_repeat ()
1380 {
1381 if (server_command)
1382 return;
1383
1384 /* If we aren't reading from standard input, we are saving the last
1385 thing read from stdin in line and don't want to delete it. Null lines
1386 won't repeat here in any case. */
1387 if (instream == stdin)
1388 *line = 0;
1389 }
1390 \f
1391 /* Read a line from the stream "instream" without command line editing.
1392
1393 It prints PRROMPT once at the start.
1394 Action is compatible with "readline", e.g. space for the result is
1395 malloc'd and should be freed by the caller.
1396
1397 A NULL return means end of file. */
1398 char *
1399 gdb_readline (prrompt)
1400 char *prrompt;
1401 {
1402 int c;
1403 char *result;
1404 int input_index = 0;
1405 int result_size = 80;
1406
1407 if (prrompt)
1408 {
1409 /* Don't use a _filtered function here. It causes the assumed
1410 character position to be off, since the newline we read from
1411 the user is not accounted for. */
1412 fputs_unfiltered (prrompt, gdb_stdout);
1413 #ifdef MPW
1414 /* Move to a new line so the entered line doesn't have a prompt
1415 on the front of it. */
1416 fputs_unfiltered ("\n", gdb_stdout);
1417 #endif /* MPW */
1418 gdb_flush (gdb_stdout);
1419 }
1420
1421 result = (char *) xmalloc (result_size);
1422
1423 while (1)
1424 {
1425 /* Read from stdin if we are executing a user defined command.
1426 This is the right thing for prompt_for_continue, at least. */
1427 c = fgetc (instream ? instream : stdin);
1428
1429 if (c == EOF)
1430 {
1431 if (input_index > 0)
1432 /* The last line does not end with a newline. Return it, and
1433 if we are called again fgetc will still return EOF and
1434 we'll return NULL then. */
1435 break;
1436 free (result);
1437 return NULL;
1438 }
1439
1440 if (c == '\n')
1441 break;
1442
1443 result[input_index++] = c;
1444 while (input_index >= result_size)
1445 {
1446 result_size *= 2;
1447 result = (char *) xrealloc (result, result_size);
1448 }
1449 }
1450
1451 result[input_index++] = '\0';
1452 return result;
1453 }
1454
1455 /* Variables which control command line editing and history
1456 substitution. These variables are given default values at the end
1457 of this file. */
1458 static int command_editing_p;
1459 static int history_expansion_p;
1460 static int write_history_p;
1461 static int history_size;
1462 static char *history_filename;
1463
1464 /* readline uses the word breaks for two things:
1465 (1) In figuring out where to point the TEXT parameter to the
1466 rl_completion_entry_function. Since we don't use TEXT for much,
1467 it doesn't matter a lot what the word breaks are for this purpose, but
1468 it does affect how much stuff M-? lists.
1469 (2) If one of the matches contains a word break character, readline
1470 will quote it. That's why we switch between
1471 gdb_completer_word_break_characters and
1472 gdb_completer_command_word_break_characters. I'm not sure when
1473 we need this behavior (perhaps for funky characters in C++ symbols?). */
1474
1475 /* Variables which are necessary for fancy command line editing. */
1476 char *gdb_completer_word_break_characters =
1477 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
1478
1479 /* When completing on command names, we remove '-' from the list of
1480 word break characters, since we use it in command names. If the
1481 readline library sees one in any of the current completion strings,
1482 it thinks that the string needs to be quoted and automatically supplies
1483 a leading quote. */
1484 char *gdb_completer_command_word_break_characters =
1485 " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,";
1486
1487 /* Characters that can be used to quote completion strings. Note that we
1488 can't include '"' because the gdb C parser treats such quoted sequences
1489 as strings. */
1490 char *gdb_completer_quote_characters =
1491 "'";
1492
1493 /* Functions that are used as part of the fancy command line editing. */
1494
1495 /* This can be used for functions which don't want to complete on symbols
1496 but don't want to complete on anything else either. */
1497 /* ARGSUSED */
1498 char **
1499 noop_completer (text, prefix)
1500 char *text;
1501 char *prefix;
1502 {
1503 return NULL;
1504 }
1505
1506 /* Complete on filenames. */
1507 char **
1508 filename_completer (text, word)
1509 char *text;
1510 char *word;
1511 {
1512 /* From readline. */
1513 extern char *filename_completion_function PARAMS ((char *, int));
1514 int subsequent_name;
1515 char **return_val;
1516 int return_val_used;
1517 int return_val_alloced;
1518
1519 return_val_used = 0;
1520 /* Small for testing. */
1521 return_val_alloced = 1;
1522 return_val = (char **) xmalloc (return_val_alloced * sizeof (char *));
1523
1524 subsequent_name = 0;
1525 while (1)
1526 {
1527 char *p;
1528 p = filename_completion_function (text, subsequent_name);
1529 if (return_val_used >= return_val_alloced)
1530 {
1531 return_val_alloced *= 2;
1532 return_val =
1533 (char **) xrealloc (return_val,
1534 return_val_alloced * sizeof (char *));
1535 }
1536 if (p == NULL)
1537 {
1538 return_val[return_val_used++] = p;
1539 break;
1540 }
1541 /* Like emacs, don't complete on old versions. Especially useful
1542 in the "source" command. */
1543 if (p[strlen (p) - 1] == '~')
1544 continue;
1545
1546 {
1547 char *q;
1548 if (word == text)
1549 /* Return exactly p. */
1550 return_val[return_val_used++] = p;
1551 else if (word > text)
1552 {
1553 /* Return some portion of p. */
1554 q = xmalloc (strlen (p) + 5);
1555 strcpy (q, p + (word - text));
1556 return_val[return_val_used++] = q;
1557 free (p);
1558 }
1559 else
1560 {
1561 /* Return some of TEXT plus p. */
1562 q = xmalloc (strlen (p) + (text - word) + 5);
1563 strncpy (q, word, text - word);
1564 q[text - word] = '\0';
1565 strcat (q, p);
1566 return_val[return_val_used++] = q;
1567 free (p);
1568 }
1569 }
1570 subsequent_name = 1;
1571 }
1572 #if 0
1573 /* There is no way to do this just long enough to affect quote inserting
1574 without also affecting the next completion. This should be fixed in
1575 readline. FIXME. */
1576 /* Insure that readline does the right thing
1577 with respect to inserting quotes. */
1578 rl_completer_word_break_characters = "";
1579 #endif
1580 return return_val;
1581 }
1582
1583 /* Here are some useful test cases for completion. FIXME: These should
1584 be put in the test suite. They should be tested with both M-? and TAB.
1585
1586 "show output-" "radix"
1587 "show output" "-radix"
1588 "p" ambiguous (commands starting with p--path, print, printf, etc.)
1589 "p " ambiguous (all symbols)
1590 "info t foo" no completions
1591 "info t " no completions
1592 "info t" ambiguous ("info target", "info terminal", etc.)
1593 "info ajksdlfk" no completions
1594 "info ajksdlfk " no completions
1595 "info" " "
1596 "info " ambiguous (all info commands)
1597 "p \"a" no completions (string constant)
1598 "p 'a" ambiguous (all symbols starting with a)
1599 "p b-a" ambiguous (all symbols starting with a)
1600 "p b-" ambiguous (all symbols)
1601 "file Make" "file" (word break hard to screw up here)
1602 "file ../gdb.stabs/we" "ird" (needs to not break word at slash)
1603 */
1604
1605 /* Generate completions one by one for the completer. Each time we are
1606 called return another potential completion to the caller.
1607 line_completion just completes on commands or passes the buck to the
1608 command's completer function, the stuff specific to symbol completion
1609 is in make_symbol_completion_list.
1610
1611 TEXT is the caller's idea of the "word" we are looking at.
1612
1613 MATCHES is the number of matches that have currently been collected from
1614 calling this completion function. When zero, then we need to initialize,
1615 otherwise the initialization has already taken place and we can just
1616 return the next potential completion string.
1617
1618 LINE_BUFFER is available to be looked at; it contains the entire text
1619 of the line. POINT is the offset in that line of the cursor. You
1620 should pretend that the line ends at POINT.
1621
1622 Returns NULL if there are no more completions, else a pointer to a string
1623 which is a possible completion, it is the caller's responsibility to
1624 free the string. */
1625
1626 static char *
1627 line_completion_function (text, matches, line_buffer, point)
1628 char *text;
1629 int matches;
1630 char *line_buffer;
1631 int point;
1632 {
1633 static char **list = (char **)NULL; /* Cache of completions */
1634 static int index; /* Next cached completion */
1635 char *output = NULL;
1636 char *tmp_command, *p;
1637 /* Pointer within tmp_command which corresponds to text. */
1638 char *word;
1639 struct cmd_list_element *c, *result_list;
1640
1641 if (matches == 0)
1642 {
1643 /* The caller is beginning to accumulate a new set of completions, so
1644 we need to find all of them now, and cache them for returning one at
1645 a time on future calls. */
1646
1647 if (list)
1648 {
1649 /* Free the storage used by LIST, but not by the strings inside.
1650 This is because rl_complete_internal () frees the strings. */
1651 free ((PTR)list);
1652 }
1653 list = 0;
1654 index = 0;
1655
1656 /* Choose the default set of word break characters to break completions.
1657 If we later find out that we are doing completions on command strings
1658 (as opposed to strings supplied by the individual command completer
1659 functions, which can be any string) then we will switch to the
1660 special word break set for command strings, which leaves out the
1661 '-' character used in some commands. */
1662
1663 rl_completer_word_break_characters =
1664 gdb_completer_word_break_characters;
1665
1666 /* Decide whether to complete on a list of gdb commands or on symbols. */
1667 tmp_command = (char *) alloca (point + 1);
1668 p = tmp_command;
1669
1670 strncpy (tmp_command, line_buffer, point);
1671 tmp_command[point] = '\0';
1672 /* Since text always contains some number of characters leading up
1673 to point, we can find the equivalent position in tmp_command
1674 by subtracting that many characters from the end of tmp_command. */
1675 word = tmp_command + point - strlen (text);
1676
1677 if (point == 0)
1678 {
1679 /* An empty line we want to consider ambiguous; that is, it
1680 could be any command. */
1681 c = (struct cmd_list_element *) -1;
1682 result_list = 0;
1683 }
1684 else
1685 {
1686 c = lookup_cmd_1 (&p, cmdlist, &result_list, 1);
1687 }
1688
1689 /* Move p up to the next interesting thing. */
1690 while (*p == ' ' || *p == '\t')
1691 {
1692 p++;
1693 }
1694
1695 if (!c)
1696 {
1697 /* It is an unrecognized command. So there are no
1698 possible completions. */
1699 list = NULL;
1700 }
1701 else if (c == (struct cmd_list_element *) -1)
1702 {
1703 char *q;
1704
1705 /* lookup_cmd_1 advances p up to the first ambiguous thing, but
1706 doesn't advance over that thing itself. Do so now. */
1707 q = p;
1708 while (*q && (isalnum (*q) || *q == '-' || *q == '_'))
1709 ++q;
1710 if (q != tmp_command + point)
1711 {
1712 /* There is something beyond the ambiguous
1713 command, so there are no possible completions. For
1714 example, "info t " or "info t foo" does not complete
1715 to anything, because "info t" can be "info target" or
1716 "info terminal". */
1717 list = NULL;
1718 }
1719 else
1720 {
1721 /* We're trying to complete on the command which was ambiguous.
1722 This we can deal with. */
1723 if (result_list)
1724 {
1725 list = complete_on_cmdlist (*result_list->prefixlist, p,
1726 word);
1727 }
1728 else
1729 {
1730 list = complete_on_cmdlist (cmdlist, p, word);
1731 }
1732 /* Insure that readline does the right thing with respect to
1733 inserting quotes. */
1734 rl_completer_word_break_characters =
1735 gdb_completer_command_word_break_characters;
1736 }
1737 }
1738 else
1739 {
1740 /* We've recognized a full command. */
1741
1742 if (p == tmp_command + point)
1743 {
1744 /* There is no non-whitespace in the line beyond the command. */
1745
1746 if (p[-1] == ' ' || p[-1] == '\t')
1747 {
1748 /* The command is followed by whitespace; we need to complete
1749 on whatever comes after command. */
1750 if (c->prefixlist)
1751 {
1752 /* It is a prefix command; what comes after it is
1753 a subcommand (e.g. "info "). */
1754 list = complete_on_cmdlist (*c->prefixlist, p, word);
1755
1756 /* Insure that readline does the right thing
1757 with respect to inserting quotes. */
1758 rl_completer_word_break_characters =
1759 gdb_completer_command_word_break_characters;
1760 }
1761 else if (c->enums)
1762 {
1763 list = complete_on_enum (c->enums, p, word);
1764 rl_completer_word_break_characters =
1765 gdb_completer_command_word_break_characters;
1766 }
1767 else
1768 {
1769 /* It is a normal command; what comes after it is
1770 completed by the command's completer function. */
1771 list = (*c->completer) (p, word);
1772 }
1773 }
1774 else
1775 {
1776 /* The command is not followed by whitespace; we need to
1777 complete on the command itself. e.g. "p" which is a
1778 command itself but also can complete to "print", "ptype"
1779 etc. */
1780 char *q;
1781
1782 /* Find the command we are completing on. */
1783 q = p;
1784 while (q > tmp_command)
1785 {
1786 if (isalnum (q[-1]) || q[-1] == '-' || q[-1] == '_')
1787 --q;
1788 else
1789 break;
1790 }
1791
1792 list = complete_on_cmdlist (result_list, q, word);
1793
1794 /* Insure that readline does the right thing
1795 with respect to inserting quotes. */
1796 rl_completer_word_break_characters =
1797 gdb_completer_command_word_break_characters;
1798 }
1799 }
1800 else
1801 {
1802 /* There is non-whitespace beyond the command. */
1803
1804 if (c->prefixlist && !c->allow_unknown)
1805 {
1806 /* It is an unrecognized subcommand of a prefix command,
1807 e.g. "info adsfkdj". */
1808 list = NULL;
1809 }
1810 else if (c->enums)
1811 {
1812 list = complete_on_enum (c->enums, p, word);
1813 }
1814 else
1815 {
1816 /* It is a normal command. */
1817 list = (*c->completer) (p, word);
1818 }
1819 }
1820 }
1821 }
1822
1823 /* If we found a list of potential completions during initialization then
1824 dole them out one at a time. The vector of completions is NULL
1825 terminated, so after returning the last one, return NULL (and continue
1826 to do so) each time we are called after that, until a new list is
1827 available. */
1828
1829 if (list)
1830 {
1831 output = list[index];
1832 if (output)
1833 {
1834 index++;
1835 }
1836 }
1837
1838 #if 0
1839 /* Can't do this because readline hasn't yet checked the word breaks
1840 for figuring out whether to insert a quote. */
1841 if (output == NULL)
1842 /* Make sure the word break characters are set back to normal for the
1843 next time that readline tries to complete something. */
1844 rl_completer_word_break_characters =
1845 gdb_completer_word_break_characters;
1846 #endif
1847
1848 return (output);
1849 }
1850
1851 /* Line completion interface function for readline. */
1852
1853 static char *
1854 readline_line_completion_function (text, matches)
1855 char *text;
1856 int matches;
1857 {
1858 return line_completion_function (text, matches, rl_line_buffer, rl_point);
1859 }
1860
1861 /* Skip over a possibly quoted word (as defined by the quote characters
1862 and word break characters the completer uses). Returns pointer to the
1863 location after the "word". */
1864
1865 char *
1866 skip_quoted (str)
1867 char *str;
1868 {
1869 char quote_char = '\0';
1870 char *scan;
1871
1872 for (scan = str; *scan != '\0'; scan++)
1873 {
1874 if (quote_char != '\0')
1875 {
1876 /* Ignore everything until the matching close quote char */
1877 if (*scan == quote_char)
1878 {
1879 /* Found matching close quote. */
1880 scan++;
1881 break;
1882 }
1883 }
1884 else if (strchr (gdb_completer_quote_characters, *scan))
1885 {
1886 /* Found start of a quoted string. */
1887 quote_char = *scan;
1888 }
1889 else if (strchr (gdb_completer_word_break_characters, *scan))
1890 {
1891 break;
1892 }
1893 }
1894 return (scan);
1895 }
1896
1897 \f
1898 #ifdef STOP_SIGNAL
1899 static void
1900 stop_sig (signo)
1901 int signo;
1902 {
1903 #if STOP_SIGNAL == SIGTSTP
1904 signal (SIGTSTP, SIG_DFL);
1905 sigsetmask (0);
1906 kill (getpid (), SIGTSTP);
1907 signal (SIGTSTP, stop_sig);
1908 #else
1909 signal (STOP_SIGNAL, stop_sig);
1910 #endif
1911 printf_unfiltered ("%s", prompt);
1912 gdb_flush (gdb_stdout);
1913
1914 /* Forget about any previous command -- null line now will do nothing. */
1915 dont_repeat ();
1916 }
1917 #endif /* STOP_SIGNAL */
1918
1919 /* Initialize signal handlers. */
1920 static void
1921 do_nothing (signo)
1922 int signo;
1923 {
1924 /* Under System V the default disposition of a signal is reinstated after
1925 the signal is caught and delivered to an application process. On such
1926 systems one must restore the replacement signal handler if one wishes
1927 to continue handling the signal in one's program. On BSD systems this
1928 is not needed but it is harmless, and it simplifies the code to just do
1929 it unconditionally. */
1930 signal (signo, do_nothing);
1931 }
1932
1933 static void
1934 init_signals ()
1935 {
1936 signal (SIGINT, request_quit);
1937
1938 /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
1939 to the inferior and breakpoints will be ignored. */
1940 #ifdef SIGTRAP
1941 signal (SIGTRAP, SIG_DFL);
1942 #endif
1943
1944 /* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
1945 passed to the inferior, which we don't want. It would be
1946 possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
1947 on BSD4.3 systems using vfork, that can affect the
1948 GDB process as well as the inferior (the signal handling tables
1949 might be in memory, shared between the two). Since we establish
1950 a handler for SIGQUIT, when we call exec it will set the signal
1951 to SIG_DFL for us. */
1952 signal (SIGQUIT, do_nothing);
1953 #ifdef SIGHUP
1954 if (signal (SIGHUP, do_nothing) != SIG_IGN)
1955 signal (SIGHUP, disconnect);
1956 #endif
1957 signal (SIGFPE, float_handler);
1958
1959 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1960 signal (SIGWINCH, SIGWINCH_HANDLER);
1961 #endif
1962 }
1963 \f
1964 /* Read one line from the command input stream `instream'
1965 into the local static buffer `linebuffer' (whose current length
1966 is `linelength').
1967 The buffer is made bigger as necessary.
1968 Returns the address of the start of the line.
1969
1970 NULL is returned for end of file.
1971
1972 *If* the instream == stdin & stdin is a terminal, the line read
1973 is copied into the file line saver (global var char *line,
1974 length linesize) so that it can be duplicated.
1975
1976 This routine either uses fancy command line editing or
1977 simple input as the user has requested. */
1978
1979 char *
1980 command_line_input (prrompt, repeat, annotation_suffix)
1981 char *prrompt;
1982 int repeat;
1983 char *annotation_suffix;
1984 {
1985 static char *linebuffer = 0;
1986 static unsigned linelength = 0;
1987 register char *p;
1988 char *p1;
1989 char *rl;
1990 char *local_prompt = prrompt;
1991 char *nline;
1992 char got_eof = 0;
1993
1994 /* The annotation suffix must be non-NULL. */
1995 if (annotation_suffix == NULL)
1996 annotation_suffix = "";
1997
1998 if (annotation_level > 1 && instream == stdin)
1999 {
2000 local_prompt = alloca ((prrompt == NULL ? 0 : strlen (prrompt))
2001 + strlen (annotation_suffix) + 40);
2002 if (prrompt == NULL)
2003 local_prompt[0] = '\0';
2004 else
2005 strcpy (local_prompt, prrompt);
2006 strcat (local_prompt, "\n\032\032");
2007 strcat (local_prompt, annotation_suffix);
2008 strcat (local_prompt, "\n");
2009 }
2010
2011 if (linebuffer == 0)
2012 {
2013 linelength = 80;
2014 linebuffer = (char *) xmalloc (linelength);
2015 }
2016
2017 p = linebuffer;
2018
2019 /* Control-C quits instantly if typed while in this loop
2020 since it should not wait until the user types a newline. */
2021 immediate_quit++;
2022 #ifdef STOP_SIGNAL
2023 if (job_control)
2024 signal (STOP_SIGNAL, stop_sig);
2025 #endif
2026
2027 while (1)
2028 {
2029 /* Make sure that all output has been output. Some machines may let
2030 you get away with leaving out some of the gdb_flush, but not all. */
2031 wrap_here ("");
2032 gdb_flush (gdb_stdout);
2033 gdb_flush (gdb_stderr);
2034
2035 if (source_file_name != NULL)
2036 {
2037 ++source_line_number;
2038 sprintf (source_error,
2039 "%s%s:%d: Error in sourced command file:\n",
2040 source_pre_error,
2041 source_file_name,
2042 source_line_number);
2043 error_pre_print = source_error;
2044 }
2045
2046 if (annotation_level > 1 && instream == stdin)
2047 {
2048 printf_unfiltered ("\n\032\032pre-");
2049 printf_unfiltered (annotation_suffix);
2050 printf_unfiltered ("\n");
2051 }
2052
2053 /* Don't use fancy stuff if not talking to stdin. */
2054 if (readline_hook && instream == NULL)
2055 {
2056 rl = (*readline_hook) (local_prompt);
2057 }
2058 else if (command_editing_p && instream == stdin && ISATTY (instream))
2059 {
2060 rl = readline (local_prompt);
2061 }
2062 else
2063 {
2064 rl = gdb_readline (local_prompt);
2065 }
2066
2067 if (annotation_level > 1 && instream == stdin)
2068 {
2069 printf_unfiltered ("\n\032\032post-");
2070 printf_unfiltered (annotation_suffix);
2071 printf_unfiltered ("\n");
2072 }
2073
2074 if (!rl || rl == (char *) EOF)
2075 {
2076 got_eof = 1;
2077 break;
2078 }
2079 if (strlen(rl) + 1 + (p - linebuffer) > linelength)
2080 {
2081 linelength = strlen(rl) + 1 + (p - linebuffer);
2082 nline = (char *) xrealloc (linebuffer, linelength);
2083 p += nline - linebuffer;
2084 linebuffer = nline;
2085 }
2086 p1 = rl;
2087 /* Copy line. Don't copy null at end. (Leaves line alone
2088 if this was just a newline) */
2089 while (*p1)
2090 *p++ = *p1++;
2091
2092 free (rl); /* Allocated in readline. */
2093
2094 if (p == linebuffer || *(p - 1) != '\\')
2095 break;
2096
2097 p--; /* Put on top of '\'. */
2098 local_prompt = (char *) 0;
2099 }
2100
2101 #ifdef STOP_SIGNAL
2102 if (job_control)
2103 signal (STOP_SIGNAL, SIG_DFL);
2104 #endif
2105 immediate_quit--;
2106
2107 if (got_eof)
2108 return NULL;
2109
2110 #define SERVER_COMMAND_LENGTH 7
2111 server_command =
2112 (p - linebuffer > SERVER_COMMAND_LENGTH)
2113 && STREQN (linebuffer, "server ", SERVER_COMMAND_LENGTH);
2114 if (server_command)
2115 {
2116 /* Note that we don't set `line'. Between this and the check in
2117 dont_repeat, this insures that repeating will still do the
2118 right thing. */
2119 *p = '\0';
2120 return linebuffer + SERVER_COMMAND_LENGTH;
2121 }
2122
2123 /* Do history expansion if that is wished. */
2124 if (history_expansion_p && instream == stdin
2125 && ISATTY (instream))
2126 {
2127 char *history_value;
2128 int expanded;
2129
2130 *p = '\0'; /* Insert null now. */
2131 expanded = history_expand (linebuffer, &history_value);
2132 if (expanded)
2133 {
2134 /* Print the changes. */
2135 printf_unfiltered ("%s\n", history_value);
2136
2137 /* If there was an error, call this function again. */
2138 if (expanded < 0)
2139 {
2140 free (history_value);
2141 return command_line_input (prrompt, repeat, annotation_suffix);
2142 }
2143 if (strlen (history_value) > linelength)
2144 {
2145 linelength = strlen (history_value) + 1;
2146 linebuffer = (char *) xrealloc (linebuffer, linelength);
2147 }
2148 strcpy (linebuffer, history_value);
2149 p = linebuffer + strlen(linebuffer);
2150 free (history_value);
2151 }
2152 }
2153
2154 /* If we just got an empty line, and that is supposed
2155 to repeat the previous command, return the value in the
2156 global buffer. */
2157 if (repeat && p == linebuffer)
2158 return line;
2159 for (p1 = linebuffer; *p1 == ' ' || *p1 == '\t'; p1++) ;
2160 if (repeat && !*p1)
2161 return line;
2162
2163 *p = 0;
2164
2165 /* Add line to history if appropriate. */
2166 if (instream == stdin
2167 && ISATTY (stdin) && *linebuffer)
2168 add_history (linebuffer);
2169
2170 /* Note: lines consisting solely of comments are added to the command
2171 history. This is useful when you type a command, and then
2172 realize you don't want to execute it quite yet. You can comment
2173 out the command and then later fetch it from the value history
2174 and remove the '#'. The kill ring is probably better, but some
2175 people are in the habit of commenting things out. */
2176 if (*p1 == '#')
2177 *p1 = '\0'; /* Found a comment. */
2178
2179 /* Save into global buffer if appropriate. */
2180 if (repeat)
2181 {
2182 if (linelength > linesize)
2183 {
2184 line = xrealloc (line, linelength);
2185 linesize = linelength;
2186 }
2187 strcpy (line, linebuffer);
2188 return line;
2189 }
2190
2191 return linebuffer;
2192 }
2193 \f
2194
2195 /* Expand the body_list of COMMAND so that it can hold NEW_LENGTH
2196 code bodies. This is typically used when we encounter an "else"
2197 clause for an "if" command. */
2198
2199 static void
2200 realloc_body_list (command, new_length)
2201 struct command_line *command;
2202 int new_length;
2203 {
2204 int n;
2205 struct command_line **body_list;
2206
2207 n = command->body_count;
2208
2209 /* Nothing to do? */
2210 if (new_length <= n)
2211 return;
2212
2213 body_list = (struct command_line **)
2214 xmalloc (sizeof (struct command_line *) * new_length);
2215
2216 memcpy (body_list, command->body_list, sizeof (struct command_line *) * n);
2217
2218 free (command->body_list);
2219 command->body_list = body_list;
2220 command->body_count = new_length;
2221 }
2222
2223 /* Read one line from the input stream. If the command is an "else" or
2224 "end", return such an indication to the caller. */
2225
2226 static enum misc_command_type
2227 read_next_line (command)
2228 struct command_line **command;
2229 {
2230 char *p, *p1, *prompt_ptr, control_prompt[256];
2231 int i = 0;
2232
2233 if (control_level >= 254)
2234 error ("Control nesting too deep!\n");
2235
2236 /* Set a prompt based on the nesting of the control commands. */
2237 if (instream == stdin || (instream == 0 && readline_hook != NULL))
2238 {
2239 for (i = 0; i < control_level; i++)
2240 control_prompt[i] = ' ';
2241 control_prompt[i] = '>';
2242 control_prompt[i+1] = '\0';
2243 prompt_ptr = (char *)&control_prompt[0];
2244 }
2245 else
2246 prompt_ptr = NULL;
2247
2248 p = command_line_input (prompt_ptr, instream == stdin, "commands");
2249
2250 /* Not sure what to do here. */
2251 if (p == NULL)
2252 return end_command;
2253
2254 /* Strip leading and trailing whitespace. */
2255 while (*p == ' ' || *p == '\t')
2256 p++;
2257
2258 p1 = p + strlen (p);
2259 while (p1 != p && (p1[-1] == ' ' || p1[-1] == '\t'))
2260 p1--;
2261
2262 /* Blanks and comments don't really do anything, but we need to
2263 distinguish them from else, end and other commands which can be
2264 executed. */
2265 if (p1 == p || p[0] == '#')
2266 return nop_command;
2267
2268 /* Is this the end of a simple, while, or if control structure? */
2269 if (p1 - p == 3 && !strncmp (p, "end", 3))
2270 return end_command;
2271
2272 /* Is the else clause of an if control structure? */
2273 if (p1 - p == 4 && !strncmp (p, "else", 4))
2274 return else_command;
2275
2276 /* Check for while, if, break, continue, etc and build a new command
2277 line structure for them. */
2278 if (p1 - p > 5 && !strncmp (p, "while", 5))
2279 *command = build_command_line (while_control, p + 6);
2280 else if (p1 - p > 2 && !strncmp (p, "if", 2))
2281 *command = build_command_line (if_control, p + 3);
2282 else if (p1 - p == 10 && !strncmp (p, "loop_break", 10))
2283 {
2284 *command = (struct command_line *)
2285 xmalloc (sizeof (struct command_line));
2286 (*command)->next = NULL;
2287 (*command)->line = NULL;
2288 (*command)->control_type = break_control;
2289 (*command)->body_count = 0;
2290 (*command)->body_list = NULL;
2291 }
2292 else if (p1 - p == 13 && !strncmp (p, "loop_continue", 13))
2293 {
2294 *command = (struct command_line *)
2295 xmalloc (sizeof (struct command_line));
2296 (*command)->next = NULL;
2297 (*command)->line = NULL;
2298 (*command)->control_type = continue_control;
2299 (*command)->body_count = 0;
2300 (*command)->body_list = NULL;
2301 }
2302 else
2303 {
2304 /* A normal command. */
2305 *command = (struct command_line *)
2306 xmalloc (sizeof (struct command_line));
2307 (*command)->next = NULL;
2308 (*command)->line = savestring (p, p1 - p);
2309 (*command)->control_type = simple_control;
2310 (*command)->body_count = 0;
2311 (*command)->body_list = NULL;
2312 }
2313
2314 /* Nothing special. */
2315 return ok_command;
2316 }
2317
2318 /* Recursively read in the control structures and create a command_line
2319 structure from them.
2320
2321 The parent_control parameter is the control structure in which the
2322 following commands are nested. */
2323
2324 static enum command_control_type
2325 recurse_read_control_structure (current_cmd)
2326 struct command_line *current_cmd;
2327 {
2328 int current_body, i;
2329 enum misc_command_type val;
2330 enum command_control_type ret;
2331 struct command_line **body_ptr, *child_tail, *next;
2332
2333 child_tail = NULL;
2334 current_body = 1;
2335
2336 /* Sanity checks. */
2337 if (current_cmd->control_type == simple_control)
2338 {
2339 error ("Recursed on a simple control type\n");
2340 return invalid_control;
2341 }
2342
2343 if (current_body > current_cmd->body_count)
2344 {
2345 error ("Allocated body is smaller than this command type needs\n");
2346 return invalid_control;
2347 }
2348
2349 /* Read lines from the input stream and build control structures. */
2350 while (1)
2351 {
2352 dont_repeat ();
2353
2354 next = NULL;
2355 val = read_next_line (&next);
2356
2357 /* Just skip blanks and comments. */
2358 if (val == nop_command)
2359 continue;
2360
2361 if (val == end_command)
2362 {
2363 if (current_cmd->control_type == while_control
2364 || current_cmd->control_type == if_control)
2365 {
2366 /* Success reading an entire control structure. */
2367 ret = simple_control;
2368 break;
2369 }
2370 else
2371 {
2372 ret = invalid_control;
2373 break;
2374 }
2375 }
2376
2377 /* Not the end of a control structure. */
2378 if (val == else_command)
2379 {
2380 if (current_cmd->control_type == if_control
2381 && current_body == 1)
2382 {
2383 realloc_body_list (current_cmd, 2);
2384 current_body = 2;
2385 child_tail = NULL;
2386 continue;
2387 }
2388 else
2389 {
2390 ret = invalid_control;
2391 break;
2392 }
2393 }
2394
2395 if (child_tail)
2396 {
2397 child_tail->next = next;
2398 }
2399 else
2400 {
2401 body_ptr = current_cmd->body_list;
2402 for (i = 1; i < current_body; i++)
2403 body_ptr++;
2404
2405 *body_ptr = next;
2406
2407 }
2408
2409 child_tail = next;
2410
2411 /* If the latest line is another control structure, then recurse
2412 on it. */
2413 if (next->control_type == while_control
2414 || next->control_type == if_control)
2415 {
2416 control_level++;
2417 ret = recurse_read_control_structure (next);
2418 control_level--;
2419
2420 if (ret != simple_control)
2421 break;
2422 }
2423 }
2424
2425 dont_repeat ();
2426
2427 return ret;
2428 }
2429
2430 /* Read lines from the input stream and accumulate them in a chain of
2431 struct command_line's, which is then returned. For input from a
2432 terminal, the special command "end" is used to mark the end of the
2433 input, and is not included in the returned chain of commands. */
2434
2435 #define END_MESSAGE "End with a line saying just \"end\"."
2436
2437 struct command_line *
2438 read_command_lines (prompt, from_tty)
2439 char *prompt;
2440 int from_tty;
2441 {
2442 struct command_line *head, *tail, *next;
2443 struct cleanup *old_chain;
2444 enum command_control_type ret;
2445 enum misc_command_type val;
2446
2447 if (readline_begin_hook)
2448 {
2449 /* Note - intentional to merge messages with no newline */
2450 (*readline_begin_hook) ("%s %s\n", prompt, END_MESSAGE);
2451 }
2452 else if (from_tty && input_from_terminal_p ())
2453 {
2454 printf_unfiltered ("%s\n%s\n", prompt, END_MESSAGE);
2455 gdb_flush (gdb_stdout);
2456 }
2457
2458 head = tail = NULL;
2459 old_chain = NULL;
2460
2461 while (1)
2462 {
2463 val = read_next_line (&next);
2464
2465 /* Ignore blank lines or comments. */
2466 if (val == nop_command)
2467 continue;
2468
2469 if (val == end_command)
2470 {
2471 ret = simple_control;
2472 break;
2473 }
2474
2475 if (val != ok_command)
2476 {
2477 ret = invalid_control;
2478 break;
2479 }
2480
2481 if (next->control_type == while_control
2482 || next->control_type == if_control)
2483 {
2484 control_level++;
2485 ret = recurse_read_control_structure (next);
2486 control_level--;
2487
2488 if (ret == invalid_control)
2489 break;
2490 }
2491
2492 if (tail)
2493 {
2494 tail->next = next;
2495 }
2496 else
2497 {
2498 head = next;
2499 old_chain = make_cleanup (free_command_lines, &head);
2500 }
2501 tail = next;
2502 }
2503
2504 dont_repeat ();
2505
2506 if (head)
2507 {
2508 if (ret != invalid_control)
2509 {
2510 discard_cleanups (old_chain);
2511 }
2512 else
2513 do_cleanups (old_chain);
2514 }
2515
2516 if (readline_end_hook)
2517 {
2518 (*readline_end_hook) ();
2519 }
2520 return (head);
2521 }
2522
2523 /* Free a chain of struct command_line's. */
2524
2525 void
2526 free_command_lines (lptr)
2527 struct command_line **lptr;
2528 {
2529 register struct command_line *l = *lptr;
2530 register struct command_line *next;
2531 struct command_line **blist;
2532 int i;
2533
2534 while (l)
2535 {
2536 if (l->body_count > 0)
2537 {
2538 blist = l->body_list;
2539 for (i = 0; i < l->body_count; i++, blist++)
2540 free_command_lines (blist);
2541 }
2542 next = l->next;
2543 free (l->line);
2544 free ((PTR)l);
2545 l = next;
2546 }
2547 }
2548 \f
2549 /* Add an element to the list of info subcommands. */
2550
2551 void
2552 add_info (name, fun, doc)
2553 char *name;
2554 void (*fun) PARAMS ((char *, int));
2555 char *doc;
2556 {
2557 add_cmd (name, no_class, fun, doc, &infolist);
2558 }
2559
2560 /* Add an alias to the list of info subcommands. */
2561
2562 void
2563 add_info_alias (name, oldname, abbrev_flag)
2564 char *name;
2565 char *oldname;
2566 int abbrev_flag;
2567 {
2568 add_alias_cmd (name, oldname, 0, abbrev_flag, &infolist);
2569 }
2570
2571 /* The "info" command is defined as a prefix, with allow_unknown = 0.
2572 Therefore, its own definition is called only for "info" with no args. */
2573
2574 /* ARGSUSED */
2575 static void
2576 info_command (arg, from_tty)
2577 char *arg;
2578 int from_tty;
2579 {
2580 printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
2581 help_list (infolist, "info ", -1, gdb_stdout);
2582 }
2583
2584 /* The "complete" command is used by Emacs to implement completion. */
2585
2586 /* ARGSUSED */
2587 static void
2588 complete_command (arg, from_tty)
2589 char *arg;
2590 int from_tty;
2591 {
2592 int i;
2593 int argpoint;
2594 char *completion;
2595
2596 dont_repeat ();
2597
2598 if (arg == NULL)
2599 arg = "";
2600 argpoint = strlen (arg);
2601
2602 for (completion = line_completion_function (arg, i = 0, arg, argpoint);
2603 completion;
2604 completion = line_completion_function (arg, ++i, arg, argpoint))
2605 {
2606 printf_unfiltered ("%s\n", completion);
2607 free (completion);
2608 }
2609 }
2610
2611 /* The "show" command with no arguments shows all the settings. */
2612
2613 /* ARGSUSED */
2614 static void
2615 show_command (arg, from_tty)
2616 char *arg;
2617 int from_tty;
2618 {
2619 cmd_show_list (showlist, from_tty, "");
2620 }
2621 \f
2622 /* Add an element to the list of commands. */
2623
2624 void
2625 add_com (name, class, fun, doc)
2626 char *name;
2627 enum command_class class;
2628 void (*fun) PARAMS ((char *, int));
2629 char *doc;
2630 {
2631 add_cmd (name, class, fun, doc, &cmdlist);
2632 }
2633
2634 /* Add an alias or abbreviation command to the list of commands. */
2635
2636 void
2637 add_com_alias (name, oldname, class, abbrev_flag)
2638 char *name;
2639 char *oldname;
2640 enum command_class class;
2641 int abbrev_flag;
2642 {
2643 add_alias_cmd (name, oldname, class, abbrev_flag, &cmdlist);
2644 }
2645
2646 void
2647 error_no_arg (why)
2648 char *why;
2649 {
2650 error ("Argument required (%s).", why);
2651 }
2652
2653 /* ARGSUSED */
2654 static void
2655 help_command (command, from_tty)
2656 char *command;
2657 int from_tty; /* Ignored */
2658 {
2659 help_cmd (command, gdb_stdout);
2660 }
2661 \f
2662 static void
2663 validate_comname (comname)
2664 char *comname;
2665 {
2666 register char *p;
2667
2668 if (comname == 0)
2669 error_no_arg ("name of command to define");
2670
2671 p = comname;
2672 while (*p)
2673 {
2674 if (!isalnum(*p) && *p != '-' && *p != '_')
2675 error ("Junk in argument list: \"%s\"", p);
2676 p++;
2677 }
2678 }
2679
2680 /* This is just a placeholder in the command data structures. */
2681 static void
2682 user_defined_command (ignore, from_tty)
2683 char *ignore;
2684 int from_tty;
2685 {
2686 }
2687
2688 static void
2689 define_command (comname, from_tty)
2690 char *comname;
2691 int from_tty;
2692 {
2693 register struct command_line *cmds;
2694 register struct cmd_list_element *c, *newc, *hookc = 0;
2695 char *tem = comname;
2696 char tmpbuf[128];
2697 #define HOOK_STRING "hook-"
2698 #define HOOK_LEN 5
2699
2700 validate_comname (comname);
2701
2702 /* Look it up, and verify that we got an exact match. */
2703 c = lookup_cmd (&tem, cmdlist, "", -1, 1);
2704 if (c && !STREQ (comname, c->name))
2705 c = 0;
2706
2707 if (c)
2708 {
2709 if (c->class == class_user || c->class == class_alias)
2710 tem = "Redefine command \"%s\"? ";
2711 else
2712 tem = "Really redefine built-in command \"%s\"? ";
2713 if (!query (tem, c->name))
2714 error ("Command \"%s\" not redefined.", c->name);
2715 }
2716
2717 /* If this new command is a hook, then mark the command which it
2718 is hooking. Note that we allow hooking `help' commands, so that
2719 we can hook the `stop' pseudo-command. */
2720
2721 if (!strncmp (comname, HOOK_STRING, HOOK_LEN))
2722 {
2723 /* Look up cmd it hooks, and verify that we got an exact match. */
2724 tem = comname+HOOK_LEN;
2725 hookc = lookup_cmd (&tem, cmdlist, "", -1, 0);
2726 if (hookc && !STREQ (comname+HOOK_LEN, hookc->name))
2727 hookc = 0;
2728 if (!hookc)
2729 {
2730 warning ("Your new `%s' command does not hook any existing command.",
2731 comname);
2732 if (!query ("Proceed? "))
2733 error ("Not confirmed.");
2734 }
2735 }
2736
2737 comname = savestring (comname, strlen (comname));
2738
2739 /* If the rest of the commands will be case insensitive, this one
2740 should behave in the same manner. */
2741 for (tem = comname; *tem; tem++)
2742 if (isupper(*tem)) *tem = tolower(*tem);
2743
2744 control_level = 0;
2745 sprintf (tmpbuf, "Type commands for definition of \"%s\".", comname);
2746 cmds = read_command_lines (tmpbuf, from_tty);
2747
2748 if (c && c->class == class_user)
2749 free_command_lines (&c->user_commands);
2750
2751 newc = add_cmd (comname, class_user, user_defined_command,
2752 (c && c->class == class_user)
2753 ? c->doc : savestring ("User-defined.", 13), &cmdlist);
2754 newc->user_commands = cmds;
2755
2756 /* If this new command is a hook, then mark both commands as being
2757 tied. */
2758 if (hookc)
2759 {
2760 hookc->hook = newc; /* Target gets hooked. */
2761 newc->hookee = hookc; /* We are marked as hooking target cmd. */
2762 }
2763 }
2764
2765 static void
2766 document_command (comname, from_tty)
2767 char *comname;
2768 int from_tty;
2769 {
2770 struct command_line *doclines;
2771 register struct cmd_list_element *c;
2772 char *tem = comname;
2773 char tmpbuf[128];
2774
2775 validate_comname (comname);
2776
2777 c = lookup_cmd (&tem, cmdlist, "", 0, 1);
2778
2779 if (c->class != class_user)
2780 error ("Command \"%s\" is built-in.", comname);
2781
2782 sprintf (tmpbuf, "Type documentation for \"%s\".", comname);
2783 doclines = read_command_lines (tmpbuf, from_tty);
2784
2785 if (c->doc) free (c->doc);
2786
2787 {
2788 register struct command_line *cl1;
2789 register int len = 0;
2790
2791 for (cl1 = doclines; cl1; cl1 = cl1->next)
2792 len += strlen (cl1->line) + 1;
2793
2794 c->doc = (char *) xmalloc (len + 1);
2795 *c->doc = 0;
2796
2797 for (cl1 = doclines; cl1; cl1 = cl1->next)
2798 {
2799 strcat (c->doc, cl1->line);
2800 if (cl1->next)
2801 strcat (c->doc, "\n");
2802 }
2803 }
2804
2805 free_command_lines (&doclines);
2806 }
2807 \f
2808 void
2809 print_gdb_version (stream)
2810 GDB_FILE *stream;
2811 {
2812 /* From GNU coding standards, first line is meant to be easy for a
2813 program to parse, and is just canonical program name and version
2814 number, which starts after last space. */
2815
2816 fprintf_filtered (stream, "GNU gdb %s\n", version);
2817
2818 /* Second line is a copyright notice. */
2819
2820 fprintf_filtered (stream, "Copyright 1998 Free Software Foundation, Inc.\n");
2821
2822 /* Following the copyright is a brief statement that the program is
2823 free software, that users are free to copy and change it on
2824 certain conditions, that it is covered by the GNU GPL, and that
2825 there is no warranty. */
2826
2827 fprintf_filtered (stream, "\
2828 GDB is free software, covered by the GNU General Public License, and you are\n\
2829 welcome to change it and/or distribute copies of it under certain conditions.\n\
2830 Type \"show copying\" to see the conditions.\n\
2831 There is absolutely no warranty for GDB. Type \"show warranty\" for details.\n");
2832
2833 /* After the required info we print the configuration information. */
2834
2835 fprintf_filtered (stream, "This GDB was configured as \"");
2836 if (!STREQ (host_name, target_name))
2837 {
2838 fprintf_filtered (stream, "--host=%s --target=%s", host_name, target_name);
2839 }
2840 else
2841 {
2842 fprintf_filtered (stream, "%s", host_name);
2843 }
2844 fprintf_filtered (stream, "\".");
2845 }
2846
2847 /* ARGSUSED */
2848 static void
2849 show_version (args, from_tty)
2850 char *args;
2851 int from_tty;
2852 {
2853 immediate_quit++;
2854 print_gdb_version (gdb_stdout);
2855 printf_filtered ("\n");
2856 immediate_quit--;
2857 }
2858 \f
2859 /* xgdb calls this to reprint the usual GDB prompt. Obsolete now that xgdb
2860 is obsolete. */
2861
2862 void
2863 print_prompt ()
2864 {
2865 printf_unfiltered ("%s", prompt);
2866 gdb_flush (gdb_stdout);
2867 }
2868
2869 /* This replaces the above for the frontends: it returns a pointer
2870 to the prompt. */
2871 char *
2872 get_prompt ()
2873 {
2874 return prompt;
2875 }
2876 \f
2877 /* If necessary, make the user confirm that we should quit. Return
2878 non-zero if we should quit, zero if we shouldn't. */
2879
2880 int
2881 quit_confirm ()
2882 {
2883 if (inferior_pid != 0 && target_has_execution)
2884 {
2885 char *s;
2886
2887 /* This is something of a hack. But there's no reliable way to
2888 see if a GUI is running. The `use_windows' variable doesn't
2889 cut it. */
2890 if (init_ui_hook)
2891 s = "A debugging session is active.\nDo you still want to close the debugger?";
2892 else if (attach_flag)
2893 s = "The program is running. Quit anyway (and detach it)? ";
2894 else
2895 s = "The program is running. Exit anyway? ";
2896
2897 if (! query (s))
2898 return 0;
2899 }
2900
2901 return 1;
2902 }
2903
2904 /* Quit without asking for confirmation. */
2905
2906 void
2907 quit_force (args, from_tty)
2908 char *args;
2909 int from_tty;
2910 {
2911 int exit_code = 0;
2912
2913 /* An optional expression may be used to cause gdb to terminate with the
2914 value of that expression. */
2915 if (args)
2916 {
2917 value_ptr val = parse_and_eval (args);
2918
2919 exit_code = (int) value_as_long (val);
2920 }
2921
2922 if (inferior_pid != 0 && target_has_execution)
2923 {
2924 if (attach_flag)
2925 target_detach (args, from_tty);
2926 else
2927 target_kill ();
2928 }
2929
2930 /* UDI wants this, to kill the TIP. */
2931 target_close (1);
2932
2933 /* Save the history information if it is appropriate to do so. */
2934 if (write_history_p && history_filename)
2935 write_history (history_filename);
2936
2937 do_final_cleanups(ALL_CLEANUPS); /* Do any final cleanups before exiting */
2938
2939 exit (exit_code);
2940 }
2941
2942 /* Handle the quit command. */
2943
2944 void
2945 quit_command (args, from_tty)
2946 char *args;
2947 int from_tty;
2948 {
2949 if (! quit_confirm ())
2950 error ("Not confirmed.");
2951 quit_force (args, from_tty);
2952 }
2953
2954 /* Returns whether GDB is running on a terminal and whether the user
2955 desires that questions be asked of them on that terminal. */
2956
2957 int
2958 input_from_terminal_p ()
2959 {
2960 return gdb_has_a_terminal () && (instream == stdin) & caution;
2961 }
2962 \f
2963 /* ARGSUSED */
2964 static void
2965 pwd_command (args, from_tty)
2966 char *args;
2967 int from_tty;
2968 {
2969 if (args) error ("The \"pwd\" command does not take an argument: %s", args);
2970 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
2971
2972 if (!STREQ (gdb_dirbuf, current_directory))
2973 printf_unfiltered ("Working directory %s\n (canonically %s).\n",
2974 current_directory, gdb_dirbuf);
2975 else
2976 printf_unfiltered ("Working directory %s.\n", current_directory);
2977 }
2978
2979 void
2980 cd_command (dir, from_tty)
2981 char *dir;
2982 int from_tty;
2983 {
2984 int len;
2985 /* Found something other than leading repetitions of "/..". */
2986 int found_real_path;
2987 char *p;
2988
2989 /* If the new directory is absolute, repeat is a no-op; if relative,
2990 repeat might be useful but is more likely to be a mistake. */
2991 dont_repeat ();
2992
2993 if (dir == 0)
2994 error_no_arg ("new working directory");
2995
2996 dir = tilde_expand (dir);
2997 make_cleanup (free, dir);
2998
2999 if (chdir (dir) < 0)
3000 perror_with_name (dir);
3001
3002 len = strlen (dir);
3003 dir = savestring (dir, len - (len > 1 && SLASH_P(dir[len-1])));
3004 if (ROOTED_P(dir))
3005 current_directory = dir;
3006 else
3007 {
3008 if (SLASH_P (current_directory[0]) && current_directory[1] == '\0')
3009 current_directory = concat (current_directory, dir, NULL);
3010 else
3011 current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
3012 free (dir);
3013 }
3014
3015 /* Now simplify any occurrences of `.' and `..' in the pathname. */
3016
3017 found_real_path = 0;
3018 for (p = current_directory; *p;)
3019 {
3020 if (SLASH_P (p[0]) && p[1] == '.' && (p[2] == 0 || SLASH_P (p[2])))
3021 strcpy (p, p + 2);
3022 else if (SLASH_P (p[0]) && p[1] == '.' && p[2] == '.'
3023 && (p[3] == 0 || SLASH_P (p[3])))
3024 {
3025 if (found_real_path)
3026 {
3027 /* Search backwards for the directory just before the "/.."
3028 and obliterate it and the "/..". */
3029 char *q = p;
3030 while (q != current_directory && ! SLASH_P (q[-1]))
3031 --q;
3032
3033 if (q == current_directory)
3034 /* current_directory is
3035 a relative pathname ("can't happen"--leave it alone). */
3036 ++p;
3037 else
3038 {
3039 strcpy (q - 1, p + 3);
3040 p = q - 1;
3041 }
3042 }
3043 else
3044 /* We are dealing with leading repetitions of "/..", for example
3045 "/../..", which is the Mach super-root. */
3046 p += 3;
3047 }
3048 else
3049 {
3050 found_real_path = 1;
3051 ++p;
3052 }
3053 }
3054
3055 forget_cached_source_info ();
3056
3057 if (from_tty)
3058 pwd_command ((char *) 0, 1);
3059 }
3060 \f
3061 struct source_cleanup_lines_args {
3062 int old_line;
3063 char *old_file;
3064 char *old_pre_error;
3065 char *old_error_pre_print;
3066 };
3067
3068 static void
3069 source_cleanup_lines (args)
3070 PTR args;
3071 {
3072 struct source_cleanup_lines_args *p =
3073 (struct source_cleanup_lines_args *)args;
3074 source_line_number = p->old_line;
3075 source_file_name = p->old_file;
3076 source_pre_error = p->old_pre_error;
3077 error_pre_print = p->old_error_pre_print;
3078 }
3079
3080 /* ARGSUSED */
3081 void
3082 source_command (args, from_tty)
3083 char *args;
3084 int from_tty;
3085 {
3086 FILE *stream;
3087 struct cleanup *old_cleanups;
3088 char *file = args;
3089 struct source_cleanup_lines_args old_lines;
3090 int needed_length;
3091
3092 if (file == NULL)
3093 {
3094 error ("source command requires pathname of file to source.");
3095 }
3096
3097 file = tilde_expand (file);
3098 old_cleanups = make_cleanup (free, file);
3099
3100 stream = fopen (file, FOPEN_RT);
3101 if (!stream)
3102 if (from_tty)
3103 perror_with_name (file);
3104 else
3105 return;
3106
3107 make_cleanup (fclose, stream);
3108
3109 old_lines.old_line = source_line_number;
3110 old_lines.old_file = source_file_name;
3111 old_lines.old_pre_error = source_pre_error;
3112 old_lines.old_error_pre_print = error_pre_print;
3113 make_cleanup (source_cleanup_lines, &old_lines);
3114 source_line_number = 0;
3115 source_file_name = file;
3116 source_pre_error = error_pre_print == NULL ? "" : error_pre_print;
3117 source_pre_error = savestring (source_pre_error, strlen (source_pre_error));
3118 make_cleanup (free, source_pre_error);
3119 /* This will get set every time we read a line. So it won't stay "" for
3120 long. */
3121 error_pre_print = "";
3122
3123 needed_length = strlen (source_file_name) + strlen (source_pre_error) + 80;
3124 if (source_error_allocated < needed_length)
3125 {
3126 source_error_allocated *= 2;
3127 if (source_error_allocated < needed_length)
3128 source_error_allocated = needed_length;
3129 if (source_error == NULL)
3130 source_error = xmalloc (source_error_allocated);
3131 else
3132 source_error = xrealloc (source_error, source_error_allocated);
3133 }
3134
3135 read_command_file (stream);
3136
3137 do_cleanups (old_cleanups);
3138 }
3139
3140 /* ARGSUSED */
3141 static void
3142 echo_command (text, from_tty)
3143 char *text;
3144 int from_tty;
3145 {
3146 char *p = text;
3147 register int c;
3148
3149 if (text)
3150 while ((c = *p++) != '\0')
3151 {
3152 if (c == '\\')
3153 {
3154 /* \ at end of argument is used after spaces
3155 so they won't be lost. */
3156 if (*p == 0)
3157 return;
3158
3159 c = parse_escape (&p);
3160 if (c >= 0)
3161 printf_filtered ("%c", c);
3162 }
3163 else
3164 printf_filtered ("%c", c);
3165 }
3166
3167 /* Force this output to appear now. */
3168 wrap_here ("");
3169 gdb_flush (gdb_stdout);
3170 }
3171
3172 /* ARGSUSED */
3173 static void
3174 dont_repeat_command (ignored, from_tty)
3175 char *ignored;
3176 int from_tty;
3177 {
3178 *line = 0; /* Can't call dont_repeat here because we're not
3179 necessarily reading from stdin. */
3180 }
3181 \f
3182 /* Functions to manipulate the endianness of the target. */
3183
3184 #ifdef TARGET_BYTE_ORDER_SELECTABLE
3185 #ifndef TARGET_BYTE_ORDER_DEFAULT
3186 #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN
3187 #endif
3188 int target_byte_order = TARGET_BYTE_ORDER_DEFAULT;
3189 int target_byte_order_auto = 1;
3190 #else
3191 static int target_byte_order_auto = 0;
3192 #endif
3193
3194 /* Called if the user enters ``set endian'' without an argument. */
3195 static void
3196 set_endian (args, from_tty)
3197 char *args;
3198 int from_tty;
3199 {
3200 printf_unfiltered ("\"set endian\" must be followed by \"auto\", \"big\" or \"little\".\n");
3201 show_endian (args, from_tty);
3202 }
3203
3204 /* Called by ``set endian big''. */
3205 static void
3206 set_endian_big (args, from_tty)
3207 char *args;
3208 int from_tty;
3209 {
3210 #ifdef TARGET_BYTE_ORDER_SELECTABLE
3211 target_byte_order = BIG_ENDIAN;
3212 target_byte_order_auto = 0;
3213 #else
3214 printf_unfiltered ("Byte order is not selectable.");
3215 show_endian (args, from_tty);
3216 #endif
3217 }
3218
3219 /* Called by ``set endian little''. */
3220 static void
3221 set_endian_little (args, from_tty)
3222 char *args;
3223 int from_tty;
3224 {
3225 #ifdef TARGET_BYTE_ORDER_SELECTABLE
3226 target_byte_order = LITTLE_ENDIAN;
3227 target_byte_order_auto = 0;
3228 #else
3229 printf_unfiltered ("Byte order is not selectable.");
3230 show_endian (args, from_tty);
3231 #endif
3232 }
3233
3234 /* Called by ``set endian auto''. */
3235 static void
3236 set_endian_auto (args, from_tty)
3237 char *args;
3238 int from_tty;
3239 {
3240 #ifdef TARGET_BYTE_ORDER_SELECTABLE
3241 target_byte_order_auto = 1;
3242 #else
3243 printf_unfiltered ("Byte order is not selectable.");
3244 show_endian (args, from_tty);
3245 #endif
3246 }
3247
3248 /* Called by ``show endian''. */
3249 static void
3250 show_endian (args, from_tty)
3251 char *args;
3252 int from_tty;
3253 {
3254 const char *msg =
3255 (target_byte_order_auto
3256 ? "The target endianness is set automatically (currently %s endian)\n"
3257 : "The target is assumed to be %s endian\n");
3258 printf_unfiltered ((char *) msg, TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
3259 }
3260
3261 /* Set the endianness from a BFD. */
3262 void
3263 set_endian_from_file (abfd)
3264 bfd *abfd;
3265 {
3266 #ifdef TARGET_BYTE_ORDER_SELECTABLE
3267 int want;
3268
3269 if (bfd_big_endian (abfd))
3270 want = BIG_ENDIAN;
3271 else
3272 want = LITTLE_ENDIAN;
3273 if (target_byte_order_auto)
3274 target_byte_order = want;
3275 else if (target_byte_order != want)
3276 warning ("%s endian file does not match %s endian target.",
3277 want == BIG_ENDIAN ? "big" : "little",
3278 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
3279
3280 #else /* ! defined (TARGET_BYTE_ORDER_SELECTABLE) */
3281
3282 if (bfd_big_endian (abfd)
3283 ? TARGET_BYTE_ORDER != BIG_ENDIAN
3284 : TARGET_BYTE_ORDER == BIG_ENDIAN)
3285 warning ("%s endian file does not match %s endian target.",
3286 bfd_big_endian (abfd) ? "big" : "little",
3287 TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
3288
3289 #endif /* ! defined (TARGET_BYTE_ORDER_SELECTABLE) */
3290 }
3291 \f
3292 /* Functions to manipulate the architecture of the target */
3293
3294 int target_architecture_auto = 1;
3295 extern const bfd_arch_info_type bfd_default_arch_struct;
3296 const bfd_arch_info_type *target_architecture = &bfd_default_arch_struct;
3297 int (*target_architecture_hook) PARAMS ((const bfd_arch_info_type *ap));
3298
3299 static void
3300 set_arch (arch)
3301 const bfd_arch_info_type *arch;
3302 {
3303 /* FIXME: Is it compatible with gdb? */
3304 /* Check with the target on the setting */
3305 if (target_architecture_hook != NULL
3306 && !target_architecture_hook (arch))
3307 printf_unfiltered ("Target does not support `%s' architecture.\n",
3308 arch->printable_name);
3309 else
3310 {
3311 target_architecture_auto = 0;
3312 target_architecture = arch;
3313 }
3314 }
3315
3316
3317 /* Called if the user enters ``set architecture'' with or without an
3318 argument. */
3319 static void
3320 set_architecture (args, from_tty)
3321 char *args;
3322 int from_tty;
3323 {
3324 if (args == NULL)
3325 {
3326 printf_unfiltered ("\"set architecture\" must be followed by \"auto\" or an architecture name.\n");
3327 }
3328 else if (strcmp (args, "auto") == 0)
3329 {
3330 target_architecture_auto = 1;
3331 }
3332 else
3333 {
3334 const bfd_arch_info_type *arch = bfd_scan_arch (args);
3335 if (arch != NULL)
3336 set_arch (arch);
3337 else
3338 printf_unfiltered ("Architecture `%s' not reconized.\n", args);
3339 }
3340 }
3341
3342 /* Called if the user enters ``show architecture'' without an argument. */
3343 static void
3344 show_architecture (args, from_tty)
3345 char *args;
3346 int from_tty;
3347 {
3348 const char *arch;
3349 arch = target_architecture->printable_name;
3350 if (target_architecture_auto)
3351 printf_filtered ("The target architecture is set automatically (currently %s)\n", arch);
3352 else
3353 printf_filtered ("The target architecture is assumed to be %s\n", arch);
3354 }
3355
3356 /* Called if the user enters ``info architecture'' without an argument. */
3357 static void
3358 info_architecture (args, from_tty)
3359 char *args;
3360 int from_tty;
3361 {
3362 enum bfd_architecture a;
3363 printf_filtered ("Available architectures are:\n");
3364 for (a = bfd_arch_obscure + 1; a < bfd_arch_last; a++)
3365 {
3366 const bfd_arch_info_type *ap = bfd_lookup_arch (a, 0);
3367 if (ap != NULL)
3368 {
3369 do
3370 {
3371 printf_filtered (" %s", ap->printable_name);
3372 ap = ap->next;
3373 }
3374 while (ap != NULL);
3375 printf_filtered ("\n");
3376 }
3377 }
3378 }
3379
3380 /* Set the architecture from arch/machine */
3381 void
3382 set_architecture_from_arch_mach (arch, mach)
3383 enum bfd_architecture arch;
3384 unsigned long mach;
3385 {
3386 const bfd_arch_info_type *wanted = bfd_lookup_arch (arch, mach);
3387 if (wanted != NULL)
3388 set_arch (wanted);
3389 else
3390 fatal ("hardwired architecture/machine not reconized");
3391 }
3392
3393
3394 /* Set the architecture from a BFD */
3395 void
3396 set_architecture_from_file (abfd)
3397 bfd *abfd;
3398 {
3399 const bfd_arch_info_type *wanted = bfd_get_arch_info (abfd);
3400 if (target_architecture_auto)
3401 {
3402 if (target_architecture_hook != NULL
3403 && !target_architecture_hook (wanted))
3404 warning ("Target may not support %s architecture",
3405 wanted->printable_name);
3406 target_architecture = wanted;
3407 }
3408 else if (wanted != target_architecture)
3409 {
3410 warning ("%s architecture file may be incompatible with %s target.",
3411 wanted->printable_name,
3412 target_architecture->printable_name);
3413 }
3414 }
3415 \f
3416 /* Functions to manipulate command line editing control variables. */
3417
3418 /* Number of commands to print in each call to show_commands. */
3419 #define Hist_print 10
3420 static void
3421 show_commands (args, from_tty)
3422 char *args;
3423 int from_tty;
3424 {
3425 /* Index for history commands. Relative to history_base. */
3426 int offset;
3427
3428 /* Number of the history entry which we are planning to display next.
3429 Relative to history_base. */
3430 static int num = 0;
3431
3432 /* The first command in the history which doesn't exist (i.e. one more
3433 than the number of the last command). Relative to history_base. */
3434 int hist_len;
3435
3436 extern HIST_ENTRY *history_get PARAMS ((int));
3437
3438 /* Print out some of the commands from the command history. */
3439 /* First determine the length of the history list. */
3440 hist_len = history_size;
3441 for (offset = 0; offset < history_size; offset++)
3442 {
3443 if (!history_get (history_base + offset))
3444 {
3445 hist_len = offset;
3446 break;
3447 }
3448 }
3449
3450 if (args)
3451 {
3452 if (args[0] == '+' && args[1] == '\0')
3453 /* "info editing +" should print from the stored position. */
3454 ;
3455 else
3456 /* "info editing <exp>" should print around command number <exp>. */
3457 num = (parse_and_eval_address (args) - history_base) - Hist_print / 2;
3458 }
3459 /* "show commands" means print the last Hist_print commands. */
3460 else
3461 {
3462 num = hist_len - Hist_print;
3463 }
3464
3465 if (num < 0)
3466 num = 0;
3467
3468 /* If there are at least Hist_print commands, we want to display the last
3469 Hist_print rather than, say, the last 6. */
3470 if (hist_len - num < Hist_print)
3471 {
3472 num = hist_len - Hist_print;
3473 if (num < 0)
3474 num = 0;
3475 }
3476
3477 for (offset = num; offset < num + Hist_print && offset < hist_len; offset++)
3478 {
3479 printf_filtered ("%5d %s\n", history_base + offset,
3480 (history_get (history_base + offset))->line);
3481 }
3482
3483 /* The next command we want to display is the next one that we haven't
3484 displayed yet. */
3485 num += Hist_print;
3486
3487 /* If the user repeats this command with return, it should do what
3488 "show commands +" does. This is unnecessary if arg is null,
3489 because "show commands +" is not useful after "show commands". */
3490 if (from_tty && args)
3491 {
3492 args[0] = '+';
3493 args[1] = '\0';
3494 }
3495 }
3496
3497 /* Called by do_setshow_command. */
3498 /* ARGSUSED */
3499 static void
3500 set_history_size_command (args, from_tty, c)
3501 char *args;
3502 int from_tty;
3503 struct cmd_list_element *c;
3504 {
3505 if (history_size == INT_MAX)
3506 unstifle_history ();
3507 else if (history_size >= 0)
3508 stifle_history (history_size);
3509 else
3510 {
3511 history_size = INT_MAX;
3512 error ("History size must be non-negative");
3513 }
3514 }
3515
3516 /* ARGSUSED */
3517 static void
3518 set_history (args, from_tty)
3519 char *args;
3520 int from_tty;
3521 {
3522 printf_unfiltered ("\"set history\" must be followed by the name of a history subcommand.\n");
3523 help_list (sethistlist, "set history ", -1, gdb_stdout);
3524 }
3525
3526 /* ARGSUSED */
3527 static void
3528 show_history (args, from_tty)
3529 char *args;
3530 int from_tty;
3531 {
3532 cmd_show_list (showhistlist, from_tty, "");
3533 }
3534
3535 int info_verbose = 0; /* Default verbose msgs off */
3536
3537 /* Called by do_setshow_command. An elaborate joke. */
3538 /* ARGSUSED */
3539 static void
3540 set_verbose (args, from_tty, c)
3541 char *args;
3542 int from_tty;
3543 struct cmd_list_element *c;
3544 {
3545 char *cmdname = "verbose";
3546 struct cmd_list_element *showcmd;
3547
3548 showcmd = lookup_cmd_1 (&cmdname, showlist, NULL, 1);
3549
3550 if (info_verbose)
3551 {
3552 c->doc = "Set verbose printing of informational messages.";
3553 showcmd->doc = "Show verbose printing of informational messages.";
3554 }
3555 else
3556 {
3557 c->doc = "Set verbosity.";
3558 showcmd->doc = "Show verbosity.";
3559 }
3560 }
3561
3562 static void
3563 float_handler (signo)
3564 int signo;
3565 {
3566 /* This message is based on ANSI C, section 4.7. Note that integer
3567 divide by zero causes this, so "float" is a misnomer. */
3568 signal (SIGFPE, float_handler);
3569 error ("Erroneous arithmetic operation.");
3570 }
3571
3572 \f
3573 static void
3574 init_cmd_lists ()
3575 {
3576 cmdlist = NULL;
3577 infolist = NULL;
3578 enablelist = NULL;
3579 disablelist = NULL;
3580 deletelist = NULL;
3581 enablebreaklist = NULL;
3582 setlist = NULL;
3583 unsetlist = NULL;
3584 showlist = NULL;
3585 endianlist = NULL;
3586 sethistlist = NULL;
3587 showhistlist = NULL;
3588 unsethistlist = NULL;
3589 #if MAINTENANCE_CMDS
3590 maintenancelist = NULL;
3591 maintenanceinfolist = NULL;
3592 maintenanceprintlist = NULL;
3593 #endif
3594 setprintlist = NULL;
3595 showprintlist = NULL;
3596 setchecklist = NULL;
3597 showchecklist = NULL;
3598 }
3599
3600 /* Init the history buffer. Note that we are called after the init file(s)
3601 * have been read so that the user can change the history file via his
3602 * .gdbinit file (for instance). The GDBHISTFILE environment variable
3603 * overrides all of this.
3604 */
3605
3606 void
3607 init_history()
3608 {
3609 char *tmpenv;
3610
3611 tmpenv = getenv ("HISTSIZE");
3612 if (tmpenv)
3613 history_size = atoi (tmpenv);
3614 else if (!history_size)
3615 history_size = 256;
3616
3617 stifle_history (history_size);
3618
3619 tmpenv = getenv ("GDBHISTFILE");
3620 if (tmpenv)
3621 history_filename = savestring (tmpenv, strlen(tmpenv));
3622 else if (!history_filename) {
3623 /* We include the current directory so that if the user changes
3624 directories the file written will be the same as the one
3625 that was read. */
3626 history_filename = concat (current_directory, "/.gdb_history", NULL);
3627 }
3628 read_history (history_filename);
3629 }
3630
3631 static void
3632 init_main ()
3633 {
3634 struct cmd_list_element *c;
3635
3636 add_prefix_cmd ("endian", class_support, set_endian,
3637 "Set endianness of target.",
3638 &endianlist, "set endian ", 0, &setlist);
3639 add_cmd ("big", class_support, set_endian_big,
3640 "Set target as being big endian.", &endianlist);
3641 add_cmd ("little", class_support, set_endian_little,
3642 "Set target as being little endian.", &endianlist);
3643 add_cmd ("auto", class_support, set_endian_auto,
3644 "Select target endianness automatically.", &endianlist);
3645 add_cmd ("endian", class_support, show_endian,
3646 "Show endianness of target.", &showlist);
3647
3648 add_cmd ("architecture", class_support, set_architecture,
3649 "Set architecture of target.", &setlist);
3650 add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
3651 add_cmd ("architecture", class_support, show_architecture,
3652 "Show architecture of target.", &showlist);
3653 add_cmd ("architecture", class_support, info_architecture,
3654 "List supported target architectures", &infolist);
3655
3656
3657 #ifdef DEFAULT_PROMPT
3658 prompt = savestring (DEFAULT_PROMPT, strlen(DEFAULT_PROMPT));
3659 #else
3660 prompt = savestring ("(gdb) ", 6);
3661 #endif
3662
3663 /* Set the important stuff up for command editing. */
3664 command_editing_p = 1;
3665 history_expansion_p = 0;
3666 write_history_p = 0;
3667
3668 /* Setup important stuff for command line editing. */
3669 rl_completion_entry_function = (int (*)()) readline_line_completion_function;
3670 rl_completer_word_break_characters = gdb_completer_word_break_characters;
3671 rl_completer_quote_characters = gdb_completer_quote_characters;
3672 rl_readline_name = "gdb";
3673
3674 /* Define the classes of commands.
3675 They will appear in the help list in the reverse of this order. */
3676
3677 add_cmd ("internals", class_maintenance, NO_FUNCTION,
3678 "Maintenance commands.\n\
3679 Some gdb commands are provided just for use by gdb maintainers.\n\
3680 These commands are subject to frequent change, and may not be as\n\
3681 well documented as user commands.",
3682 &cmdlist);
3683 add_cmd ("obscure", class_obscure, NO_FUNCTION, "Obscure features.", &cmdlist);
3684 add_cmd ("aliases", class_alias, NO_FUNCTION, "Aliases of other commands.", &cmdlist);
3685 add_cmd ("user-defined", class_user, NO_FUNCTION, "User-defined commands.\n\
3686 The commands in this class are those defined by the user.\n\
3687 Use the \"define\" command to define a command.", &cmdlist);
3688 add_cmd ("support", class_support, NO_FUNCTION, "Support facilities.", &cmdlist);
3689 add_cmd ("status", class_info, NO_FUNCTION, "Status inquiries.", &cmdlist);
3690 add_cmd ("files", class_files, NO_FUNCTION, "Specifying and examining files.", &cmdlist);
3691 add_cmd ("breakpoints", class_breakpoint, NO_FUNCTION, "Making program stop at certain points.", &cmdlist);
3692 add_cmd ("data", class_vars, NO_FUNCTION, "Examining data.", &cmdlist);
3693 add_cmd ("stack", class_stack, NO_FUNCTION, "Examining the stack.\n\
3694 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
3695 counting from zero for the innermost (currently executing) frame.\n\n\
3696 At any time gdb identifies one frame as the \"selected\" frame.\n\
3697 Variable lookups are done with respect to the selected frame.\n\
3698 When the program being debugged stops, gdb selects the innermost frame.\n\
3699 The commands below can be used to select other frames by number or address.",
3700 &cmdlist);
3701 add_cmd ("running", class_run, NO_FUNCTION, "Running the program.", &cmdlist);
3702
3703 add_com ("pwd", class_files, pwd_command,
3704 "Print working directory. This is used for your program as well.");
3705 c = add_cmd ("cd", class_files, cd_command,
3706 "Set working directory to DIR for debugger and program being debugged.\n\
3707 The change does not take effect for the program being debugged\n\
3708 until the next time it is started.", &cmdlist);
3709 c->completer = filename_completer;
3710
3711 add_show_from_set
3712 (add_set_cmd ("prompt", class_support, var_string, (char *)&prompt,
3713 "Set gdb's prompt",
3714 &setlist),
3715 &showlist);
3716
3717 add_com ("echo", class_support, echo_command,
3718 "Print a constant string. Give string as argument.\n\
3719 C escape sequences may be used in the argument.\n\
3720 No newline is added at the end of the argument;\n\
3721 use \"\\n\" if you want a newline to be printed.\n\
3722 Since leading and trailing whitespace are ignored in command arguments,\n\
3723 if you want to print some you must use \"\\\" before leading whitespace\n\
3724 to be printed or after trailing whitespace.");
3725 add_com ("document", class_support, document_command,
3726 "Document a user-defined command.\n\
3727 Give command name as argument. Give documentation on following lines.\n\
3728 End with a line of just \"end\".");
3729 add_com ("define", class_support, define_command,
3730 "Define a new command name. Command name is argument.\n\
3731 Definition appears on following lines, one command per line.\n\
3732 End with a line of just \"end\".\n\
3733 Use the \"document\" command to give documentation for the new command.\n\
3734 Commands defined in this way may have up to ten arguments.");
3735
3736 #ifdef __STDC__
3737 c = add_cmd ("source", class_support, source_command,
3738 "Read commands from a file named FILE.\n\
3739 Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
3740 when gdb is started.", &cmdlist);
3741 #else
3742 /* Punt file name, we can't help it easily. */
3743 c = add_cmd ("source", class_support, source_command,
3744 "Read commands from a file named FILE.\n\
3745 Note that the file \".gdbinit\" is read automatically in this way\n\
3746 when gdb is started.", &cmdlist);
3747 #endif
3748 c->completer = filename_completer;
3749
3750 add_com ("quit", class_support, quit_command, "Exit gdb.");
3751 add_com ("help", class_support, help_command, "Print list of commands.");
3752 add_com_alias ("q", "quit", class_support, 1);
3753 add_com_alias ("h", "help", class_support, 1);
3754
3755 add_com ("dont-repeat", class_support, dont_repeat_command, "Don't repeat this command.\n\
3756 Primarily used inside of user-defined commands that should not be repeated when\n\
3757 hitting return.");
3758
3759 c = add_set_cmd ("verbose", class_support, var_boolean, (char *)&info_verbose,
3760 "Set ",
3761 &setlist),
3762 add_show_from_set (c, &showlist);
3763 c->function.sfunc = set_verbose;
3764 set_verbose (NULL, 0, c);
3765
3766 add_show_from_set
3767 (add_set_cmd ("editing", class_support, var_boolean, (char *)&command_editing_p,
3768 "Set editing of command lines as they are typed.\n\
3769 Use \"on\" to enable the editing, and \"off\" to disable it.\n\
3770 Without an argument, command line editing is enabled. To edit, use\n\
3771 EMACS-like or VI-like commands like control-P or ESC.", &setlist),
3772 &showlist);
3773
3774 add_prefix_cmd ("history", class_support, set_history,
3775 "Generic command for setting command history parameters.",
3776 &sethistlist, "set history ", 0, &setlist);
3777 add_prefix_cmd ("history", class_support, show_history,
3778 "Generic command for showing command history parameters.",
3779 &showhistlist, "show history ", 0, &showlist);
3780
3781 add_show_from_set
3782 (add_set_cmd ("expansion", no_class, var_boolean, (char *)&history_expansion_p,
3783 "Set history expansion on command input.\n\
3784 Without an argument, history expansion is enabled.", &sethistlist),
3785 &showhistlist);
3786
3787 add_show_from_set
3788 (add_set_cmd ("save", no_class, var_boolean, (char *)&write_history_p,
3789 "Set saving of the history record on exit.\n\
3790 Use \"on\" to enable the saving, and \"off\" to disable it.\n\
3791 Without an argument, saving is enabled.", &sethistlist),
3792 &showhistlist);
3793
3794 c = add_set_cmd ("size", no_class, var_integer, (char *)&history_size,
3795 "Set the size of the command history, \n\
3796 ie. the number of previous commands to keep a record of.", &sethistlist);
3797 add_show_from_set (c, &showhistlist);
3798 c->function.sfunc = set_history_size_command;
3799
3800 add_show_from_set
3801 (add_set_cmd ("filename", no_class, var_filename, (char *)&history_filename,
3802 "Set the filename in which to record the command history\n\
3803 (the list of previous commands of which a record is kept).", &sethistlist),
3804 &showhistlist);
3805
3806 add_show_from_set
3807 (add_set_cmd ("confirm", class_support, var_boolean,
3808 (char *)&caution,
3809 "Set whether to confirm potentially dangerous operations.",
3810 &setlist),
3811 &showlist);
3812
3813 add_prefix_cmd ("info", class_info, info_command,
3814 "Generic command for showing things about the program being debugged.",
3815 &infolist, "info ", 0, &cmdlist);
3816 add_com_alias ("i", "info", class_info, 1);
3817
3818 add_com ("complete", class_obscure, complete_command,
3819 "List the completions for the rest of the line as a command.");
3820
3821 add_prefix_cmd ("show", class_info, show_command,
3822 "Generic command for showing things about the debugger.",
3823 &showlist, "show ", 0, &cmdlist);
3824 /* Another way to get at the same thing. */
3825 add_info ("set", show_command, "Show all GDB settings.");
3826
3827 add_cmd ("commands", no_class, show_commands,
3828 "Show the history of commands you typed.\n\
3829 You can supply a command number to start with, or a `+' to start after\n\
3830 the previous command number shown.",
3831 &showlist);
3832
3833 add_cmd ("version", no_class, show_version,
3834 "Show what version of GDB this is.", &showlist);
3835
3836 add_com ("while", class_support, while_command,
3837 "Execute nested commands WHILE the conditional expression is non zero.\n\
3838 The conditional expression must follow the word `while' and must in turn be\n\
3839 followed by a new line. The nested commands must be entered one per line,\n\
3840 and should be terminated by the word `end'.");
3841
3842 add_com ("if", class_support, if_command,
3843 "Execute nested commands once IF the conditional expression is non zero.\n\
3844 The conditional expression must follow the word `if' and must in turn be\n\
3845 followed by a new line. The nested commands must be entered one per line,\n\
3846 and should be terminated by the word 'else' or `end'. If an else clause\n\
3847 is used, the same rules apply to its nested commands as to the first ones.");
3848
3849 /* If target is open when baud changes, it doesn't take effect until the
3850 next open (I think, not sure). */
3851 add_show_from_set (add_set_cmd ("remotebaud", no_class,
3852 var_zinteger, (char *)&baud_rate,
3853 "Set baud rate for remote serial I/O.\n\
3854 This value is used to set the speed of the serial port when debugging\n\
3855 using remote targets.", &setlist),
3856 &showlist);
3857
3858 add_show_from_set (
3859 add_set_cmd ("remotedebug", no_class, var_zinteger, (char *)&remote_debug,
3860 "Set debugging of remote protocol.\n\
3861 When enabled, each packet sent or received with the remote target\n\
3862 is displayed.", &setlist),
3863 &showlist);
3864
3865 add_show_from_set (
3866 add_set_cmd ("remotetimeout", no_class, var_integer, (char *)&remote_timeout,
3867 "Set timeout limit to wait for target to respond.\n\
3868 This value is used to set the time limit for gdb to wait for a response\n\
3869 from he target.", &setlist),
3870 &showlist);
3871
3872 c = add_set_cmd ("annotate", class_obscure, var_zinteger,
3873 (char *)&annotation_level, "Set annotation_level.\n\
3874 0 == normal; 1 == fullname (for use when running under emacs)\n\
3875 2 == output annotated suitably for use by programs that control GDB.",
3876 &setlist);
3877 c = add_show_from_set (c, &showlist);
3878 }
This page took 0.109575 seconds and 4 git commands to generate.