352089736ec6f01c2cd875947b98fc180a61fb2f
[deliverable/binutils-gdb.git] / gdb / main.c
1 /* Top level for GDB, the GNU debugger.
2 Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
3
4 GDB is distributed in the hope that it will be useful, but WITHOUT ANY
5 WARRANTY. No author or distributor accepts responsibility to anyone
6 for the consequences of using it or for whether it serves any
7 particular purpose or works at all, unless he says so in writing.
8 Refer to the GDB General Public License for full details.
9
10 Everyone is granted permission to copy, modify and redistribute GDB,
11 but only under the conditions described in the GDB General Public
12 License. A copy of this license is supposed to have been given to you
13 along with GDB so you can know your rights and responsibilities. It
14 should be in a file named COPYING. Among other things, the copyright
15 notice and this notice must be preserved on all copies.
16
17 In other words, go ahead and share GDB, but don't try to stop
18 anyone else from sharing it farther. Help stamp out software hoarding!
19 */
20
21 #include <sys/file.h>
22 #include <stdio.h>
23 #include <setjmp.h>
24 #include <signal.h>
25 #include <sys/param.h>
26 #include "defs.h"
27 #include "command.h"
28 #include "param.h"
29
30 #ifdef SET_STACK_LIMIT_HUGE
31 #include <sys/time.h>
32 #include <sys/resource.h>
33 #endif
34
35 /* Version number of GDB, as a string. */
36
37 extern char *version;
38
39 /* Chain containing all defined commands. */
40
41 struct cmd_list_element *cmdlist;
42
43 /* Chain containing all defined info subcommands. */
44
45 struct cmd_list_element *infolist;
46
47 /* stdio stream that command input is being read from. */
48
49 FILE *instream;
50
51 /* Current working directory. */
52
53 char *current_directory;
54
55 /* The directory name is actually stored here (usually). */
56 static char dirbuf[MAXPATHLEN];
57
58 /* Nonzero if we should refrain from using an X window. */
59
60 int inhibit_windows = 0;
61
62 /* Hook for window manager argument parsing. */
63
64 int *win_argc;
65 char **win_argv;
66 char *win_prgm;
67
68 /* Function to call before reading a command, if nonzero.
69 The function receives two args: an input stream,
70 and a prompt string. */
71
72 void (*window_hook) ();
73
74 extern int frame_file_full_name;
75
76 void free_command_lines ();
77 char *read_line ();
78 static void initialize_main ();
79 void command_loop ();
80 static void source_command ();
81 void print_gdb_version ();
82
83 /* gdb prints this when reading a command interactively */
84 static char *prompt;
85
86 /* Buffer used for reading command lines, and the size
87 allocated for it so far. */
88
89 char *line;
90 int linesize;
91 \f
92 /* This is how `error' returns to command level. */
93
94 jmp_buf to_top_level;
95
96 return_to_top_level ()
97 {
98 quit_flag = 0;
99 immediate_quit = 0;
100 clear_breakpoint_commands ();
101 clear_momentary_breakpoints ();
102 delete_current_display ();
103 do_cleanups (0);
104 longjmp (to_top_level, 1);
105 }
106
107 /* Call FUNC with arg ARG, catching any errors.
108 If there is no error, return the value returned by FUNC.
109 If there is an error, return zero after printing ERRSTRING
110 (which is in addition to the specific error message already printed). */
111
112 int
113 catch_errors (func, arg, errstring)
114 int (*func) ();
115 int arg;
116 char *errstring;
117 {
118 jmp_buf saved;
119 int val;
120
121 bcopy (to_top_level, saved, sizeof (jmp_buf));
122
123 if (setjmp (to_top_level) == 0)
124 val = (*func) (arg);
125 else
126 {
127 fprintf (stderr, "%s\n", errstring);
128 val = 0;
129 }
130
131 bcopy (saved, to_top_level, sizeof (jmp_buf));
132 return val;
133 }
134
135 /* Handler for SIGHUP. */
136
137 static void
138 disconnect ()
139 {
140 kill_inferior_fast ();
141 signal (SIGHUP, SIG_DFL);
142 kill (getpid (), SIGHUP);
143 }
144 \f
145 main (argc, argv, envp)
146 int argc;
147 char **argv;
148 char **envp;
149 {
150 extern void request_quit ();
151 int count;
152 int inhibit_gdbinit = 0;
153 int quiet = 0;
154 int batch = 0;
155 register int i;
156
157 quit_flag = 0;
158 linesize = 100;
159 line = (char *) xmalloc (linesize);
160 instream = stdin;
161
162 getwd (dirbuf);
163 current_directory = dirbuf;
164
165 win_argc = &argc;
166 win_argv = argv;
167 win_prgm = argv[0];
168
169 #ifdef SET_STACK_LIMIT_HUGE
170 {
171 struct rlimit rlim;
172
173 /* Set the stack limit huge so that alloca (particularly stringtab
174 * in dbxread.c) does not fail. */
175 getrlimit (RLIMIT_STACK, &rlim);
176 rlim.rlim_cur = rlim.rlim_max;
177 setrlimit (RLIMIT_STACK, &rlim);
178 }
179 #endif /* SET_STACK_LIMIT_HUGE */
180
181 /* Look for flag arguments. */
182
183 for (i = 1; i < argc; i++)
184 {
185 if (!strcmp (argv[i], "-q") || !strcmp (argv[i], "-quiet"))
186 quiet = 1;
187 else if (!strcmp (argv[i], "-nx"))
188 inhibit_gdbinit = 1;
189 else if (!strcmp (argv[i], "-nw"))
190 inhibit_windows = 1;
191 else if (!strcmp (argv[i], "-batch"))
192 batch = 1, quiet = 1;
193 else if (!strcmp (argv[i], "-fullname"))
194 frame_file_full_name = 1;
195 else if (argv[i][0] == '-')
196 i++;
197 }
198
199 /* Run the init function of each source file */
200
201 initialize_all_files ();
202 initialize_main (); /* But that omits this file! Do it now */
203
204 signal (SIGINT, request_quit);
205 signal (SIGQUIT, SIG_IGN);
206 if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
207 signal (SIGHUP, disconnect);
208
209 if (!quiet)
210 print_gdb_version ();
211
212 /* Process the command line arguments. */
213
214 count = 0;
215 for (i = 1; i < argc; i++)
216 {
217 register char *arg = argv[i];
218 /* Args starting with - say what to do with the following arg
219 as a filename. */
220 if (arg[0] == '-')
221 {
222 extern void exec_file_command (), symbol_file_command ();
223 extern void core_file_command (), directory_command ();
224 extern void tty_command ();
225
226 if (!strcmp (arg, "-q") || !strcmp (arg, "-nx")
227 || !strcmp (arg, "-quiet") || !strcmp (arg, "-batch")
228 || !strcmp (arg, "-fullname"))
229 /* Already processed above */
230 continue;
231
232 if (++i == argc)
233 fprintf (stderr, "No argument follows \"%s\".\n", arg);
234 if (!setjmp (to_top_level))
235 {
236 /* -s foo: get syms from foo. -e foo: execute foo.
237 -se foo: do both with foo. -c foo: use foo as core dump. */
238 if (!strcmp (arg, "-se"))
239 {
240 exec_file_command (argv[i], !batch);
241 symbol_file_command (argv[i], !batch);
242 }
243 else if (!strcmp (arg, "-s") || !strcmp (arg, "-symbols"))
244 symbol_file_command (argv[i], !batch);
245 else if (!strcmp (arg, "-e") || !strcmp (arg, "-exec"))
246 exec_file_command (argv[i], !batch);
247 else if (!strcmp (arg, "-c") || !strcmp (arg, "-core"))
248 core_file_command (argv[i], !batch);
249 /* -x foo: execute commands from foo. */
250 else if (!strcmp (arg, "-x") || !strcmp (arg, "-command")
251 || !strcmp (arg, "-commands"))
252 source_command (argv[i]);
253 /* -d foo: add directory `foo' to source-file directory
254 search-list */
255 else if (!strcmp (arg, "-d") || !strcmp (arg, "-dir")
256 || !strcmp (arg, "-directory"))
257 directory_command (argv[i], 0);
258 /* -cd FOO: specify current directory as FOO.
259 GDB remembers the precise string FOO as the dirname. */
260 else if (!strcmp (arg, "-cd"))
261 {
262 int len = strlen (argv[i]);
263 current_directory = argv[i];
264 if (len > 1 && current_directory[len - 1] == '/')
265 current_directory = savestring (current_directory, len-1);
266 chdir (current_directory);
267 init_source_path ();
268 }
269 /* -t /def/ttyp1: use /dev/ttyp1 for inferior I/O. */
270 else if (!strcmp (arg, "-t") || !strcmp (arg, "-tty"))
271 tty_command (argv[i], 0);
272 else
273 error ("Unknown command-line switch: \"%s\"\n", arg);
274 }
275 }
276 else
277 {
278 /* Args not thus accounted for
279 are treated as, first, the symbol/executable file
280 and, second, the core dump file. */
281 count++;
282 if (!setjmp (to_top_level))
283 switch (count)
284 {
285 case 1:
286 exec_file_command (arg, !batch);
287 symbol_file_command (arg, !batch);
288 break;
289
290 case 2:
291 core_file_command (arg, !batch);
292 break;
293
294 case 3:
295 fprintf (stderr, "Excess command line args ignored. (%s%s)\n",
296 arg, (i == argc - 1) ? "" : " ...");
297 }
298 }
299 }
300
301 /* Read init file, if it exists in home directory */
302 if (getenv ("HOME"))
303 {
304 char *s;
305 s = (char *) xmalloc (strlen (getenv ("HOME")) + 10);
306 strcpy (s, getenv ("HOME"));
307 strcat (s, "/.gdbinit");
308 if (!inhibit_gdbinit && access (s, R_OK) == 0)
309 if (!setjmp (to_top_level))
310 source_command (s);
311 }
312
313 /* Read init file, if it exists in current directory. */
314 if (!inhibit_gdbinit && access (".gdbinit", R_OK) == 0)
315 if (!setjmp (to_top_level))
316 source_command (".gdbinit");
317
318 if (batch)
319 fatal ("Attempt to read commands from stdin in batch mode.");
320
321 if (!quiet)
322 printf ("Type \"help\" for a list of commands.\n");
323
324 /* The command loop. */
325
326 while (1)
327 {
328 if (!setjmp (to_top_level))
329 command_loop ();
330 clearerr (stdin); /* Don't get hung if C-d is typed. */
331 }
332 }
333
334 /* Execute the line P as a command.
335 Pass FROM_TTY as second argument to the defining function. */
336
337 void
338 execute_command (p, from_tty)
339 char *p;
340 int from_tty;
341 {
342 register struct cmd_list_element *c;
343 register struct command_line *cmdlines;
344
345 free_all_values ();
346 while (*p == ' ' || *p == '\t') p++;
347 if (*p)
348 {
349 c = lookup_cmd (&p, cmdlist, "", 0);
350 if (c->function == 0)
351 error ("That is not a command, just a help topic.");
352 else if (c->class == (int) class_user)
353 {
354 if (*p)
355 error ("User-defined commands cannot take arguments.");
356 cmdlines = (struct command_line *) c->function;
357 if (cmdlines == (struct command_line *) 0)
358 /* Null command */
359 return;
360 while (cmdlines)
361 {
362 execute_command (cmdlines->line, 0);
363 cmdlines = cmdlines->next;
364 }
365 }
366 else
367 /* Pass null arg rather than an empty one. */
368 (*c->function) (*p ? p : 0, from_tty);
369 }
370 }
371
372 static void
373 do_nothing ()
374 {
375 }
376
377 /* Read commands from `instream' and execute them
378 until end of file. */
379 void
380 command_loop ()
381 {
382 struct cleanup *old_chain;
383 while (!feof (instream))
384 {
385 if (instream == stdin)
386 printf ("%s", prompt);
387 fflush (stdout);
388
389 if (window_hook && instream == stdin)
390 (*window_hook) (instream, prompt);
391
392 quit_flag = 0;
393 old_chain = make_cleanup (do_nothing, 0);
394 execute_command (read_line (instream == stdin), instream == stdin);
395 /* Do any commands attached to breakpoint we stopped at. */
396 do_breakpoint_commands ();
397 do_cleanups (old_chain);
398 }
399 }
400 \f
401 #ifdef SIGTSTP
402 static void
403 stop_sig ()
404 {
405 signal (SIGTSTP, SIG_DFL);
406 sigsetmask (0);
407 kill (getpid (), SIGTSTP);
408 signal (SIGTSTP, stop_sig);
409 printf ("%s", prompt);
410 fflush (stdout);
411
412 /* Forget about any previous command -- null line now will do nothing. */
413 *line = 0;
414 }
415 #endif /* SIGTSTP */
416
417 /* Commands call this if they do not want to be repeated by null lines. */
418
419 void
420 dont_repeat ()
421 {
422 *line = 0;
423 }
424
425 /* Read one line from the command input stream `instream'
426 into the buffer `line' (whose current length is `linesize').
427 The buffer is made bigger as necessary.
428 Returns the address of the start of the line. */
429
430 char *
431 read_line (repeat)
432 int repeat;
433 {
434 register char *p = line;
435 register char *p1;
436 register int c;
437 char *nline;
438
439 /* Control-C quits instantly if typed while in this loop
440 since it should not wait until the user types a newline. */
441 immediate_quit++;
442 #ifdef SIGTSTP
443 signal (SIGTSTP, stop_sig);
444 #endif
445
446 while (1)
447 {
448 c = fgetc (instream);
449 if (c == -1 || c == '\n')
450 break;
451 /* Ignore backslash-newline; keep adding to the same line. */
452 else if (c == '\\')
453 {
454 int c1 = fgetc (instream);
455 if (c1 == '\n')
456 continue;
457 else
458 ungetc (c1, instream);
459 }
460
461 if (p - line == linesize - 1)
462 {
463 linesize *= 2;
464 nline = (char *) xrealloc (line, linesize);
465 p += nline - line;
466 line = nline;
467 }
468 *p++ = c;
469 }
470
471 #ifdef SIGTSTP
472 signal (SIGTSTP, SIG_DFL);
473 #endif
474 immediate_quit--;
475
476 /* If we just got an empty line, and that is supposed
477 to repeat the previous command, leave the last input unchanged. */
478 if (p == line && repeat)
479 return line;
480
481 /* If line is a comment, clear it out. */
482 p1 = line;
483 while ((c = *p1) == ' ' || c == '\t') p1++;
484 if (c == '#')
485 p = line;
486
487 *p = 0;
488
489 return line;
490 }
491 \f
492 /* Read lines from the input stream
493 and accumulate them in a chain of struct command_line's
494 which is then returned. */
495
496 struct command_line *
497 read_command_lines ()
498 {
499 struct command_line *first = 0;
500 register struct command_line *next, *tail = 0;
501 register char *p, *p1;
502 struct cleanup *old_chain = 0;
503
504 while (1)
505 {
506 dont_repeat ();
507 p = read_line (1);
508 /* Remove leading and trailing blanks. */
509 while (*p == ' ' || *p == '\t') p++;
510 p1 = p + strlen (p);
511 while (p1 != p && (p1[-1] == ' ' || p1[-1] == '\t')) p1--;
512
513 /* Is this "end"? */
514 if (p1 - p == 3 && !strncmp (p, "end", 3))
515 break;
516
517 /* No => add this line to the chain of command lines. */
518 next = (struct command_line *) xmalloc (sizeof (struct command_line));
519 next->line = savestring (p, p1 - p);
520 next->next = 0;
521 if (tail)
522 {
523 tail->next = next;
524 }
525 else
526 {
527 /* We just read the first line.
528 From now on, arrange to throw away the lines we have
529 if we quit or get an error while inside this function. */
530 first = next;
531 old_chain = make_cleanup (free_command_lines, &first);
532 }
533 tail = next;
534 }
535
536 dont_repeat ();
537
538 /* Now we are about to return the chain to our caller,
539 so freeing it becomes his responsibility. */
540 if (first)
541 discard_cleanups (old_chain);
542 return first;
543 }
544
545 /* Free a chain of struct command_line's. */
546
547 void
548 free_command_lines (lptr)
549 struct command_line **lptr;
550 {
551 register struct command_line *l = *lptr;
552 register struct command_line *next;
553
554 while (l)
555 {
556 next = l->next;
557 free (l->line);
558 free (l);
559 l = next;
560 }
561 }
562 \f
563 /* Add an element to the list of info subcommands. */
564
565 void
566 add_info (name, fun, doc)
567 char *name;
568 void (*fun) ();
569 char *doc;
570 {
571 add_cmd (name, 0, fun, doc, &infolist);
572 }
573
574 /* Add an alias to the list of info subcommands. */
575
576 void
577 add_info_alias (name, oldname, abbrev_flag)
578 char *name;
579 char *oldname;
580 int abbrev_flag;
581 {
582 add_alias_cmd (name, oldname, 0, abbrev_flag, &infolist);
583 }
584
585 /* The "info" command is defined as a prefix, with allow_unknown = 0.
586 Therefore, its own definition is called only for "info" with no args. */
587
588 static void
589 info_command ()
590 {
591 printf ("\"info\" must be followed by the name of an info command.\n");
592 help_cmd (0, infolist, "info ", -1, stdout);
593 }
594 \f
595 /* Add an element to the list of commands. */
596
597 void
598 add_com (name, class, fun, doc)
599 char *name;
600 int class;
601 void (*fun) ();
602 char *doc;
603 {
604 add_cmd (name, class, fun, doc, &cmdlist);
605 }
606
607 /* Add an alias or abbreviation command to the list of commands. */
608
609 void
610 add_com_alias (name, oldname, class, abbrev_flag)
611 char *name;
612 char *oldname;
613 int class;
614 int abbrev_flag;
615 {
616 add_alias_cmd (name, oldname, class, abbrev_flag, &cmdlist);
617 }
618
619 void
620 error_no_arg (why)
621 char *why;
622 {
623 error ("Argument required (%s).", why);
624 }
625
626 static void
627 help_command (command, from_tty)
628 char *command;
629 int from_tty; /* Ignored */
630 {
631 help_cmd (command, cmdlist, "", -2, stdout);
632 }
633 \f
634 static void
635 validate_comname (comname)
636 char *comname;
637 {
638 register char *p;
639
640 if (comname == 0)
641 error_no_arg ("name of command to define");
642
643 p = comname;
644 while (*p)
645 {
646 if (!(*p >= 'A' && *p <= 'Z')
647 && !(*p >= 'a' && *p <= 'z')
648 && !(*p >= '0' && *p <= '9')
649 && *p != '-')
650 error ("Junk in argument list: \"%s\"", p);
651 p++;
652 }
653 }
654
655 static void
656 define_command (comname, from_tty)
657 char *comname;
658 int from_tty;
659 {
660 register struct command_line *cmds;
661 register struct cmd_list_element *c;
662 char *tem = comname;
663
664 validate_comname (comname);
665
666 c = lookup_cmd (&tem, cmdlist, "", -1);
667 if (c)
668 {
669 if (c->class == (int) class_user || c->class == (int) class_alias)
670 tem = "Redefine command \"%s\"? ";
671 else
672 tem = "Really redefine built-in command \"%s\"? ";
673 if (!query (tem, comname))
674 error ("Command \"%s\" not redefined.", comname);
675 }
676
677 if (from_tty)
678 printf ("Type commands for definition of \"%s\".\n\
679 End with a line saying just \"end\".\n", comname);
680
681 comname = savestring (comname, strlen (comname));
682
683 cmds = read_command_lines ();
684
685 if (c && c->class == (int) class_user)
686 free_command_lines (&c->function);
687
688 add_com (comname, class_user, cmds,
689 (c && c->class == (int) class_user)
690 ? c->doc : savestring ("User-defined.", 13));
691 }
692
693 static void
694 document_command (comname, from_tty)
695 char *comname;
696 int from_tty;
697 {
698 struct command_line *doclines;
699 register struct cmd_list_element *c;
700 char *tem = comname;
701
702 validate_comname (comname);
703
704 c = lookup_cmd (&tem, cmdlist, "", 0);
705
706 if (c->class != (int) class_user)
707 error ("Command \"%s\" is built-in.", comname);
708
709 if (from_tty)
710 printf ("Type documentation for \"%s\".\n\
711 End with a line saying just \"end\".\n", comname);
712
713 doclines = read_command_lines ();
714
715 if (c->doc) free (c->doc);
716
717 {
718 register struct command_line *cl1;
719 register int len = 0;
720
721 for (cl1 = doclines; cl1; cl1 = cl1->next)
722 len += strlen (cl1->line) + 1;
723
724 c->doc = (char *) xmalloc (len + 1);
725 *c->doc = 0;
726
727 for (cl1 = doclines; cl1; cl1 = cl1->next)
728 {
729 strcat (c->doc, cl1->line);
730 if (cl1->next)
731 strcat (c->doc, "\n");
732 }
733 }
734
735 free_command_lines (&doclines);
736 }
737 \f
738 static void
739 copying_info ()
740 {
741 immediate_quit++;
742 printf (" GDB GENERAL PUBLIC LICENSE\n\
743 (Clarified 11 Feb 1988)\n\
744 \n\
745 Copyright (C) 1988 Richard M. Stallman\n\
746 Everyone is permitted to copy and distribute verbatim copies\n\
747 of this license, but changing it is not allowed.\n\
748 You can also use this wording to make the terms for other programs.\n\
749 \n\
750 The license agreements of most software companies keep you at the\n\
751 mercy of those companies. By contrast, our general public license is\n\
752 intended to give everyone the right to share GDB. To make sure that\n\
753 you get the rights we want you to have, we need to make restrictions\n\
754 that forbid anyone to deny you these rights or to ask you to surrender\n\
755 the rights. Hence this license agreement.\n\
756 \n\
757 Specifically, we want to make sure that you have the right to give\n\
758 away copies of GDB, that you receive source code or else can get it\n\
759 if you want it, that you can change GDB or use pieces of it in new\n\
760 free programs, and that you know you can do these things.\n\
761 --Type Return to print more--");
762 fflush (stdout);
763 read_line ();
764
765 printf ("\
766 To make sure that everyone has such rights, we have to forbid you to\n\
767 deprive anyone else of these rights. For example, if you distribute\n\
768 copies of GDB, you must give the recipients all the rights that you\n\
769 have. You must make sure that they, too, receive or can get the\n\
770 source code. And you must tell them their rights.\n\
771 \n\
772 Also, for our own protection, we must make certain that everyone\n\
773 finds out that there is no warranty for GDB. If GDB is modified by\n\
774 someone else and passed on, we want its recipients to know that what\n\
775 they have is not what we distributed, so that any problems introduced\n\
776 by others will not reflect on our reputation.\n\
777 \n\
778 Therefore we (Richard Stallman and the Free Software Foundation,\n\
779 Inc.) make the following terms which say what you must do to be\n\
780 allowed to distribute or change GDB.\n\
781 --Type Return to print more--");
782 fflush (stdout);
783 read_line ();
784
785 printf ("\
786 COPYING POLICIES\n\
787 \n\
788 1. You may copy and distribute verbatim copies of GDB source code as\n\
789 you receive it, in any medium, provided that you conspicuously and\n\
790 appropriately publish on each copy a valid copyright notice \"Copyright\n\
791 \(C) 1988 Free Software Foundation, Inc.\" (or with whatever year is\n\
792 appropriate); keep intact the notices on all files that refer\n\
793 to this License Agreement and to the absence of any warranty; and give\n\
794 any other recipients of the GDB program a copy of this License\n\
795 Agreement along with the program. You may charge a distribution fee\n\
796 for the physical act of transferring a copy.\n\
797 \n\
798 2. You may modify your copy or copies of GDB or any portion of it,\n\
799 and copy and distribute such modifications under the terms of\n\
800 Paragraph 1 above, provided that you also do the following:\n\
801 \n\
802 a) cause the modified files to carry prominent notices stating\n\
803 that you changed the files and the date of any change; and\n\
804 --Type Return to print more--");
805 fflush (stdout);
806 read_line ();
807
808 printf ("\
809 b) cause the whole of any work that you distribute or publish,\n\
810 that in whole or in part contains or is a derivative of GDB\n\
811 or any part thereof, to be licensed to all third parties on terms\n\
812 identical to those contained in this License Agreement (except that\n\
813 you may choose to grant more extensive warranty protection to some\n\
814 or all third parties, at your option).\n\
815 \n");
816 printf ("\
817 c) if the modified program serves as a debugger, cause it\n\
818 when started running in the simplest and usual way, to print\n\
819 an announcement including a valid copyright notice\n\
820 \"Copyright (C) 1988 Free Software Foundation, Inc.\" (or with\n\
821 the year that is appropriate), saying that there is no warranty\n\
822 (or else, saying that you provide a warranty) and that users may\n\
823 redistribute the program under these conditions, and telling the user\n\
824 how to view a copy of this License Agreement.\n\
825 \n\
826 d) You may charge a distribution fee for the physical act of\n\
827 transferring a copy, and you may at your option offer warranty\n\
828 protection in exchange for a fee.\n\
829 \n\
830 Mere aggregation of another unrelated program with this program (or its\n\
831 derivative) on a volume of a storage or distribution medium does not bring\n\
832 the other program under the scope of these terms.\n\
833 --Type Return to print more--");
834 fflush (stdout);
835 read_line ();
836
837 printf ("\
838 3. You may copy and distribute GDB (or a portion or derivative of it,\n\
839 under Paragraph 2) in object code or executable form under the terms of\n\
840 Paragraphs 1 and 2 above provided that you also do one of the following:\n\
841 \n\
842 a) accompany it with the complete corresponding machine-readable\n\
843 source code, which must be distributed under the terms of\n\
844 Paragraphs 1 and 2 above; or,\n\
845 \n\
846 b) accompany it with a written offer, valid for at least three\n\
847 years, to give any third party free (except for a nominal\n\
848 shipping charge) a complete machine-readable copy of the\n\
849 corresponding source code, to be distributed under the terms of\n\
850 Paragraphs 1 and 2 above; or,\n\n");
851
852 printf ("\
853 c) accompany it with the information you received as to where the\n\
854 corresponding source code may be obtained. (This alternative is\n\
855 allowed only for noncommercial distribution and only if you\n\
856 received the program in object code or executable form alone.)\n\
857 \n\
858 For an executable file, complete source code means all the source code for\n\
859 all modules it contains; but, as a special exception, it need not include\n\
860 source code for modules which are standard libraries that accompany the\n\
861 operating system on which the executable file runs.\n\
862 --Type Return to print more--");
863 fflush (stdout);
864 read_line ();
865
866 printf ("\
867 4. You may not copy, sublicense, distribute or transfer GDB\n\
868 except as expressly provided under this License Agreement. Any attempt\n\
869 otherwise to copy, sublicense, distribute or transfer GDB is void and\n\
870 your rights to use the program under this License agreement shall be\n\
871 automatically terminated. However, parties who have received computer\n\
872 software programs from you with this License Agreement will not have\n\
873 their licenses terminated so long as such parties remain in full compliance.\n\
874 \n\
875 5. If you wish to incorporate parts of GDB into other free\n\
876 programs whose distribution conditions are different, write to the Free\n\
877 Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet\n\
878 worked out a simple rule that can be stated here, but we will often permit\n\
879 this. We will be guided by the two goals of preserving the free status of\n\
880 all derivatives of our free software and of promoting the sharing and reuse\n\
881 of software.\n\
882 \n\
883 In other words, go ahead and share GDB, but don't try to stop\n\
884 anyone else from sharing it farther. Help stamp out software hoarding!\n\
885 ");
886 immediate_quit--;
887 }
888
889 static void
890 warranty_info ()
891 {
892 immediate_quit++;
893 printf (" NO WARRANTY\n\
894 \n\
895 BECAUSE GDB IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO\n\
896 WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT\n\
897 WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,\n\
898 RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE GDB \"AS IS\" WITHOUT\n\
899 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT\n\
900 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\
901 A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND\n\
902 PERFORMANCE OF GDB IS WITH YOU. SHOULD GDB PROVE DEFECTIVE, YOU\n\
903 ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n");
904
905 printf ("\
906 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.\n\
907 STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY\n\
908 WHO MAY MODIFY AND REDISTRIBUTE GDB, BE LIABLE TO\n\
909 YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER\n\
910 SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR\n\
911 INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA\n\
912 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A\n\
913 FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GDB, EVEN\n\
914 IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR\n\
915 ANY CLAIM BY ANY OTHER PARTY.\n");
916 immediate_quit--;
917 }
918 \f
919 static void
920 print_gdb_version ()
921 {
922 printf ("GDB %s, Copyright (C) 1988 Free Software Foundation, Inc.\n\
923 There is ABSOLUTELY NO WARRANTY for GDB; type \"info warranty\" for details.\n\
924 GDB is free software and you are welcome to distribute copies of it\n\
925 under certain conditions; type \"info copying\" to see the conditions.\n",
926 version);
927 }
928
929 static void
930 version_info ()
931 {
932 immediate_quit++;
933 print_gdb_version ();
934 immediate_quit--;
935 }
936 \f
937 /* xgdb calls this to reprint the usual GDB prompt. */
938
939 void
940 print_prompt ()
941 {
942 printf ("%s", prompt);
943 fflush (stdout);
944 }
945
946 /* Command to specify a prompt string instead of "(gdb) ". */
947
948 static void
949 set_prompt_command (text)
950 char *text;
951 {
952 char *p, *q;
953 register int c;
954 char *new;
955
956 if (text == 0)
957 error_no_arg ("string to which to set prompt");
958
959 new = (char *) xmalloc (strlen (text) + 2);
960 p = text; q = new;
961 while (c = *p++)
962 {
963 if (c == '\\')
964 {
965 /* \ at end of argument is used after spaces
966 so they won't be lost. */
967 if (*p == 0)
968 break;
969 c = parse_escape (&p);
970 if (c == 0)
971 break; /* C loses */
972 else if (c > 0)
973 *q++ = c;
974 }
975 else
976 *q++ = c;
977 }
978 if (*(p - 1) != '\\')
979 *q++ = ' ';
980 *q++ = '\0';
981 new = (char *) xrealloc (new, q - new);
982 free (prompt);
983 prompt = new;
984 }
985 \f
986 static void
987 quit_command ()
988 {
989 if (have_inferior_p ())
990 {
991 if (query ("The program is running. Quit anyway? "))
992 {
993 /* Prevent any warning message from reopen_exec_file, in case
994 we have a core file that's inconsistent with the exec file. */
995 exec_file_command (0, 0);
996 kill_inferior ();
997 }
998 else
999 error ("Not confirmed.");
1000 }
1001 exit (0);
1002 }
1003
1004 int
1005 input_from_terminal_p ()
1006 {
1007 return instream == stdin;
1008 }
1009 \f
1010 static void
1011 pwd_command (arg, from_tty)
1012 char *arg;
1013 int from_tty;
1014 {
1015 if (arg) error ("The \"pwd\" command does not take an argument: %s", arg);
1016 getwd (dirbuf);
1017
1018 if (strcmp (dirbuf, current_directory))
1019 printf ("Working directory %s\n (canonically %s).\n",
1020 current_directory, dirbuf);
1021 else
1022 printf ("Working directory %s.\n", current_directory);
1023 }
1024
1025 static void
1026 cd_command (dir, from_tty)
1027 char *dir;
1028 int from_tty;
1029 {
1030 int len;
1031 int change;
1032
1033 if (dir == 0)
1034 error_no_arg ("new working directory");
1035
1036 len = strlen (dir);
1037 dir = savestring (dir, len - (len > 1 && dir[len-1] == '/'));
1038 if (dir[0] == '/')
1039 current_directory = dir;
1040 else
1041 {
1042 current_directory = concat (current_directory, "/", dir);
1043 free (dir);
1044 }
1045
1046 /* Now simplify any occurrences of `.' and `..' in the pathname. */
1047
1048 change = 1;
1049 while (change)
1050 {
1051 char *p;
1052 change = 0;
1053
1054 for (p = current_directory; *p;)
1055 {
1056 if (!strncmp (p, "/./", 2)
1057 && (p[2] == 0 || p[2] == '/'))
1058 strcpy (p, p + 2);
1059 else if (!strncmp (p, "/..", 3)
1060 && (p[3] == 0 || p[3] == '/')
1061 && p != current_directory)
1062 {
1063 char *q = p;
1064 while (q != current_directory && q[-1] != '/') q--;
1065 if (q != current_directory)
1066 {
1067 strcpy (q-1, p+3);
1068 p = q-1;
1069 }
1070 }
1071 else p++;
1072 }
1073 }
1074
1075 if (chdir (dir) < 0)
1076 perror_with_name (dir);
1077
1078 if (from_tty)
1079 pwd_command ((char *) 0, 1);
1080 }
1081 \f
1082 /* Clean up on error during a "source" command.
1083 Close the file opened by the command
1084 and restore the previous input stream. */
1085
1086 static void
1087 source_cleanup (stream)
1088 FILE *stream;
1089 {
1090 fclose (instream);
1091 instream = stream;
1092 }
1093
1094 static void
1095 source_command (file)
1096 char *file;
1097 {
1098 FILE *stream;
1099 struct cleanup *cleanups;
1100
1101 if (file == 0)
1102 error_no_arg ("file to read commands from");
1103
1104 stream = fopen (file, "r");
1105 if (stream == 0)
1106 perror_with_name (file);
1107
1108 cleanups = make_cleanup (source_cleanup, instream);
1109
1110 instream = stream;
1111
1112 command_loop ();
1113
1114 do_cleanups (cleanups);
1115 }
1116
1117 static void
1118 echo_command (text)
1119 char *text;
1120 {
1121 char *p = text;
1122 register int c;
1123
1124 if (text)
1125 while (c = *p++)
1126 {
1127 if (c == '\\')
1128 {
1129 /* \ at end of argument is used after spaces
1130 so they won't be lost. */
1131 if (*p == 0)
1132 return;
1133
1134 c = parse_escape (&p);
1135 if (c >= 0)
1136 fputc (c, stdout);
1137 }
1138 else
1139 fputc (c, stdout);
1140 }
1141 }
1142
1143 static void
1144 dump_me_command ()
1145 {
1146 if (query ("Should GDB dump core? "))
1147 {
1148 signal (SIGQUIT, SIG_DFL);
1149 kill (getpid (), SIGQUIT);
1150 }
1151 }
1152 \f
1153 static void
1154 initialize_main ()
1155 {
1156 prompt = savestring ("(gdb) ", 6);
1157
1158 /* Define the classes of commands.
1159 They will appear in the help list in the reverse of this order. */
1160
1161 add_cmd ("obscure", class_obscure, 0, "Obscure features.", &cmdlist);
1162 add_cmd ("alias", class_alias, 0, "Aliases of other commands.", &cmdlist);
1163 add_cmd ("user", class_user, 0, "User-defined commands.\n\
1164 The commands in this class are those defined by the user.\n\
1165 Use the \"define\" command to define a command.", &cmdlist);
1166 add_cmd ("support", class_support, 0, "Support facilities.", &cmdlist);
1167 add_cmd ("status", class_info, 0, "Status inquiries.", &cmdlist);
1168 add_cmd ("files", class_files, 0, "Specifying and examining files.", &cmdlist);
1169 add_cmd ("breakpoints", class_breakpoint, 0, "Making program stop at certain points.", &cmdlist);
1170 add_cmd ("data", class_vars, 0, "Examining data.", &cmdlist);
1171 add_cmd ("stack", class_stack, 0, "Examining the stack.\n\
1172 The stack is made up of stack frames. Gdb assigns numbers to stack frames\n\
1173 counting from zero for the innermost (currently executing) frame.\n\n\
1174 At any time gdb identifies one frame as the \"selected\" frame.\n\
1175 Variable lookups are done with respect to the selected frame.\n\
1176 When the program being debugged stops, gdb selects the innermost frame.\n\
1177 The commands below can be used to select other frames by number or address.",
1178 &cmdlist);
1179 add_cmd ("running", class_run, 0, "Running the program.", &cmdlist);
1180
1181 add_com ("pwd", class_files, pwd_command,
1182 "Print working directory. This is used for your program as well.");
1183 add_com ("cd", class_files, cd_command,
1184 "Set working directory to DIR for debugger and program being debugged.\n\
1185 The change does not take effect for the program being debugged\n\
1186 until the next time it is started.");
1187
1188 add_com ("set-prompt", class_support, set_prompt_command,
1189 "Change gdb's prompt from the default of \"(gdb)\"");
1190 add_com ("echo", class_support, echo_command,
1191 "Print a constant string. Give string as argument.\n\
1192 C escape sequences may be used in the argument.\n\
1193 No newline is added at the end of the argument;\n\
1194 use \"\\n\" if you want a newline to be printed.\n\
1195 Since leading and trailing whitespace are ignored in command arguments,\n\
1196 if you want to print some you must use \"\\\" before leading whitespace\n\
1197 to be printed or after trailing whitespace.");
1198 add_com ("document", class_support, document_command,
1199 "Document a user-defined command.\n\
1200 Give command name as argument. Give documentation on following lines.\n\
1201 End with a line of just \"end\".");
1202 add_com ("define", class_support, define_command,
1203 "Define a new command name. Command name is argument.\n\
1204 Definition appears on following lines, one command per line.\n\
1205 End with a line of just \"end\".\n\
1206 Use the \"document\" command to give documentation for the new command.\n\
1207 Commands defined in this way do not take arguments.");
1208
1209 add_com ("source", class_support, source_command,
1210 "Read commands from a file named FILE.\n\
1211 Note that the file \".gdbinit\" is read automatically in this way\n\
1212 when gdb is started.");
1213 add_com ("quit", class_support, quit_command, "Exit gdb.");
1214 add_com ("help", class_support, help_command, "Print list of commands.");
1215 add_com_alias ("q", "quit", class_support, 1);
1216 add_com_alias ("h", "help", class_support, 1);
1217
1218 add_com ("dump-me", class_obscure, dump_me_command,
1219 "Get fatal error; make debugger dump its core.");
1220
1221 add_prefix_cmd ("info", class_info, info_command,
1222 "Generic command for printing status.",
1223 &infolist, "info ", 0, &cmdlist);
1224 add_com_alias ("i", "info", class_info, 1);
1225
1226 add_info ("copying", copying_info, "Conditions for redistributing copies of GDB.");
1227 add_info ("warranty", warranty_info, "Various kinds of warranty you do not have.");
1228 add_info ("version", version_info, "Report what version of GDB this is.");
1229 }
This page took 0.055951 seconds and 4 git commands to generate.