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