* cleanups.h: New file.
[deliverable/binutils-gdb.git] / gdb / utils.c
1 /* General utility routines for GDB, the GNU debugger.
2
3 Copyright (C) 1986, 1988-2012 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 3 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, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "dyn-string.h"
22 #include "gdb_assert.h"
23 #include <ctype.h>
24 #include "gdb_string.h"
25 #include "gdb_wait.h"
26 #include "event-top.h"
27 #include "exceptions.h"
28 #include "gdbthread.h"
29 #ifdef HAVE_SYS_RESOURCE_H
30 #include <sys/resource.h>
31 #endif /* HAVE_SYS_RESOURCE_H */
32
33 #ifdef TUI
34 #include "tui/tui.h" /* For tui_get_command_dimension. */
35 #endif
36
37 #ifdef __GO32__
38 #include <pc.h>
39 #endif
40
41 /* SunOS's curses.h has a '#define reg register' in it. Thank you Sun. */
42 #ifdef reg
43 #undef reg
44 #endif
45
46 #include <signal.h>
47 #include "timeval-utils.h"
48 #include "gdbcmd.h"
49 #include "serial.h"
50 #include "bfd.h"
51 #include "target.h"
52 #include "gdb-demangle.h"
53 #include "expression.h"
54 #include "language.h"
55 #include "charset.h"
56 #include "annotate.h"
57 #include "filenames.h"
58 #include "symfile.h"
59 #include "gdb_obstack.h"
60 #include "gdbcore.h"
61 #include "top.h"
62 #include "main.h"
63 #include "solist.h"
64
65 #include "inferior.h" /* for signed_pointer_to_address */
66
67 #include <sys/param.h> /* For MAXPATHLEN */
68
69 #include "gdb_curses.h"
70
71 #include "readline/readline.h"
72
73 #include <sys/time.h>
74 #include <time.h>
75
76 #include "gdb_usleep.h"
77 #include "interps.h"
78 #include "gdb_regex.h"
79
80 #if !HAVE_DECL_MALLOC
81 extern PTR malloc (); /* ARI: PTR */
82 #endif
83 #if !HAVE_DECL_REALLOC
84 extern PTR realloc (); /* ARI: PTR */
85 #endif
86 #if !HAVE_DECL_FREE
87 extern void free ();
88 #endif
89
90 /* readline defines this. */
91 #undef savestring
92
93 void (*deprecated_error_begin_hook) (void);
94
95 /* Prototypes for local functions */
96
97 static void vfprintf_maybe_filtered (struct ui_file *, const char *,
98 va_list, int) ATTRIBUTE_PRINTF (2, 0);
99
100 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
101
102 static void prompt_for_continue (void);
103
104 static void set_screen_size (void);
105 static void set_width (void);
106
107 /* A flag indicating whether to timestamp debugging messages. */
108
109 static int debug_timestamp = 0;
110
111 /* Nonzero if we have job control. */
112
113 int job_control;
114
115 /* Nonzero means a quit has been requested. */
116
117 int quit_flag;
118
119 /* Nonzero means quit immediately if Control-C is typed now, rather
120 than waiting until QUIT is executed. Be careful in setting this;
121 code which executes with immediate_quit set has to be very careful
122 about being able to deal with being interrupted at any time. It is
123 almost always better to use QUIT; the only exception I can think of
124 is being able to quit out of a system call (using EINTR loses if
125 the SIGINT happens between the previous QUIT and the system call).
126 To immediately quit in the case in which a SIGINT happens between
127 the previous QUIT and setting immediate_quit (desirable anytime we
128 expect to block), call QUIT after setting immediate_quit. */
129
130 int immediate_quit;
131
132 /* Nonzero means that strings with character values >0x7F should be printed
133 as octal escapes. Zero means just print the value (e.g. it's an
134 international character, and the terminal or window can cope.) */
135
136 int sevenbit_strings = 0;
137 static void
138 show_sevenbit_strings (struct ui_file *file, int from_tty,
139 struct cmd_list_element *c, const char *value)
140 {
141 fprintf_filtered (file, _("Printing of 8-bit characters "
142 "in strings as \\nnn is %s.\n"),
143 value);
144 }
145
146 /* String to be printed before error messages, if any. */
147
148 char *error_pre_print;
149
150 /* String to be printed before quit messages, if any. */
151
152 char *quit_pre_print;
153
154 /* String to be printed before warning messages, if any. */
155
156 char *warning_pre_print = "\nwarning: ";
157
158 int pagination_enabled = 1;
159 static void
160 show_pagination_enabled (struct ui_file *file, int from_tty,
161 struct cmd_list_element *c, const char *value)
162 {
163 fprintf_filtered (file, _("State of pagination is %s.\n"), value);
164 }
165
166 \f
167 /* Cleanup utilities.
168
169 These are not defined in cleanups.c (nor declared in cleanups.h)
170 because while they use the "cleanup API" they are not part of the
171 "cleanup API". */
172
173 static void
174 do_freeargv (void *arg)
175 {
176 freeargv ((char **) arg);
177 }
178
179 struct cleanup *
180 make_cleanup_freeargv (char **arg)
181 {
182 return make_cleanup (do_freeargv, arg);
183 }
184
185 static void
186 do_dyn_string_delete (void *arg)
187 {
188 dyn_string_delete ((dyn_string_t) arg);
189 }
190
191 struct cleanup *
192 make_cleanup_dyn_string_delete (dyn_string_t arg)
193 {
194 return make_cleanup (do_dyn_string_delete, arg);
195 }
196
197 static void
198 do_bfd_close_cleanup (void *arg)
199 {
200 bfd_close (arg);
201 }
202
203 struct cleanup *
204 make_cleanup_bfd_close (bfd *abfd)
205 {
206 return make_cleanup (do_bfd_close_cleanup, abfd);
207 }
208
209 static void
210 do_close_cleanup (void *arg)
211 {
212 int *fd = arg;
213
214 close (*fd);
215 }
216
217 struct cleanup *
218 make_cleanup_close (int fd)
219 {
220 int *saved_fd = xmalloc (sizeof (fd));
221
222 *saved_fd = fd;
223 return make_cleanup_dtor (do_close_cleanup, saved_fd, xfree);
224 }
225
226 /* Helper function which does the work for make_cleanup_fclose. */
227
228 static void
229 do_fclose_cleanup (void *arg)
230 {
231 FILE *file = arg;
232
233 fclose (file);
234 }
235
236 /* Return a new cleanup that closes FILE. */
237
238 struct cleanup *
239 make_cleanup_fclose (FILE *file)
240 {
241 return make_cleanup (do_fclose_cleanup, file);
242 }
243
244 /* Helper function which does the work for make_cleanup_obstack_free. */
245
246 static void
247 do_obstack_free (void *arg)
248 {
249 struct obstack *ob = arg;
250
251 obstack_free (ob, NULL);
252 }
253
254 /* Return a new cleanup that frees OBSTACK. */
255
256 struct cleanup *
257 make_cleanup_obstack_free (struct obstack *obstack)
258 {
259 return make_cleanup (do_obstack_free, obstack);
260 }
261
262 static void
263 do_ui_file_delete (void *arg)
264 {
265 ui_file_delete (arg);
266 }
267
268 struct cleanup *
269 make_cleanup_ui_file_delete (struct ui_file *arg)
270 {
271 return make_cleanup (do_ui_file_delete, arg);
272 }
273
274 /* Helper function for make_cleanup_ui_out_redirect_pop. */
275
276 static void
277 do_ui_out_redirect_pop (void *arg)
278 {
279 struct ui_out *uiout = arg;
280
281 if (ui_out_redirect (uiout, NULL) < 0)
282 warning (_("Cannot restore redirection of the current output protocol"));
283 }
284
285 /* Return a new cleanup that pops the last redirection by ui_out_redirect
286 with NULL parameter. */
287
288 struct cleanup *
289 make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
290 {
291 return make_cleanup (do_ui_out_redirect_pop, uiout);
292 }
293
294 static void
295 do_free_section_addr_info (void *arg)
296 {
297 free_section_addr_info (arg);
298 }
299
300 struct cleanup *
301 make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
302 {
303 return make_cleanup (do_free_section_addr_info, addrs);
304 }
305
306 struct restore_integer_closure
307 {
308 int *variable;
309 int value;
310 };
311
312 static void
313 restore_integer (void *p)
314 {
315 struct restore_integer_closure *closure = p;
316
317 *(closure->variable) = closure->value;
318 }
319
320 /* Remember the current value of *VARIABLE and make it restored when
321 the cleanup is run. */
322
323 struct cleanup *
324 make_cleanup_restore_integer (int *variable)
325 {
326 struct restore_integer_closure *c =
327 xmalloc (sizeof (struct restore_integer_closure));
328
329 c->variable = variable;
330 c->value = *variable;
331
332 return make_cleanup_dtor (restore_integer, (void *) c, xfree);
333 }
334
335 /* Remember the current value of *VARIABLE and make it restored when
336 the cleanup is run. */
337
338 struct cleanup *
339 make_cleanup_restore_uinteger (unsigned int *variable)
340 {
341 return make_cleanup_restore_integer ((int *) variable);
342 }
343
344 /* Helper for make_cleanup_unpush_target. */
345
346 static void
347 do_unpush_target (void *arg)
348 {
349 struct target_ops *ops = arg;
350
351 unpush_target (ops);
352 }
353
354 /* Return a new cleanup that unpushes OPS. */
355
356 struct cleanup *
357 make_cleanup_unpush_target (struct target_ops *ops)
358 {
359 return make_cleanup (do_unpush_target, ops);
360 }
361
362 /* Helper for make_cleanup_htab_delete compile time checking the types. */
363
364 static void
365 do_htab_delete_cleanup (void *htab_voidp)
366 {
367 htab_t htab = htab_voidp;
368
369 htab_delete (htab);
370 }
371
372 /* Return a new cleanup that deletes HTAB. */
373
374 struct cleanup *
375 make_cleanup_htab_delete (htab_t htab)
376 {
377 return make_cleanup (do_htab_delete_cleanup, htab);
378 }
379
380 struct restore_ui_file_closure
381 {
382 struct ui_file **variable;
383 struct ui_file *value;
384 };
385
386 static void
387 do_restore_ui_file (void *p)
388 {
389 struct restore_ui_file_closure *closure = p;
390
391 *(closure->variable) = closure->value;
392 }
393
394 /* Remember the current value of *VARIABLE and make it restored when
395 the cleanup is run. */
396
397 struct cleanup *
398 make_cleanup_restore_ui_file (struct ui_file **variable)
399 {
400 struct restore_ui_file_closure *c = XNEW (struct restore_ui_file_closure);
401
402 c->variable = variable;
403 c->value = *variable;
404
405 return make_cleanup_dtor (do_restore_ui_file, (void *) c, xfree);
406 }
407
408 /* Helper for make_cleanup_value_free_to_mark. */
409
410 static void
411 do_value_free_to_mark (void *value)
412 {
413 value_free_to_mark ((struct value *) value);
414 }
415
416 /* Free all values allocated since MARK was obtained by value_mark
417 (except for those released) when the cleanup is run. */
418
419 struct cleanup *
420 make_cleanup_value_free_to_mark (struct value *mark)
421 {
422 return make_cleanup (do_value_free_to_mark, mark);
423 }
424
425 /* Helper for make_cleanup_value_free. */
426
427 static void
428 do_value_free (void *value)
429 {
430 value_free (value);
431 }
432
433 /* Free VALUE. */
434
435 struct cleanup *
436 make_cleanup_value_free (struct value *value)
437 {
438 return make_cleanup (do_value_free, value);
439 }
440
441 /* Helper for make_cleanup_free_so. */
442
443 static void
444 do_free_so (void *arg)
445 {
446 struct so_list *so = arg;
447
448 free_so (so);
449 }
450
451 /* Make cleanup handler calling free_so for SO. */
452
453 struct cleanup *
454 make_cleanup_free_so (struct so_list *so)
455 {
456 return make_cleanup (do_free_so, so);
457 }
458
459 /* This function is useful for cleanups.
460 Do
461
462 foo = xmalloc (...);
463 old_chain = make_cleanup (free_current_contents, &foo);
464
465 to arrange to free the object thus allocated. */
466
467 void
468 free_current_contents (void *ptr)
469 {
470 void **location = ptr;
471
472 if (location == NULL)
473 internal_error (__FILE__, __LINE__,
474 _("free_current_contents: NULL pointer"));
475 if (*location != NULL)
476 {
477 xfree (*location);
478 *location = NULL;
479 }
480 }
481
482 /* If nonzero, display time usage both at startup and for each command. */
483
484 static int display_time;
485
486 /* If nonzero, display space usage both at startup and for each command. */
487
488 static int display_space;
489
490 /* Records a run time and space usage to be used as a base for
491 reporting elapsed time or change in space. In addition,
492 the msg_type field indicates whether the saved time is from the
493 beginning of GDB execution (0) or the beginning of an individual
494 command execution (1). */
495 struct cmd_stats
496 {
497 int msg_type;
498 long start_cpu_time;
499 struct timeval start_wall_time;
500 long start_space;
501 };
502
503 /* Set whether to display time statistics to NEW_VALUE (non-zero
504 means true). */
505 void
506 set_display_time (int new_value)
507 {
508 display_time = new_value;
509 }
510
511 /* Set whether to display space statistics to NEW_VALUE (non-zero
512 means true). */
513 void
514 set_display_space (int new_value)
515 {
516 display_space = new_value;
517 }
518
519 /* As indicated by display_time and display_space, report GDB's elapsed time
520 and space usage from the base time and space provided in ARG, which
521 must be a pointer to a struct cmd_stat. This function is intended
522 to be called as a cleanup. */
523 static void
524 report_command_stats (void *arg)
525 {
526 struct cmd_stats *start_stats = (struct cmd_stats *) arg;
527 int msg_type = start_stats->msg_type;
528
529 if (display_time)
530 {
531 long cmd_time = get_run_time () - start_stats->start_cpu_time;
532 struct timeval now_wall_time, delta_wall_time;
533
534 gettimeofday (&now_wall_time, NULL);
535 timeval_sub (&delta_wall_time,
536 &now_wall_time, &start_stats->start_wall_time);
537
538 printf_unfiltered (msg_type == 0
539 ? _("Startup time: %ld.%06ld (cpu), %ld.%06ld (wall)\n")
540 : _("Command execution time: %ld.%06ld (cpu), %ld.%06ld (wall)\n"),
541 cmd_time / 1000000, cmd_time % 1000000,
542 (long) delta_wall_time.tv_sec,
543 (long) delta_wall_time.tv_usec);
544 }
545
546 if (display_space)
547 {
548 #ifdef HAVE_SBRK
549 char *lim = (char *) sbrk (0);
550
551 long space_now = lim - lim_at_start;
552 long space_diff = space_now - start_stats->start_space;
553
554 printf_unfiltered (msg_type == 0
555 ? _("Space used: %ld (%s%ld during startup)\n")
556 : _("Space used: %ld (%s%ld for this command)\n"),
557 space_now,
558 (space_diff >= 0 ? "+" : ""),
559 space_diff);
560 #endif
561 }
562 }
563
564 /* Create a cleanup that reports time and space used since its
565 creation. Precise messages depend on MSG_TYPE:
566 0: Initial time/space
567 1: Individual command time/space. */
568 struct cleanup *
569 make_command_stats_cleanup (int msg_type)
570 {
571 struct cmd_stats *new_stat = XMALLOC (struct cmd_stats);
572
573 #ifdef HAVE_SBRK
574 char *lim = (char *) sbrk (0);
575 new_stat->start_space = lim - lim_at_start;
576 #endif
577
578 new_stat->msg_type = msg_type;
579 new_stat->start_cpu_time = get_run_time ();
580 gettimeofday (&new_stat->start_wall_time, NULL);
581
582 return make_cleanup_dtor (report_command_stats, new_stat, xfree);
583 }
584 \f
585
586
587 /* Print a warning message. The first argument STRING is the warning
588 message, used as an fprintf format string, the second is the
589 va_list of arguments for that string. A warning is unfiltered (not
590 paginated) so that the user does not need to page through each
591 screen full of warnings when there are lots of them. */
592
593 void
594 vwarning (const char *string, va_list args)
595 {
596 if (deprecated_warning_hook)
597 (*deprecated_warning_hook) (string, args);
598 else
599 {
600 target_terminal_ours ();
601 wrap_here (""); /* Force out any buffered output. */
602 gdb_flush (gdb_stdout);
603 if (warning_pre_print)
604 fputs_unfiltered (warning_pre_print, gdb_stderr);
605 vfprintf_unfiltered (gdb_stderr, string, args);
606 fprintf_unfiltered (gdb_stderr, "\n");
607 va_end (args);
608 }
609 }
610
611 /* Print a warning message.
612 The first argument STRING is the warning message, used as a fprintf string,
613 and the remaining args are passed as arguments to it.
614 The primary difference between warnings and errors is that a warning
615 does not force the return to command level. */
616
617 void
618 warning (const char *string, ...)
619 {
620 va_list args;
621
622 va_start (args, string);
623 vwarning (string, args);
624 va_end (args);
625 }
626
627 /* Print an error message and return to command level.
628 The first argument STRING is the error message, used as a fprintf string,
629 and the remaining args are passed as arguments to it. */
630
631 void
632 verror (const char *string, va_list args)
633 {
634 throw_verror (GENERIC_ERROR, string, args);
635 }
636
637 void
638 error (const char *string, ...)
639 {
640 va_list args;
641
642 va_start (args, string);
643 throw_verror (GENERIC_ERROR, string, args);
644 va_end (args);
645 }
646
647 /* Print an error message and quit.
648 The first argument STRING is the error message, used as a fprintf string,
649 and the remaining args are passed as arguments to it. */
650
651 void
652 vfatal (const char *string, va_list args)
653 {
654 throw_vfatal (string, args);
655 }
656
657 void
658 fatal (const char *string, ...)
659 {
660 va_list args;
661
662 va_start (args, string);
663 throw_vfatal (string, args);
664 va_end (args);
665 }
666
667 void
668 error_stream (struct ui_file *stream)
669 {
670 char *message = ui_file_xstrdup (stream, NULL);
671
672 make_cleanup (xfree, message);
673 error (("%s"), message);
674 }
675
676 /* Dump core trying to increase the core soft limit to hard limit first. */
677
678 static void
679 dump_core (void)
680 {
681 #ifdef HAVE_SETRLIMIT
682 struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY };
683
684 setrlimit (RLIMIT_CORE, &rlim);
685 #endif /* HAVE_SETRLIMIT */
686
687 abort (); /* NOTE: GDB has only three calls to abort(). */
688 }
689
690 /* Check whether GDB will be able to dump core using the dump_core
691 function. */
692
693 static int
694 can_dump_core (const char *reason)
695 {
696 #ifdef HAVE_GETRLIMIT
697 struct rlimit rlim;
698
699 /* Be quiet and assume we can dump if an error is returned. */
700 if (getrlimit (RLIMIT_CORE, &rlim) != 0)
701 return 1;
702
703 if (rlim.rlim_max == 0)
704 {
705 fprintf_unfiltered (gdb_stderr,
706 _("%s\nUnable to dump core, use `ulimit -c"
707 " unlimited' before executing GDB next time.\n"),
708 reason);
709 return 0;
710 }
711 #endif /* HAVE_GETRLIMIT */
712
713 return 1;
714 }
715
716 /* Allow the user to configure the debugger behavior with respect to
717 what to do when an internal problem is detected. */
718
719 const char internal_problem_ask[] = "ask";
720 const char internal_problem_yes[] = "yes";
721 const char internal_problem_no[] = "no";
722 static const char *const internal_problem_modes[] =
723 {
724 internal_problem_ask,
725 internal_problem_yes,
726 internal_problem_no,
727 NULL
728 };
729
730 /* Print a message reporting an internal error/warning. Ask the user
731 if they want to continue, dump core, or just exit. Return
732 something to indicate a quit. */
733
734 struct internal_problem
735 {
736 const char *name;
737 const char *should_quit;
738 const char *should_dump_core;
739 };
740
741 /* Report a problem, internal to GDB, to the user. Once the problem
742 has been reported, and assuming GDB didn't quit, the caller can
743 either allow execution to resume or throw an error. */
744
745 static void ATTRIBUTE_PRINTF (4, 0)
746 internal_vproblem (struct internal_problem *problem,
747 const char *file, int line, const char *fmt, va_list ap)
748 {
749 static int dejavu;
750 int quit_p;
751 int dump_core_p;
752 char *reason;
753
754 /* Don't allow infinite error/warning recursion. */
755 {
756 static char msg[] = "Recursive internal problem.\n";
757
758 switch (dejavu)
759 {
760 case 0:
761 dejavu = 1;
762 break;
763 case 1:
764 dejavu = 2;
765 fputs_unfiltered (msg, gdb_stderr);
766 abort (); /* NOTE: GDB has only three calls to abort(). */
767 default:
768 dejavu = 3;
769 /* Newer GLIBC versions put the warn_unused_result attribute
770 on write, but this is one of those rare cases where
771 ignoring the return value is correct. Casting to (void)
772 does not fix this problem. This is the solution suggested
773 at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */
774 if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg))
775 abort (); /* NOTE: GDB has only three calls to abort(). */
776 exit (1);
777 }
778 }
779
780 /* Try to get the message out and at the start of a new line. */
781 target_terminal_ours ();
782 begin_line ();
783
784 /* Create a string containing the full error/warning message. Need
785 to call query with this full string, as otherwize the reason
786 (error/warning) and question become separated. Format using a
787 style similar to a compiler error message. Include extra detail
788 so that the user knows that they are living on the edge. */
789 {
790 char *msg;
791
792 msg = xstrvprintf (fmt, ap);
793 reason = xstrprintf ("%s:%d: %s: %s\n"
794 "A problem internal to GDB has been detected,\n"
795 "further debugging may prove unreliable.",
796 file, line, problem->name, msg);
797 xfree (msg);
798 make_cleanup (xfree, reason);
799 }
800
801 if (problem->should_quit == internal_problem_ask)
802 {
803 /* Default (yes/batch case) is to quit GDB. When in batch mode
804 this lessens the likelihood of GDB going into an infinite
805 loop. */
806 if (!confirm)
807 {
808 /* Emit the message and quit. */
809 fputs_unfiltered (reason, gdb_stderr);
810 fputs_unfiltered ("\n", gdb_stderr);
811 quit_p = 1;
812 }
813 else
814 quit_p = query (_("%s\nQuit this debugging session? "), reason);
815 }
816 else if (problem->should_quit == internal_problem_yes)
817 quit_p = 1;
818 else if (problem->should_quit == internal_problem_no)
819 quit_p = 0;
820 else
821 internal_error (__FILE__, __LINE__, _("bad switch"));
822
823 if (problem->should_dump_core == internal_problem_ask)
824 {
825 if (!can_dump_core (reason))
826 dump_core_p = 0;
827 else
828 {
829 /* Default (yes/batch case) is to dump core. This leaves a GDB
830 `dropping' so that it is easier to see that something went
831 wrong in GDB. */
832 dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
833 }
834 }
835 else if (problem->should_dump_core == internal_problem_yes)
836 dump_core_p = can_dump_core (reason);
837 else if (problem->should_dump_core == internal_problem_no)
838 dump_core_p = 0;
839 else
840 internal_error (__FILE__, __LINE__, _("bad switch"));
841
842 if (quit_p)
843 {
844 if (dump_core_p)
845 dump_core ();
846 else
847 exit (1);
848 }
849 else
850 {
851 if (dump_core_p)
852 {
853 #ifdef HAVE_WORKING_FORK
854 if (fork () == 0)
855 dump_core ();
856 #endif
857 }
858 }
859
860 dejavu = 0;
861 }
862
863 static struct internal_problem internal_error_problem = {
864 "internal-error", internal_problem_ask, internal_problem_ask
865 };
866
867 void
868 internal_verror (const char *file, int line, const char *fmt, va_list ap)
869 {
870 internal_vproblem (&internal_error_problem, file, line, fmt, ap);
871 deprecated_throw_reason (RETURN_ERROR);
872 }
873
874 void
875 internal_error (const char *file, int line, const char *string, ...)
876 {
877 va_list ap;
878
879 va_start (ap, string);
880 internal_verror (file, line, string, ap);
881 va_end (ap);
882 }
883
884 static struct internal_problem internal_warning_problem = {
885 "internal-warning", internal_problem_ask, internal_problem_ask
886 };
887
888 void
889 internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
890 {
891 internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
892 }
893
894 void
895 internal_warning (const char *file, int line, const char *string, ...)
896 {
897 va_list ap;
898
899 va_start (ap, string);
900 internal_vwarning (file, line, string, ap);
901 va_end (ap);
902 }
903
904 /* Dummy functions to keep add_prefix_cmd happy. */
905
906 static void
907 set_internal_problem_cmd (char *args, int from_tty)
908 {
909 }
910
911 static void
912 show_internal_problem_cmd (char *args, int from_tty)
913 {
914 }
915
916 /* When GDB reports an internal problem (error or warning) it gives
917 the user the opportunity to quit GDB and/or create a core file of
918 the current debug session. This function registers a few commands
919 that make it possible to specify that GDB should always or never
920 quit or create a core file, without asking. The commands look
921 like:
922
923 maint set PROBLEM-NAME quit ask|yes|no
924 maint show PROBLEM-NAME quit
925 maint set PROBLEM-NAME corefile ask|yes|no
926 maint show PROBLEM-NAME corefile
927
928 Where PROBLEM-NAME is currently "internal-error" or
929 "internal-warning". */
930
931 static void
932 add_internal_problem_command (struct internal_problem *problem)
933 {
934 struct cmd_list_element **set_cmd_list;
935 struct cmd_list_element **show_cmd_list;
936 char *set_doc;
937 char *show_doc;
938
939 set_cmd_list = xmalloc (sizeof (*set_cmd_list));
940 show_cmd_list = xmalloc (sizeof (*set_cmd_list));
941 *set_cmd_list = NULL;
942 *show_cmd_list = NULL;
943
944 set_doc = xstrprintf (_("Configure what GDB does when %s is detected."),
945 problem->name);
946
947 show_doc = xstrprintf (_("Show what GDB does when %s is detected."),
948 problem->name);
949
950 add_prefix_cmd ((char*) problem->name,
951 class_maintenance, set_internal_problem_cmd, set_doc,
952 set_cmd_list,
953 concat ("maintenance set ", problem->name, " ",
954 (char *) NULL),
955 0/*allow-unknown*/, &maintenance_set_cmdlist);
956
957 add_prefix_cmd ((char*) problem->name,
958 class_maintenance, show_internal_problem_cmd, show_doc,
959 show_cmd_list,
960 concat ("maintenance show ", problem->name, " ",
961 (char *) NULL),
962 0/*allow-unknown*/, &maintenance_show_cmdlist);
963
964 set_doc = xstrprintf (_("Set whether GDB should quit "
965 "when an %s is detected"),
966 problem->name);
967 show_doc = xstrprintf (_("Show whether GDB will quit "
968 "when an %s is detected"),
969 problem->name);
970 add_setshow_enum_cmd ("quit", class_maintenance,
971 internal_problem_modes,
972 &problem->should_quit,
973 set_doc,
974 show_doc,
975 NULL, /* help_doc */
976 NULL, /* setfunc */
977 NULL, /* showfunc */
978 set_cmd_list,
979 show_cmd_list);
980
981 xfree (set_doc);
982 xfree (show_doc);
983
984 set_doc = xstrprintf (_("Set whether GDB should create a core "
985 "file of GDB when %s is detected"),
986 problem->name);
987 show_doc = xstrprintf (_("Show whether GDB will create a core "
988 "file of GDB when %s is detected"),
989 problem->name);
990 add_setshow_enum_cmd ("corefile", class_maintenance,
991 internal_problem_modes,
992 &problem->should_dump_core,
993 set_doc,
994 show_doc,
995 NULL, /* help_doc */
996 NULL, /* setfunc */
997 NULL, /* showfunc */
998 set_cmd_list,
999 show_cmd_list);
1000
1001 xfree (set_doc);
1002 xfree (show_doc);
1003 }
1004
1005 /* Print the system error message for errno, and also mention STRING
1006 as the file name for which the error was encountered.
1007 Then return to command level. */
1008
1009 void
1010 perror_with_name (const char *string)
1011 {
1012 char *err;
1013 char *combined;
1014
1015 err = safe_strerror (errno);
1016 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
1017 strcpy (combined, string);
1018 strcat (combined, ": ");
1019 strcat (combined, err);
1020
1021 /* I understand setting these is a matter of taste. Still, some people
1022 may clear errno but not know about bfd_error. Doing this here is not
1023 unreasonable. */
1024 bfd_set_error (bfd_error_no_error);
1025 errno = 0;
1026
1027 error (_("%s."), combined);
1028 }
1029
1030 /* Print the system error message for ERRCODE, and also mention STRING
1031 as the file name for which the error was encountered. */
1032
1033 void
1034 print_sys_errmsg (const char *string, int errcode)
1035 {
1036 char *err;
1037 char *combined;
1038
1039 err = safe_strerror (errcode);
1040 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
1041 strcpy (combined, string);
1042 strcat (combined, ": ");
1043 strcat (combined, err);
1044
1045 /* We want anything which was printed on stdout to come out first, before
1046 this message. */
1047 gdb_flush (gdb_stdout);
1048 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
1049 }
1050
1051 /* Control C eventually causes this to be called, at a convenient time. */
1052
1053 void
1054 quit (void)
1055 {
1056 #ifdef __MSDOS__
1057 /* No steenking SIGINT will ever be coming our way when the
1058 program is resumed. Don't lie. */
1059 fatal ("Quit");
1060 #else
1061 if (job_control
1062 /* If there is no terminal switching for this target, then we can't
1063 possibly get screwed by the lack of job control. */
1064 || current_target.to_terminal_ours == NULL)
1065 fatal ("Quit");
1066 else
1067 fatal ("Quit (expect signal SIGINT when the program is resumed)");
1068 #endif
1069 }
1070
1071 \f
1072 /* Called when a memory allocation fails, with the number of bytes of
1073 memory requested in SIZE. */
1074
1075 void
1076 malloc_failure (long size)
1077 {
1078 if (size > 0)
1079 {
1080 internal_error (__FILE__, __LINE__,
1081 _("virtual memory exhausted: can't allocate %ld bytes."),
1082 size);
1083 }
1084 else
1085 {
1086 internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
1087 }
1088 }
1089
1090 /* My replacement for the read system call.
1091 Used like `read' but keeps going if `read' returns too soon. */
1092
1093 int
1094 myread (int desc, char *addr, int len)
1095 {
1096 int val;
1097 int orglen = len;
1098
1099 while (len > 0)
1100 {
1101 val = read (desc, addr, len);
1102 if (val < 0)
1103 return val;
1104 if (val == 0)
1105 return orglen - len;
1106 len -= val;
1107 addr += val;
1108 }
1109 return orglen;
1110 }
1111
1112 /* Make a copy of the string at PTR with SIZE characters
1113 (and add a null character at the end in the copy).
1114 Uses malloc to get the space. Returns the address of the copy. */
1115
1116 char *
1117 savestring (const char *ptr, size_t size)
1118 {
1119 char *p = (char *) xmalloc (size + 1);
1120
1121 memcpy (p, ptr, size);
1122 p[size] = 0;
1123 return p;
1124 }
1125
1126 void
1127 print_spaces (int n, struct ui_file *file)
1128 {
1129 fputs_unfiltered (n_spaces (n), file);
1130 }
1131
1132 /* Print a host address. */
1133
1134 void
1135 gdb_print_host_address (const void *addr, struct ui_file *stream)
1136 {
1137 fprintf_filtered (stream, "%s", host_address_to_string (addr));
1138 }
1139 \f
1140
1141 /* A cleanup function that calls regfree. */
1142
1143 static void
1144 do_regfree_cleanup (void *r)
1145 {
1146 regfree (r);
1147 }
1148
1149 /* Create a new cleanup that frees the compiled regular expression R. */
1150
1151 struct cleanup *
1152 make_regfree_cleanup (regex_t *r)
1153 {
1154 return make_cleanup (do_regfree_cleanup, r);
1155 }
1156
1157 /* Return an xmalloc'd error message resulting from a regular
1158 expression compilation failure. */
1159
1160 char *
1161 get_regcomp_error (int code, regex_t *rx)
1162 {
1163 size_t length = regerror (code, rx, NULL, 0);
1164 char *result = xmalloc (length);
1165
1166 regerror (code, rx, result, length);
1167 return result;
1168 }
1169
1170 \f
1171
1172 /* This function supports the query, nquery, and yquery functions.
1173 Ask user a y-or-n question and return 0 if answer is no, 1 if
1174 answer is yes, or default the answer to the specified default
1175 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a
1176 default answer, or '\0' for no default.
1177 CTLSTR is the control string and should end in "? ". It should
1178 not say how to answer, because we do that.
1179 ARGS are the arguments passed along with the CTLSTR argument to
1180 printf. */
1181
1182 static int ATTRIBUTE_PRINTF (1, 0)
1183 defaulted_query (const char *ctlstr, const char defchar, va_list args)
1184 {
1185 int answer;
1186 int ans2;
1187 int retval;
1188 int def_value;
1189 char def_answer, not_def_answer;
1190 char *y_string, *n_string, *question;
1191
1192 /* Set up according to which answer is the default. */
1193 if (defchar == '\0')
1194 {
1195 def_value = 1;
1196 def_answer = 'Y';
1197 not_def_answer = 'N';
1198 y_string = "y";
1199 n_string = "n";
1200 }
1201 else if (defchar == 'y')
1202 {
1203 def_value = 1;
1204 def_answer = 'Y';
1205 not_def_answer = 'N';
1206 y_string = "[y]";
1207 n_string = "n";
1208 }
1209 else
1210 {
1211 def_value = 0;
1212 def_answer = 'N';
1213 not_def_answer = 'Y';
1214 y_string = "y";
1215 n_string = "[n]";
1216 }
1217
1218 /* Automatically answer the default value if the user did not want
1219 prompts or the command was issued with the server prefix. */
1220 if (!confirm || server_command)
1221 return def_value;
1222
1223 /* If input isn't coming from the user directly, just say what
1224 question we're asking, and then answer the default automatically. This
1225 way, important error messages don't get lost when talking to GDB
1226 over a pipe. */
1227 if (! input_from_terminal_p ())
1228 {
1229 wrap_here ("");
1230 vfprintf_filtered (gdb_stdout, ctlstr, args);
1231
1232 printf_filtered (_("(%s or %s) [answered %c; "
1233 "input not from terminal]\n"),
1234 y_string, n_string, def_answer);
1235 gdb_flush (gdb_stdout);
1236
1237 return def_value;
1238 }
1239
1240 if (deprecated_query_hook)
1241 {
1242 return deprecated_query_hook (ctlstr, args);
1243 }
1244
1245 /* Format the question outside of the loop, to avoid reusing args. */
1246 question = xstrvprintf (ctlstr, args);
1247
1248 while (1)
1249 {
1250 wrap_here (""); /* Flush any buffered output. */
1251 gdb_flush (gdb_stdout);
1252
1253 if (annotation_level > 1)
1254 printf_filtered (("\n\032\032pre-query\n"));
1255
1256 fputs_filtered (question, gdb_stdout);
1257 printf_filtered (_("(%s or %s) "), y_string, n_string);
1258
1259 if (annotation_level > 1)
1260 printf_filtered (("\n\032\032query\n"));
1261
1262 wrap_here ("");
1263 gdb_flush (gdb_stdout);
1264
1265 answer = fgetc (stdin);
1266
1267 /* We expect fgetc to block until a character is read. But
1268 this may not be the case if the terminal was opened with
1269 the NONBLOCK flag. In that case, if there is nothing to
1270 read on stdin, fgetc returns EOF, but also sets the error
1271 condition flag on stdin and errno to EAGAIN. With a true
1272 EOF, stdin's error condition flag is not set.
1273
1274 A situation where this behavior was observed is a pseudo
1275 terminal on AIX. */
1276 while (answer == EOF && ferror (stdin) && errno == EAGAIN)
1277 {
1278 /* Not a real EOF. Wait a little while and try again until
1279 we read something. */
1280 clearerr (stdin);
1281 gdb_usleep (10000);
1282 answer = fgetc (stdin);
1283 }
1284
1285 clearerr (stdin); /* in case of C-d */
1286 if (answer == EOF) /* C-d */
1287 {
1288 printf_filtered ("EOF [assumed %c]\n", def_answer);
1289 retval = def_value;
1290 break;
1291 }
1292 /* Eat rest of input line, to EOF or newline. */
1293 if (answer != '\n')
1294 do
1295 {
1296 ans2 = fgetc (stdin);
1297 clearerr (stdin);
1298 }
1299 while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1300
1301 if (answer >= 'a')
1302 answer -= 040;
1303 /* Check answer. For the non-default, the user must specify
1304 the non-default explicitly. */
1305 if (answer == not_def_answer)
1306 {
1307 retval = !def_value;
1308 break;
1309 }
1310 /* Otherwise, if a default was specified, the user may either
1311 specify the required input or have it default by entering
1312 nothing. */
1313 if (answer == def_answer
1314 || (defchar != '\0' &&
1315 (answer == '\n' || answer == '\r' || answer == EOF)))
1316 {
1317 retval = def_value;
1318 break;
1319 }
1320 /* Invalid entries are not defaulted and require another selection. */
1321 printf_filtered (_("Please answer %s or %s.\n"),
1322 y_string, n_string);
1323 }
1324
1325 xfree (question);
1326 if (annotation_level > 1)
1327 printf_filtered (("\n\032\032post-query\n"));
1328 return retval;
1329 }
1330 \f
1331
1332 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1333 answer is yes, or 0 if answer is defaulted.
1334 Takes three args which are given to printf to print the question.
1335 The first, a control string, should end in "? ".
1336 It should not say how to answer, because we do that. */
1337
1338 int
1339 nquery (const char *ctlstr, ...)
1340 {
1341 va_list args;
1342 int ret;
1343
1344 va_start (args, ctlstr);
1345 ret = defaulted_query (ctlstr, 'n', args);
1346 va_end (args);
1347 return ret;
1348 }
1349
1350 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1351 answer is yes, or 1 if answer is defaulted.
1352 Takes three args which are given to printf to print the question.
1353 The first, a control string, should end in "? ".
1354 It should not say how to answer, because we do that. */
1355
1356 int
1357 yquery (const char *ctlstr, ...)
1358 {
1359 va_list args;
1360 int ret;
1361
1362 va_start (args, ctlstr);
1363 ret = defaulted_query (ctlstr, 'y', args);
1364 va_end (args);
1365 return ret;
1366 }
1367
1368 /* Ask user a y-or-n question and return 1 iff answer is yes.
1369 Takes three args which are given to printf to print the question.
1370 The first, a control string, should end in "? ".
1371 It should not say how to answer, because we do that. */
1372
1373 int
1374 query (const char *ctlstr, ...)
1375 {
1376 va_list args;
1377 int ret;
1378
1379 va_start (args, ctlstr);
1380 ret = defaulted_query (ctlstr, '\0', args);
1381 va_end (args);
1382 return ret;
1383 }
1384
1385 /* A helper for parse_escape that converts a host character to a
1386 target character. C is the host character. If conversion is
1387 possible, then the target character is stored in *TARGET_C and the
1388 function returns 1. Otherwise, the function returns 0. */
1389
1390 static int
1391 host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
1392 {
1393 struct obstack host_data;
1394 char the_char = c;
1395 struct cleanup *cleanups;
1396 int result = 0;
1397
1398 obstack_init (&host_data);
1399 cleanups = make_cleanup_obstack_free (&host_data);
1400
1401 convert_between_encodings (target_charset (gdbarch), host_charset (),
1402 &the_char, 1, 1, &host_data, translit_none);
1403
1404 if (obstack_object_size (&host_data) == 1)
1405 {
1406 result = 1;
1407 *target_c = *(char *) obstack_base (&host_data);
1408 }
1409
1410 do_cleanups (cleanups);
1411 return result;
1412 }
1413
1414 /* Parse a C escape sequence. STRING_PTR points to a variable
1415 containing a pointer to the string to parse. That pointer
1416 should point to the character after the \. That pointer
1417 is updated past the characters we use. The value of the
1418 escape sequence is returned.
1419
1420 A negative value means the sequence \ newline was seen,
1421 which is supposed to be equivalent to nothing at all.
1422
1423 If \ is followed by a null character, we return a negative
1424 value and leave the string pointer pointing at the null character.
1425
1426 If \ is followed by 000, we return 0 and leave the string pointer
1427 after the zeros. A value of 0 does not mean end of string. */
1428
1429 int
1430 parse_escape (struct gdbarch *gdbarch, char **string_ptr)
1431 {
1432 int target_char = -2; /* Initialize to avoid GCC warnings. */
1433 int c = *(*string_ptr)++;
1434
1435 switch (c)
1436 {
1437 case '\n':
1438 return -2;
1439 case 0:
1440 (*string_ptr)--;
1441 return 0;
1442
1443 case '0':
1444 case '1':
1445 case '2':
1446 case '3':
1447 case '4':
1448 case '5':
1449 case '6':
1450 case '7':
1451 {
1452 int i = host_hex_value (c);
1453 int count = 0;
1454 while (++count < 3)
1455 {
1456 c = (**string_ptr);
1457 if (isdigit (c) && c != '8' && c != '9')
1458 {
1459 (*string_ptr)++;
1460 i *= 8;
1461 i += host_hex_value (c);
1462 }
1463 else
1464 {
1465 break;
1466 }
1467 }
1468 return i;
1469 }
1470
1471 case 'a':
1472 c = '\a';
1473 break;
1474 case 'b':
1475 c = '\b';
1476 break;
1477 case 'f':
1478 c = '\f';
1479 break;
1480 case 'n':
1481 c = '\n';
1482 break;
1483 case 'r':
1484 c = '\r';
1485 break;
1486 case 't':
1487 c = '\t';
1488 break;
1489 case 'v':
1490 c = '\v';
1491 break;
1492
1493 default:
1494 break;
1495 }
1496
1497 if (!host_char_to_target (gdbarch, c, &target_char))
1498 error (_("The escape sequence `\\%c' is equivalent to plain `%c',"
1499 " which has no equivalent\nin the `%s' character set."),
1500 c, c, target_charset (gdbarch));
1501 return target_char;
1502 }
1503 \f
1504 /* Print the character C on STREAM as part of the contents of a literal
1505 string whose delimiter is QUOTER. Note that this routine should only
1506 be call for printing things which are independent of the language
1507 of the program being debugged. */
1508
1509 static void
1510 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1511 void (*do_fprintf) (struct ui_file *, const char *, ...)
1512 ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
1513 {
1514 c &= 0xFF; /* Avoid sign bit follies */
1515
1516 if (c < 0x20 || /* Low control chars */
1517 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1518 (sevenbit_strings && c >= 0x80))
1519 { /* high order bit set */
1520 switch (c)
1521 {
1522 case '\n':
1523 do_fputs ("\\n", stream);
1524 break;
1525 case '\b':
1526 do_fputs ("\\b", stream);
1527 break;
1528 case '\t':
1529 do_fputs ("\\t", stream);
1530 break;
1531 case '\f':
1532 do_fputs ("\\f", stream);
1533 break;
1534 case '\r':
1535 do_fputs ("\\r", stream);
1536 break;
1537 case '\033':
1538 do_fputs ("\\e", stream);
1539 break;
1540 case '\007':
1541 do_fputs ("\\a", stream);
1542 break;
1543 default:
1544 do_fprintf (stream, "\\%.3o", (unsigned int) c);
1545 break;
1546 }
1547 }
1548 else
1549 {
1550 if (c == '\\' || c == quoter)
1551 do_fputs ("\\", stream);
1552 do_fprintf (stream, "%c", c);
1553 }
1554 }
1555
1556 /* Print the character C on STREAM as part of the contents of a
1557 literal string whose delimiter is QUOTER. Note that these routines
1558 should only be call for printing things which are independent of
1559 the language of the program being debugged. */
1560
1561 void
1562 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1563 {
1564 while (*str)
1565 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1566 }
1567
1568 void
1569 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1570 {
1571 while (*str)
1572 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1573 }
1574
1575 void
1576 fputstrn_filtered (const char *str, int n, int quoter,
1577 struct ui_file *stream)
1578 {
1579 int i;
1580
1581 for (i = 0; i < n; i++)
1582 printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1583 }
1584
1585 void
1586 fputstrn_unfiltered (const char *str, int n, int quoter,
1587 struct ui_file *stream)
1588 {
1589 int i;
1590
1591 for (i = 0; i < n; i++)
1592 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1593 }
1594 \f
1595
1596 /* Number of lines per page or UINT_MAX if paging is disabled. */
1597 static unsigned int lines_per_page;
1598 static void
1599 show_lines_per_page (struct ui_file *file, int from_tty,
1600 struct cmd_list_element *c, const char *value)
1601 {
1602 fprintf_filtered (file,
1603 _("Number of lines gdb thinks are in a page is %s.\n"),
1604 value);
1605 }
1606
1607 /* Number of chars per line or UINT_MAX if line folding is disabled. */
1608 static unsigned int chars_per_line;
1609 static void
1610 show_chars_per_line (struct ui_file *file, int from_tty,
1611 struct cmd_list_element *c, const char *value)
1612 {
1613 fprintf_filtered (file,
1614 _("Number of characters gdb thinks "
1615 "are in a line is %s.\n"),
1616 value);
1617 }
1618
1619 /* Current count of lines printed on this page, chars on this line. */
1620 static unsigned int lines_printed, chars_printed;
1621
1622 /* Buffer and start column of buffered text, for doing smarter word-
1623 wrapping. When someone calls wrap_here(), we start buffering output
1624 that comes through fputs_filtered(). If we see a newline, we just
1625 spit it out and forget about the wrap_here(). If we see another
1626 wrap_here(), we spit it out and remember the newer one. If we see
1627 the end of the line, we spit out a newline, the indent, and then
1628 the buffered output. */
1629
1630 /* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1631 are waiting to be output (they have already been counted in chars_printed).
1632 When wrap_buffer[0] is null, the buffer is empty. */
1633 static char *wrap_buffer;
1634
1635 /* Pointer in wrap_buffer to the next character to fill. */
1636 static char *wrap_pointer;
1637
1638 /* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1639 is non-zero. */
1640 static char *wrap_indent;
1641
1642 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1643 is not in effect. */
1644 static int wrap_column;
1645 \f
1646
1647 /* Inialize the number of lines per page and chars per line. */
1648
1649 void
1650 init_page_info (void)
1651 {
1652 if (batch_flag)
1653 {
1654 lines_per_page = UINT_MAX;
1655 chars_per_line = UINT_MAX;
1656 }
1657 else
1658 #if defined(TUI)
1659 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
1660 #endif
1661 {
1662 int rows, cols;
1663
1664 #if defined(__GO32__)
1665 rows = ScreenRows ();
1666 cols = ScreenCols ();
1667 lines_per_page = rows;
1668 chars_per_line = cols;
1669 #else
1670 /* Make sure Readline has initialized its terminal settings. */
1671 rl_reset_terminal (NULL);
1672
1673 /* Get the screen size from Readline. */
1674 rl_get_screen_size (&rows, &cols);
1675 lines_per_page = rows;
1676 chars_per_line = cols;
1677
1678 /* Readline should have fetched the termcap entry for us. */
1679 if (tgetnum ("li") < 0 || getenv ("EMACS"))
1680 {
1681 /* The number of lines per page is not mentioned in the
1682 terminal description. This probably means that paging is
1683 not useful (e.g. emacs shell window), so disable paging. */
1684 lines_per_page = UINT_MAX;
1685 }
1686
1687 /* FIXME: Get rid of this junk. */
1688 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1689 SIGWINCH_HANDLER (SIGWINCH);
1690 #endif
1691
1692 /* If the output is not a terminal, don't paginate it. */
1693 if (!ui_file_isatty (gdb_stdout))
1694 lines_per_page = UINT_MAX;
1695 #endif
1696 }
1697
1698 set_screen_size ();
1699 set_width ();
1700 }
1701
1702 /* Helper for make_cleanup_restore_page_info. */
1703
1704 static void
1705 do_restore_page_info_cleanup (void *arg)
1706 {
1707 set_screen_size ();
1708 set_width ();
1709 }
1710
1711 /* Provide cleanup for restoring the terminal size. */
1712
1713 struct cleanup *
1714 make_cleanup_restore_page_info (void)
1715 {
1716 struct cleanup *back_to;
1717
1718 back_to = make_cleanup (do_restore_page_info_cleanup, NULL);
1719 make_cleanup_restore_uinteger (&lines_per_page);
1720 make_cleanup_restore_uinteger (&chars_per_line);
1721
1722 return back_to;
1723 }
1724
1725 /* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
1726 Provide cleanup for restoring the original state. */
1727
1728 struct cleanup *
1729 set_batch_flag_and_make_cleanup_restore_page_info (void)
1730 {
1731 struct cleanup *back_to = make_cleanup_restore_page_info ();
1732
1733 make_cleanup_restore_integer (&batch_flag);
1734 batch_flag = 1;
1735 init_page_info ();
1736
1737 return back_to;
1738 }
1739
1740 /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1741
1742 static void
1743 set_screen_size (void)
1744 {
1745 int rows = lines_per_page;
1746 int cols = chars_per_line;
1747
1748 if (rows <= 0)
1749 rows = INT_MAX;
1750
1751 if (cols <= 0)
1752 cols = INT_MAX;
1753
1754 /* Update Readline's idea of the terminal size. */
1755 rl_set_screen_size (rows, cols);
1756 }
1757
1758 /* Reinitialize WRAP_BUFFER according to the current value of
1759 CHARS_PER_LINE. */
1760
1761 static void
1762 set_width (void)
1763 {
1764 if (chars_per_line == 0)
1765 init_page_info ();
1766
1767 if (!wrap_buffer)
1768 {
1769 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1770 wrap_buffer[0] = '\0';
1771 }
1772 else
1773 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1774 wrap_pointer = wrap_buffer; /* Start it at the beginning. */
1775 }
1776
1777 static void
1778 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1779 {
1780 set_screen_size ();
1781 set_width ();
1782 }
1783
1784 static void
1785 set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1786 {
1787 set_screen_size ();
1788 }
1789
1790 /* Wait, so the user can read what's on the screen. Prompt the user
1791 to continue by pressing RETURN. */
1792
1793 static void
1794 prompt_for_continue (void)
1795 {
1796 char *ignore;
1797 char cont_prompt[120];
1798
1799 if (annotation_level > 1)
1800 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
1801
1802 strcpy (cont_prompt,
1803 "---Type <return> to continue, or q <return> to quit---");
1804 if (annotation_level > 1)
1805 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1806
1807 /* We must do this *before* we call gdb_readline, else it will eventually
1808 call us -- thinking that we're trying to print beyond the end of the
1809 screen. */
1810 reinitialize_more_filter ();
1811
1812 immediate_quit++;
1813 /* On a real operating system, the user can quit with SIGINT.
1814 But not on GO32.
1815
1816 'q' is provided on all systems so users don't have to change habits
1817 from system to system, and because telling them what to do in
1818 the prompt is more user-friendly than expecting them to think of
1819 SIGINT. */
1820 /* Call readline, not gdb_readline, because GO32 readline handles control-C
1821 whereas control-C to gdb_readline will cause the user to get dumped
1822 out to DOS. */
1823 ignore = gdb_readline_wrapper (cont_prompt);
1824
1825 if (annotation_level > 1)
1826 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
1827
1828 if (ignore)
1829 {
1830 char *p = ignore;
1831
1832 while (*p == ' ' || *p == '\t')
1833 ++p;
1834 if (p[0] == 'q')
1835 async_request_quit (0);
1836 xfree (ignore);
1837 }
1838 immediate_quit--;
1839
1840 /* Now we have to do this again, so that GDB will know that it doesn't
1841 need to save the ---Type <return>--- line at the top of the screen. */
1842 reinitialize_more_filter ();
1843
1844 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
1845 }
1846
1847 /* Reinitialize filter; ie. tell it to reset to original values. */
1848
1849 void
1850 reinitialize_more_filter (void)
1851 {
1852 lines_printed = 0;
1853 chars_printed = 0;
1854 }
1855
1856 /* Indicate that if the next sequence of characters overflows the line,
1857 a newline should be inserted here rather than when it hits the end.
1858 If INDENT is non-null, it is a string to be printed to indent the
1859 wrapped part on the next line. INDENT must remain accessible until
1860 the next call to wrap_here() or until a newline is printed through
1861 fputs_filtered().
1862
1863 If the line is already overfull, we immediately print a newline and
1864 the indentation, and disable further wrapping.
1865
1866 If we don't know the width of lines, but we know the page height,
1867 we must not wrap words, but should still keep track of newlines
1868 that were explicitly printed.
1869
1870 INDENT should not contain tabs, as that will mess up the char count
1871 on the next line. FIXME.
1872
1873 This routine is guaranteed to force out any output which has been
1874 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1875 used to force out output from the wrap_buffer. */
1876
1877 void
1878 wrap_here (char *indent)
1879 {
1880 /* This should have been allocated, but be paranoid anyway. */
1881 if (!wrap_buffer)
1882 internal_error (__FILE__, __LINE__,
1883 _("failed internal consistency check"));
1884
1885 if (wrap_buffer[0])
1886 {
1887 *wrap_pointer = '\0';
1888 fputs_unfiltered (wrap_buffer, gdb_stdout);
1889 }
1890 wrap_pointer = wrap_buffer;
1891 wrap_buffer[0] = '\0';
1892 if (chars_per_line == UINT_MAX) /* No line overflow checking. */
1893 {
1894 wrap_column = 0;
1895 }
1896 else if (chars_printed >= chars_per_line)
1897 {
1898 puts_filtered ("\n");
1899 if (indent != NULL)
1900 puts_filtered (indent);
1901 wrap_column = 0;
1902 }
1903 else
1904 {
1905 wrap_column = chars_printed;
1906 if (indent == NULL)
1907 wrap_indent = "";
1908 else
1909 wrap_indent = indent;
1910 }
1911 }
1912
1913 /* Print input string to gdb_stdout, filtered, with wrap,
1914 arranging strings in columns of n chars. String can be
1915 right or left justified in the column. Never prints
1916 trailing spaces. String should never be longer than
1917 width. FIXME: this could be useful for the EXAMINE
1918 command, which currently doesn't tabulate very well. */
1919
1920 void
1921 puts_filtered_tabular (char *string, int width, int right)
1922 {
1923 int spaces = 0;
1924 int stringlen;
1925 char *spacebuf;
1926
1927 gdb_assert (chars_per_line > 0);
1928 if (chars_per_line == UINT_MAX)
1929 {
1930 fputs_filtered (string, gdb_stdout);
1931 fputs_filtered ("\n", gdb_stdout);
1932 return;
1933 }
1934
1935 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1936 fputs_filtered ("\n", gdb_stdout);
1937
1938 if (width >= chars_per_line)
1939 width = chars_per_line - 1;
1940
1941 stringlen = strlen (string);
1942
1943 if (chars_printed > 0)
1944 spaces = width - (chars_printed - 1) % width - 1;
1945 if (right)
1946 spaces += width - stringlen;
1947
1948 spacebuf = alloca (spaces + 1);
1949 spacebuf[spaces] = '\0';
1950 while (spaces--)
1951 spacebuf[spaces] = ' ';
1952
1953 fputs_filtered (spacebuf, gdb_stdout);
1954 fputs_filtered (string, gdb_stdout);
1955 }
1956
1957
1958 /* Ensure that whatever gets printed next, using the filtered output
1959 commands, starts at the beginning of the line. I.e. if there is
1960 any pending output for the current line, flush it and start a new
1961 line. Otherwise do nothing. */
1962
1963 void
1964 begin_line (void)
1965 {
1966 if (chars_printed > 0)
1967 {
1968 puts_filtered ("\n");
1969 }
1970 }
1971
1972
1973 /* Like fputs but if FILTER is true, pause after every screenful.
1974
1975 Regardless of FILTER can wrap at points other than the final
1976 character of a line.
1977
1978 Unlike fputs, fputs_maybe_filtered does not return a value.
1979 It is OK for LINEBUFFER to be NULL, in which case just don't print
1980 anything.
1981
1982 Note that a longjmp to top level may occur in this routine (only if
1983 FILTER is true) (since prompt_for_continue may do so) so this
1984 routine should not be called when cleanups are not in place. */
1985
1986 static void
1987 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1988 int filter)
1989 {
1990 const char *lineptr;
1991
1992 if (linebuffer == 0)
1993 return;
1994
1995 /* Don't do any filtering if it is disabled. */
1996 if (stream != gdb_stdout
1997 || !pagination_enabled
1998 || batch_flag
1999 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
2000 || top_level_interpreter () == NULL
2001 || ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
2002 {
2003 fputs_unfiltered (linebuffer, stream);
2004 return;
2005 }
2006
2007 /* Go through and output each character. Show line extension
2008 when this is necessary; prompt user for new page when this is
2009 necessary. */
2010
2011 lineptr = linebuffer;
2012 while (*lineptr)
2013 {
2014 /* Possible new page. */
2015 if (filter && (lines_printed >= lines_per_page - 1))
2016 prompt_for_continue ();
2017
2018 while (*lineptr && *lineptr != '\n')
2019 {
2020 /* Print a single line. */
2021 if (*lineptr == '\t')
2022 {
2023 if (wrap_column)
2024 *wrap_pointer++ = '\t';
2025 else
2026 fputc_unfiltered ('\t', stream);
2027 /* Shifting right by 3 produces the number of tab stops
2028 we have already passed, and then adding one and
2029 shifting left 3 advances to the next tab stop. */
2030 chars_printed = ((chars_printed >> 3) + 1) << 3;
2031 lineptr++;
2032 }
2033 else
2034 {
2035 if (wrap_column)
2036 *wrap_pointer++ = *lineptr;
2037 else
2038 fputc_unfiltered (*lineptr, stream);
2039 chars_printed++;
2040 lineptr++;
2041 }
2042
2043 if (chars_printed >= chars_per_line)
2044 {
2045 unsigned int save_chars = chars_printed;
2046
2047 chars_printed = 0;
2048 lines_printed++;
2049 /* If we aren't actually wrapping, don't output newline --
2050 if chars_per_line is right, we probably just overflowed
2051 anyway; if it's wrong, let us keep going. */
2052 if (wrap_column)
2053 fputc_unfiltered ('\n', stream);
2054
2055 /* Possible new page. */
2056 if (lines_printed >= lines_per_page - 1)
2057 prompt_for_continue ();
2058
2059 /* Now output indentation and wrapped string. */
2060 if (wrap_column)
2061 {
2062 fputs_unfiltered (wrap_indent, stream);
2063 *wrap_pointer = '\0'; /* Null-terminate saved stuff, */
2064 fputs_unfiltered (wrap_buffer, stream); /* and eject it. */
2065 /* FIXME, this strlen is what prevents wrap_indent from
2066 containing tabs. However, if we recurse to print it
2067 and count its chars, we risk trouble if wrap_indent is
2068 longer than (the user settable) chars_per_line.
2069 Note also that this can set chars_printed > chars_per_line
2070 if we are printing a long string. */
2071 chars_printed = strlen (wrap_indent)
2072 + (save_chars - wrap_column);
2073 wrap_pointer = wrap_buffer; /* Reset buffer */
2074 wrap_buffer[0] = '\0';
2075 wrap_column = 0; /* And disable fancy wrap */
2076 }
2077 }
2078 }
2079
2080 if (*lineptr == '\n')
2081 {
2082 chars_printed = 0;
2083 wrap_here ((char *) 0); /* Spit out chars, cancel
2084 further wraps. */
2085 lines_printed++;
2086 fputc_unfiltered ('\n', stream);
2087 lineptr++;
2088 }
2089 }
2090 }
2091
2092 void
2093 fputs_filtered (const char *linebuffer, struct ui_file *stream)
2094 {
2095 fputs_maybe_filtered (linebuffer, stream, 1);
2096 }
2097
2098 int
2099 putchar_unfiltered (int c)
2100 {
2101 char buf = c;
2102
2103 ui_file_write (gdb_stdout, &buf, 1);
2104 return c;
2105 }
2106
2107 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2108 May return nonlocally. */
2109
2110 int
2111 putchar_filtered (int c)
2112 {
2113 return fputc_filtered (c, gdb_stdout);
2114 }
2115
2116 int
2117 fputc_unfiltered (int c, struct ui_file *stream)
2118 {
2119 char buf = c;
2120
2121 ui_file_write (stream, &buf, 1);
2122 return c;
2123 }
2124
2125 int
2126 fputc_filtered (int c, struct ui_file *stream)
2127 {
2128 char buf[2];
2129
2130 buf[0] = c;
2131 buf[1] = 0;
2132 fputs_filtered (buf, stream);
2133 return c;
2134 }
2135
2136 /* puts_debug is like fputs_unfiltered, except it prints special
2137 characters in printable fashion. */
2138
2139 void
2140 puts_debug (char *prefix, char *string, char *suffix)
2141 {
2142 int ch;
2143
2144 /* Print prefix and suffix after each line. */
2145 static int new_line = 1;
2146 static int return_p = 0;
2147 static char *prev_prefix = "";
2148 static char *prev_suffix = "";
2149
2150 if (*string == '\n')
2151 return_p = 0;
2152
2153 /* If the prefix is changing, print the previous suffix, a new line,
2154 and the new prefix. */
2155 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
2156 {
2157 fputs_unfiltered (prev_suffix, gdb_stdlog);
2158 fputs_unfiltered ("\n", gdb_stdlog);
2159 fputs_unfiltered (prefix, gdb_stdlog);
2160 }
2161
2162 /* Print prefix if we printed a newline during the previous call. */
2163 if (new_line)
2164 {
2165 new_line = 0;
2166 fputs_unfiltered (prefix, gdb_stdlog);
2167 }
2168
2169 prev_prefix = prefix;
2170 prev_suffix = suffix;
2171
2172 /* Output characters in a printable format. */
2173 while ((ch = *string++) != '\0')
2174 {
2175 switch (ch)
2176 {
2177 default:
2178 if (isprint (ch))
2179 fputc_unfiltered (ch, gdb_stdlog);
2180
2181 else
2182 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
2183 break;
2184
2185 case '\\':
2186 fputs_unfiltered ("\\\\", gdb_stdlog);
2187 break;
2188 case '\b':
2189 fputs_unfiltered ("\\b", gdb_stdlog);
2190 break;
2191 case '\f':
2192 fputs_unfiltered ("\\f", gdb_stdlog);
2193 break;
2194 case '\n':
2195 new_line = 1;
2196 fputs_unfiltered ("\\n", gdb_stdlog);
2197 break;
2198 case '\r':
2199 fputs_unfiltered ("\\r", gdb_stdlog);
2200 break;
2201 case '\t':
2202 fputs_unfiltered ("\\t", gdb_stdlog);
2203 break;
2204 case '\v':
2205 fputs_unfiltered ("\\v", gdb_stdlog);
2206 break;
2207 }
2208
2209 return_p = ch == '\r';
2210 }
2211
2212 /* Print suffix if we printed a newline. */
2213 if (new_line)
2214 {
2215 fputs_unfiltered (suffix, gdb_stdlog);
2216 fputs_unfiltered ("\n", gdb_stdlog);
2217 }
2218 }
2219
2220
2221 /* Print a variable number of ARGS using format FORMAT. If this
2222 information is going to put the amount written (since the last call
2223 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2224 call prompt_for_continue to get the users permision to continue.
2225
2226 Unlike fprintf, this function does not return a value.
2227
2228 We implement three variants, vfprintf (takes a vararg list and stream),
2229 fprintf (takes a stream to write on), and printf (the usual).
2230
2231 Note also that a longjmp to top level may occur in this routine
2232 (since prompt_for_continue may do so) so this routine should not be
2233 called when cleanups are not in place. */
2234
2235 static void
2236 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2237 va_list args, int filter)
2238 {
2239 char *linebuffer;
2240 struct cleanup *old_cleanups;
2241
2242 linebuffer = xstrvprintf (format, args);
2243 old_cleanups = make_cleanup (xfree, linebuffer);
2244 fputs_maybe_filtered (linebuffer, stream, filter);
2245 do_cleanups (old_cleanups);
2246 }
2247
2248
2249 void
2250 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
2251 {
2252 vfprintf_maybe_filtered (stream, format, args, 1);
2253 }
2254
2255 void
2256 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
2257 {
2258 char *linebuffer;
2259 struct cleanup *old_cleanups;
2260
2261 linebuffer = xstrvprintf (format, args);
2262 old_cleanups = make_cleanup (xfree, linebuffer);
2263 if (debug_timestamp && stream == gdb_stdlog)
2264 {
2265 struct timeval tm;
2266 char *timestamp;
2267 int len, need_nl;
2268
2269 gettimeofday (&tm, NULL);
2270
2271 len = strlen (linebuffer);
2272 need_nl = (len > 0 && linebuffer[len - 1] != '\n');
2273
2274 timestamp = xstrprintf ("%ld:%ld %s%s",
2275 (long) tm.tv_sec, (long) tm.tv_usec,
2276 linebuffer,
2277 need_nl ? "\n": "");
2278 make_cleanup (xfree, timestamp);
2279 fputs_unfiltered (timestamp, stream);
2280 }
2281 else
2282 fputs_unfiltered (linebuffer, stream);
2283 do_cleanups (old_cleanups);
2284 }
2285
2286 void
2287 vprintf_filtered (const char *format, va_list args)
2288 {
2289 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2290 }
2291
2292 void
2293 vprintf_unfiltered (const char *format, va_list args)
2294 {
2295 vfprintf_unfiltered (gdb_stdout, format, args);
2296 }
2297
2298 void
2299 fprintf_filtered (struct ui_file *stream, const char *format, ...)
2300 {
2301 va_list args;
2302
2303 va_start (args, format);
2304 vfprintf_filtered (stream, format, args);
2305 va_end (args);
2306 }
2307
2308 void
2309 fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
2310 {
2311 va_list args;
2312
2313 va_start (args, format);
2314 vfprintf_unfiltered (stream, format, args);
2315 va_end (args);
2316 }
2317
2318 /* Like fprintf_filtered, but prints its result indented.
2319 Called as fprintfi_filtered (spaces, stream, format, ...); */
2320
2321 void
2322 fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2323 ...)
2324 {
2325 va_list args;
2326
2327 va_start (args, format);
2328 print_spaces_filtered (spaces, stream);
2329
2330 vfprintf_filtered (stream, format, args);
2331 va_end (args);
2332 }
2333
2334
2335 void
2336 printf_filtered (const char *format, ...)
2337 {
2338 va_list args;
2339
2340 va_start (args, format);
2341 vfprintf_filtered (gdb_stdout, format, args);
2342 va_end (args);
2343 }
2344
2345
2346 void
2347 printf_unfiltered (const char *format, ...)
2348 {
2349 va_list args;
2350
2351 va_start (args, format);
2352 vfprintf_unfiltered (gdb_stdout, format, args);
2353 va_end (args);
2354 }
2355
2356 /* Like printf_filtered, but prints it's result indented.
2357 Called as printfi_filtered (spaces, format, ...); */
2358
2359 void
2360 printfi_filtered (int spaces, const char *format, ...)
2361 {
2362 va_list args;
2363
2364 va_start (args, format);
2365 print_spaces_filtered (spaces, gdb_stdout);
2366 vfprintf_filtered (gdb_stdout, format, args);
2367 va_end (args);
2368 }
2369
2370 /* Easy -- but watch out!
2371
2372 This routine is *not* a replacement for puts()! puts() appends a newline.
2373 This one doesn't, and had better not! */
2374
2375 void
2376 puts_filtered (const char *string)
2377 {
2378 fputs_filtered (string, gdb_stdout);
2379 }
2380
2381 void
2382 puts_unfiltered (const char *string)
2383 {
2384 fputs_unfiltered (string, gdb_stdout);
2385 }
2386
2387 /* Return a pointer to N spaces and a null. The pointer is good
2388 until the next call to here. */
2389 char *
2390 n_spaces (int n)
2391 {
2392 char *t;
2393 static char *spaces = 0;
2394 static int max_spaces = -1;
2395
2396 if (n > max_spaces)
2397 {
2398 if (spaces)
2399 xfree (spaces);
2400 spaces = (char *) xmalloc (n + 1);
2401 for (t = spaces + n; t != spaces;)
2402 *--t = ' ';
2403 spaces[n] = '\0';
2404 max_spaces = n;
2405 }
2406
2407 return spaces + max_spaces - n;
2408 }
2409
2410 /* Print N spaces. */
2411 void
2412 print_spaces_filtered (int n, struct ui_file *stream)
2413 {
2414 fputs_filtered (n_spaces (n), stream);
2415 }
2416 \f
2417 /* C++/ObjC demangler stuff. */
2418
2419 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2420 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2421 If the name is not mangled, or the language for the name is unknown, or
2422 demangling is off, the name is printed in its "raw" form. */
2423
2424 void
2425 fprintf_symbol_filtered (struct ui_file *stream, const char *name,
2426 enum language lang, int arg_mode)
2427 {
2428 char *demangled;
2429
2430 if (name != NULL)
2431 {
2432 /* If user wants to see raw output, no problem. */
2433 if (!demangle)
2434 {
2435 fputs_filtered (name, stream);
2436 }
2437 else
2438 {
2439 demangled = language_demangle (language_def (lang), name, arg_mode);
2440 fputs_filtered (demangled ? demangled : name, stream);
2441 if (demangled != NULL)
2442 {
2443 xfree (demangled);
2444 }
2445 }
2446 }
2447 }
2448
2449 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2450 differences in whitespace. Returns 0 if they match, non-zero if they
2451 don't (slightly different than strcmp()'s range of return values).
2452
2453 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2454 This "feature" is useful when searching for matching C++ function names
2455 (such as if the user types 'break FOO', where FOO is a mangled C++
2456 function). */
2457
2458 int
2459 strcmp_iw (const char *string1, const char *string2)
2460 {
2461 while ((*string1 != '\0') && (*string2 != '\0'))
2462 {
2463 while (isspace (*string1))
2464 {
2465 string1++;
2466 }
2467 while (isspace (*string2))
2468 {
2469 string2++;
2470 }
2471 if (case_sensitivity == case_sensitive_on && *string1 != *string2)
2472 break;
2473 if (case_sensitivity == case_sensitive_off
2474 && (tolower ((unsigned char) *string1)
2475 != tolower ((unsigned char) *string2)))
2476 break;
2477 if (*string1 != '\0')
2478 {
2479 string1++;
2480 string2++;
2481 }
2482 }
2483 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2484 }
2485
2486 /* This is like strcmp except that it ignores whitespace and treats
2487 '(' as the first non-NULL character in terms of ordering. Like
2488 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2489 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2490 according to that ordering.
2491
2492 If a list is sorted according to this function and if you want to
2493 find names in the list that match some fixed NAME according to
2494 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2495 where this function would put NAME.
2496
2497 This function must be neutral to the CASE_SENSITIVITY setting as the user
2498 may choose it during later lookup. Therefore this function always sorts
2499 primarily case-insensitively and secondarily case-sensitively.
2500
2501 Here are some examples of why using strcmp to sort is a bad idea:
2502
2503 Whitespace example:
2504
2505 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2506 we try to do a search for "foo<char*>", strcmp will locate this
2507 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2508 will start looking at strings beginning with "goo", and will never
2509 see the correct match of "foo<char *>".
2510
2511 Parenthesis example:
2512
2513 In practice, this is less like to be an issue, but I'll give it a
2514 shot. Let's assume that '$' is a legitimate character to occur in
2515 symbols. (Which may well even be the case on some systems.) Then
2516 say that the partial symbol table contains "foo$" and "foo(int)".
2517 strcmp will put them in this order, since '$' < '('. Now, if the
2518 user searches for "foo", then strcmp will sort "foo" before "foo$".
2519 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2520 "foo") is false, so it won't proceed to the actual match of
2521 "foo(int)" with "foo". */
2522
2523 int
2524 strcmp_iw_ordered (const char *string1, const char *string2)
2525 {
2526 const char *saved_string1 = string1, *saved_string2 = string2;
2527 enum case_sensitivity case_pass = case_sensitive_off;
2528
2529 for (;;)
2530 {
2531 /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'.
2532 Provide stub characters if we are already at the end of one of the
2533 strings. */
2534 char c1 = 'X', c2 = 'X';
2535
2536 while (*string1 != '\0' && *string2 != '\0')
2537 {
2538 while (isspace (*string1))
2539 string1++;
2540 while (isspace (*string2))
2541 string2++;
2542
2543 switch (case_pass)
2544 {
2545 case case_sensitive_off:
2546 c1 = tolower ((unsigned char) *string1);
2547 c2 = tolower ((unsigned char) *string2);
2548 break;
2549 case case_sensitive_on:
2550 c1 = *string1;
2551 c2 = *string2;
2552 break;
2553 }
2554 if (c1 != c2)
2555 break;
2556
2557 if (*string1 != '\0')
2558 {
2559 string1++;
2560 string2++;
2561 }
2562 }
2563
2564 switch (*string1)
2565 {
2566 /* Characters are non-equal unless they're both '\0'; we want to
2567 make sure we get the comparison right according to our
2568 comparison in the cases where one of them is '\0' or '('. */
2569 case '\0':
2570 if (*string2 == '\0')
2571 break;
2572 else
2573 return -1;
2574 case '(':
2575 if (*string2 == '\0')
2576 return 1;
2577 else
2578 return -1;
2579 default:
2580 if (*string2 == '\0' || *string2 == '(')
2581 return 1;
2582 else if (c1 > c2)
2583 return 1;
2584 else if (c1 < c2)
2585 return -1;
2586 /* PASSTHRU */
2587 }
2588
2589 if (case_pass == case_sensitive_on)
2590 return 0;
2591
2592 /* Otherwise the strings were equal in case insensitive way, make
2593 a more fine grained comparison in a case sensitive way. */
2594
2595 case_pass = case_sensitive_on;
2596 string1 = saved_string1;
2597 string2 = saved_string2;
2598 }
2599 }
2600
2601 /* A simple comparison function with opposite semantics to strcmp. */
2602
2603 int
2604 streq (const char *lhs, const char *rhs)
2605 {
2606 return !strcmp (lhs, rhs);
2607 }
2608 \f
2609
2610 /*
2611 ** subset_compare()
2612 ** Answer whether string_to_compare is a full or partial match to
2613 ** template_string. The partial match must be in sequence starting
2614 ** at index 0.
2615 */
2616 int
2617 subset_compare (char *string_to_compare, char *template_string)
2618 {
2619 int match;
2620
2621 if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2622 && strlen (string_to_compare) <= strlen (template_string))
2623 match =
2624 (strncmp
2625 (template_string, string_to_compare, strlen (string_to_compare)) == 0);
2626 else
2627 match = 0;
2628 return match;
2629 }
2630
2631 static void
2632 pagination_on_command (char *arg, int from_tty)
2633 {
2634 pagination_enabled = 1;
2635 }
2636
2637 static void
2638 pagination_off_command (char *arg, int from_tty)
2639 {
2640 pagination_enabled = 0;
2641 }
2642
2643 static void
2644 show_debug_timestamp (struct ui_file *file, int from_tty,
2645 struct cmd_list_element *c, const char *value)
2646 {
2647 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"),
2648 value);
2649 }
2650 \f
2651
2652 void
2653 initialize_utils (void)
2654 {
2655 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
2656 Set number of characters gdb thinks are in a line."), _("\
2657 Show number of characters gdb thinks are in a line."), NULL,
2658 set_width_command,
2659 show_chars_per_line,
2660 &setlist, &showlist);
2661
2662 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
2663 Set number of lines gdb thinks are in a page."), _("\
2664 Show number of lines gdb thinks are in a page."), NULL,
2665 set_height_command,
2666 show_lines_per_page,
2667 &setlist, &showlist);
2668
2669 init_page_info ();
2670
2671 add_setshow_boolean_cmd ("pagination", class_support,
2672 &pagination_enabled, _("\
2673 Set state of pagination."), _("\
2674 Show state of pagination."), NULL,
2675 NULL,
2676 show_pagination_enabled,
2677 &setlist, &showlist);
2678
2679 if (xdb_commands)
2680 {
2681 add_com ("am", class_support, pagination_on_command,
2682 _("Enable pagination"));
2683 add_com ("sm", class_support, pagination_off_command,
2684 _("Disable pagination"));
2685 }
2686
2687 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2688 &sevenbit_strings, _("\
2689 Set printing of 8-bit characters in strings as \\nnn."), _("\
2690 Show printing of 8-bit characters in strings as \\nnn."), NULL,
2691 NULL,
2692 show_sevenbit_strings,
2693 &setprintlist, &showprintlist);
2694
2695 add_setshow_boolean_cmd ("timestamp", class_maintenance,
2696 &debug_timestamp, _("\
2697 Set timestamping of debugging messages."), _("\
2698 Show timestamping of debugging messages."), _("\
2699 When set, debugging messages will be marked with seconds and microseconds."),
2700 NULL,
2701 show_debug_timestamp,
2702 &setdebuglist, &showdebuglist);
2703 }
2704
2705 /* Machine specific function to handle SIGWINCH signal. */
2706
2707 #ifdef SIGWINCH_HANDLER_BODY
2708 SIGWINCH_HANDLER_BODY
2709 #endif
2710 /* Print routines to handle variable size regs, etc. */
2711 /* Temporary storage using circular buffer. */
2712 #define NUMCELLS 16
2713 #define CELLSIZE 50
2714 static char *
2715 get_cell (void)
2716 {
2717 static char buf[NUMCELLS][CELLSIZE];
2718 static int cell = 0;
2719
2720 if (++cell >= NUMCELLS)
2721 cell = 0;
2722 return buf[cell];
2723 }
2724
2725 const char *
2726 paddress (struct gdbarch *gdbarch, CORE_ADDR addr)
2727 {
2728 /* Truncate address to the size of a target address, avoiding shifts
2729 larger or equal than the width of a CORE_ADDR. The local
2730 variable ADDR_BIT stops the compiler reporting a shift overflow
2731 when it won't occur. */
2732 /* NOTE: This assumes that the significant address information is
2733 kept in the least significant bits of ADDR - the upper bits were
2734 either zero or sign extended. Should gdbarch_address_to_pointer or
2735 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2736
2737 int addr_bit = gdbarch_addr_bit (gdbarch);
2738
2739 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2740 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2741 return hex_string (addr);
2742 }
2743
2744 /* This function is described in "defs.h". */
2745
2746 const char *
2747 print_core_address (struct gdbarch *gdbarch, CORE_ADDR address)
2748 {
2749 int addr_bit = gdbarch_addr_bit (gdbarch);
2750
2751 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2752 address &= ((CORE_ADDR) 1 << addr_bit) - 1;
2753
2754 /* FIXME: cagney/2002-05-03: Need local_address_string() function
2755 that returns the language localized string formatted to a width
2756 based on gdbarch_addr_bit. */
2757 if (addr_bit <= 32)
2758 return hex_string_custom (address, 8);
2759 else
2760 return hex_string_custom (address, 16);
2761 }
2762
2763 /* Callback hash_f for htab_create_alloc or htab_create_alloc_ex. */
2764
2765 hashval_t
2766 core_addr_hash (const void *ap)
2767 {
2768 const CORE_ADDR *addrp = ap;
2769
2770 return *addrp;
2771 }
2772
2773 /* Callback eq_f for htab_create_alloc or htab_create_alloc_ex. */
2774
2775 int
2776 core_addr_eq (const void *ap, const void *bp)
2777 {
2778 const CORE_ADDR *addr_ap = ap;
2779 const CORE_ADDR *addr_bp = bp;
2780
2781 return *addr_ap == *addr_bp;
2782 }
2783
2784 static char *
2785 decimal2str (char *sign, ULONGEST addr, int width)
2786 {
2787 /* Steal code from valprint.c:print_decimal(). Should this worry
2788 about the real size of addr as the above does? */
2789 unsigned long temp[3];
2790 char *str = get_cell ();
2791 int i = 0;
2792
2793 do
2794 {
2795 temp[i] = addr % (1000 * 1000 * 1000);
2796 addr /= (1000 * 1000 * 1000);
2797 i++;
2798 width -= 9;
2799 }
2800 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2801
2802 width += 9;
2803 if (width < 0)
2804 width = 0;
2805
2806 switch (i)
2807 {
2808 case 1:
2809 xsnprintf (str, CELLSIZE, "%s%0*lu", sign, width, temp[0]);
2810 break;
2811 case 2:
2812 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu", sign, width,
2813 temp[1], temp[0]);
2814 break;
2815 case 3:
2816 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu%09lu", sign, width,
2817 temp[2], temp[1], temp[0]);
2818 break;
2819 default:
2820 internal_error (__FILE__, __LINE__,
2821 _("failed internal consistency check"));
2822 }
2823
2824 return str;
2825 }
2826
2827 static char *
2828 octal2str (ULONGEST addr, int width)
2829 {
2830 unsigned long temp[3];
2831 char *str = get_cell ();
2832 int i = 0;
2833
2834 do
2835 {
2836 temp[i] = addr % (0100000 * 0100000);
2837 addr /= (0100000 * 0100000);
2838 i++;
2839 width -= 10;
2840 }
2841 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2842
2843 width += 10;
2844 if (width < 0)
2845 width = 0;
2846
2847 switch (i)
2848 {
2849 case 1:
2850 if (temp[0] == 0)
2851 xsnprintf (str, CELLSIZE, "%*o", width, 0);
2852 else
2853 xsnprintf (str, CELLSIZE, "0%0*lo", width, temp[0]);
2854 break;
2855 case 2:
2856 xsnprintf (str, CELLSIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
2857 break;
2858 case 3:
2859 xsnprintf (str, CELLSIZE, "0%0*lo%010lo%010lo", width,
2860 temp[2], temp[1], temp[0]);
2861 break;
2862 default:
2863 internal_error (__FILE__, __LINE__,
2864 _("failed internal consistency check"));
2865 }
2866
2867 return str;
2868 }
2869
2870 char *
2871 pulongest (ULONGEST u)
2872 {
2873 return decimal2str ("", u, 0);
2874 }
2875
2876 char *
2877 plongest (LONGEST l)
2878 {
2879 if (l < 0)
2880 return decimal2str ("-", -l, 0);
2881 else
2882 return decimal2str ("", l, 0);
2883 }
2884
2885 /* Eliminate warning from compiler on 32-bit systems. */
2886 static int thirty_two = 32;
2887
2888 char *
2889 phex (ULONGEST l, int sizeof_l)
2890 {
2891 char *str;
2892
2893 switch (sizeof_l)
2894 {
2895 case 8:
2896 str = get_cell ();
2897 xsnprintf (str, CELLSIZE, "%08lx%08lx",
2898 (unsigned long) (l >> thirty_two),
2899 (unsigned long) (l & 0xffffffff));
2900 break;
2901 case 4:
2902 str = get_cell ();
2903 xsnprintf (str, CELLSIZE, "%08lx", (unsigned long) l);
2904 break;
2905 case 2:
2906 str = get_cell ();
2907 xsnprintf (str, CELLSIZE, "%04x", (unsigned short) (l & 0xffff));
2908 break;
2909 default:
2910 str = phex (l, sizeof (l));
2911 break;
2912 }
2913
2914 return str;
2915 }
2916
2917 char *
2918 phex_nz (ULONGEST l, int sizeof_l)
2919 {
2920 char *str;
2921
2922 switch (sizeof_l)
2923 {
2924 case 8:
2925 {
2926 unsigned long high = (unsigned long) (l >> thirty_two);
2927
2928 str = get_cell ();
2929 if (high == 0)
2930 xsnprintf (str, CELLSIZE, "%lx",
2931 (unsigned long) (l & 0xffffffff));
2932 else
2933 xsnprintf (str, CELLSIZE, "%lx%08lx", high,
2934 (unsigned long) (l & 0xffffffff));
2935 break;
2936 }
2937 case 4:
2938 str = get_cell ();
2939 xsnprintf (str, CELLSIZE, "%lx", (unsigned long) l);
2940 break;
2941 case 2:
2942 str = get_cell ();
2943 xsnprintf (str, CELLSIZE, "%x", (unsigned short) (l & 0xffff));
2944 break;
2945 default:
2946 str = phex_nz (l, sizeof (l));
2947 break;
2948 }
2949
2950 return str;
2951 }
2952
2953 /* Converts a LONGEST to a C-format hexadecimal literal and stores it
2954 in a static string. Returns a pointer to this string. */
2955 char *
2956 hex_string (LONGEST num)
2957 {
2958 char *result = get_cell ();
2959
2960 xsnprintf (result, CELLSIZE, "0x%s", phex_nz (num, sizeof (num)));
2961 return result;
2962 }
2963
2964 /* Converts a LONGEST number to a C-format hexadecimal literal and
2965 stores it in a static string. Returns a pointer to this string
2966 that is valid until the next call. The number is padded on the
2967 left with 0s to at least WIDTH characters. */
2968 char *
2969 hex_string_custom (LONGEST num, int width)
2970 {
2971 char *result = get_cell ();
2972 char *result_end = result + CELLSIZE - 1;
2973 const char *hex = phex_nz (num, sizeof (num));
2974 int hex_len = strlen (hex);
2975
2976 if (hex_len > width)
2977 width = hex_len;
2978 if (width + 2 >= CELLSIZE)
2979 internal_error (__FILE__, __LINE__, _("\
2980 hex_string_custom: insufficient space to store result"));
2981
2982 strcpy (result_end - width - 2, "0x");
2983 memset (result_end - width, '0', width);
2984 strcpy (result_end - hex_len, hex);
2985 return result_end - width - 2;
2986 }
2987
2988 /* Convert VAL to a numeral in the given radix. For
2989 * radix 10, IS_SIGNED may be true, indicating a signed quantity;
2990 * otherwise VAL is interpreted as unsigned. If WIDTH is supplied,
2991 * it is the minimum width (0-padded if needed). USE_C_FORMAT means
2992 * to use C format in all cases. If it is false, then 'x'
2993 * and 'o' formats do not include a prefix (0x or leading 0). */
2994
2995 char *
2996 int_string (LONGEST val, int radix, int is_signed, int width,
2997 int use_c_format)
2998 {
2999 switch (radix)
3000 {
3001 case 16:
3002 {
3003 char *result;
3004
3005 if (width == 0)
3006 result = hex_string (val);
3007 else
3008 result = hex_string_custom (val, width);
3009 if (! use_c_format)
3010 result += 2;
3011 return result;
3012 }
3013 case 10:
3014 {
3015 if (is_signed && val < 0)
3016 return decimal2str ("-", -val, width);
3017 else
3018 return decimal2str ("", val, width);
3019 }
3020 case 8:
3021 {
3022 char *result = octal2str (val, width);
3023
3024 if (use_c_format || val == 0)
3025 return result;
3026 else
3027 return result + 1;
3028 }
3029 default:
3030 internal_error (__FILE__, __LINE__,
3031 _("failed internal consistency check"));
3032 }
3033 }
3034
3035 /* Convert a CORE_ADDR into a string. */
3036 const char *
3037 core_addr_to_string (const CORE_ADDR addr)
3038 {
3039 char *str = get_cell ();
3040
3041 strcpy (str, "0x");
3042 strcat (str, phex (addr, sizeof (addr)));
3043 return str;
3044 }
3045
3046 const char *
3047 core_addr_to_string_nz (const CORE_ADDR addr)
3048 {
3049 char *str = get_cell ();
3050
3051 strcpy (str, "0x");
3052 strcat (str, phex_nz (addr, sizeof (addr)));
3053 return str;
3054 }
3055
3056 /* Convert a string back into a CORE_ADDR. */
3057 CORE_ADDR
3058 string_to_core_addr (const char *my_string)
3059 {
3060 CORE_ADDR addr = 0;
3061
3062 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
3063 {
3064 /* Assume that it is in hex. */
3065 int i;
3066
3067 for (i = 2; my_string[i] != '\0'; i++)
3068 {
3069 if (isdigit (my_string[i]))
3070 addr = (my_string[i] - '0') + (addr * 16);
3071 else if (isxdigit (my_string[i]))
3072 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
3073 else
3074 error (_("invalid hex \"%s\""), my_string);
3075 }
3076 }
3077 else
3078 {
3079 /* Assume that it is in decimal. */
3080 int i;
3081
3082 for (i = 0; my_string[i] != '\0'; i++)
3083 {
3084 if (isdigit (my_string[i]))
3085 addr = (my_string[i] - '0') + (addr * 10);
3086 else
3087 error (_("invalid decimal \"%s\""), my_string);
3088 }
3089 }
3090
3091 return addr;
3092 }
3093
3094 const char *
3095 host_address_to_string (const void *addr)
3096 {
3097 char *str = get_cell ();
3098
3099 xsnprintf (str, CELLSIZE, "0x%s", phex_nz ((uintptr_t) addr, sizeof (addr)));
3100 return str;
3101 }
3102
3103 char *
3104 gdb_realpath (const char *filename)
3105 {
3106 /* Method 1: The system has a compile time upper bound on a filename
3107 path. Use that and realpath() to canonicalize the name. This is
3108 the most common case. Note that, if there isn't a compile time
3109 upper bound, you want to avoid realpath() at all costs. */
3110 #if defined(HAVE_REALPATH)
3111 {
3112 # if defined (PATH_MAX)
3113 char buf[PATH_MAX];
3114 # define USE_REALPATH
3115 # elif defined (MAXPATHLEN)
3116 char buf[MAXPATHLEN];
3117 # define USE_REALPATH
3118 # endif
3119 # if defined (USE_REALPATH)
3120 const char *rp = realpath (filename, buf);
3121
3122 if (rp == NULL)
3123 rp = filename;
3124 return xstrdup (rp);
3125 # endif
3126 }
3127 #endif /* HAVE_REALPATH */
3128
3129 /* Method 2: The host system (i.e., GNU) has the function
3130 canonicalize_file_name() which malloc's a chunk of memory and
3131 returns that, use that. */
3132 #if defined(HAVE_CANONICALIZE_FILE_NAME)
3133 {
3134 char *rp = canonicalize_file_name (filename);
3135
3136 if (rp == NULL)
3137 return xstrdup (filename);
3138 else
3139 return rp;
3140 }
3141 #endif
3142
3143 /* FIXME: cagney/2002-11-13:
3144
3145 Method 2a: Use realpath() with a NULL buffer. Some systems, due
3146 to the problems described in method 3, have modified their
3147 realpath() implementation so that it will allocate a buffer when
3148 NULL is passed in. Before this can be used, though, some sort of
3149 configure time test would need to be added. Otherwize the code
3150 will likely core dump. */
3151
3152 /* Method 3: Now we're getting desperate! The system doesn't have a
3153 compile time buffer size and no alternative function. Query the
3154 OS, using pathconf(), for the buffer limit. Care is needed
3155 though, some systems do not limit PATH_MAX (return -1 for
3156 pathconf()) making it impossible to pass a correctly sized buffer
3157 to realpath() (it could always overflow). On those systems, we
3158 skip this. */
3159 #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
3160 {
3161 /* Find out the max path size. */
3162 long path_max = pathconf ("/", _PC_PATH_MAX);
3163
3164 if (path_max > 0)
3165 {
3166 /* PATH_MAX is bounded. */
3167 char *buf = alloca (path_max);
3168 char *rp = realpath (filename, buf);
3169
3170 return xstrdup (rp ? rp : filename);
3171 }
3172 }
3173 #endif
3174
3175 /* The MS Windows method. If we don't have realpath, we assume we
3176 don't have symlinks and just canonicalize to a Windows absolute
3177 path. GetFullPath converts ../ and ./ in relative paths to
3178 absolute paths, filling in current drive if one is not given
3179 or using the current directory of a specified drive (eg, "E:foo").
3180 It also converts all forward slashes to back slashes. */
3181 /* The file system is case-insensitive but case-preserving.
3182 So we do not lowercase the path. Otherwise, we might not
3183 be able to display the original casing in a given path. */
3184 #if defined (_WIN32)
3185 {
3186 char buf[MAX_PATH];
3187 DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
3188
3189 if (len > 0 && len < MAX_PATH)
3190 return xstrdup (buf);
3191 }
3192 #endif
3193
3194 /* This system is a lost cause, just dup the buffer. */
3195 return xstrdup (filename);
3196 }
3197
3198 /* Return a copy of FILENAME, with its directory prefix canonicalized
3199 by gdb_realpath. */
3200
3201 char *
3202 xfullpath (const char *filename)
3203 {
3204 const char *base_name = lbasename (filename);
3205 char *dir_name;
3206 char *real_path;
3207 char *result;
3208
3209 /* Extract the basename of filename, and return immediately
3210 a copy of filename if it does not contain any directory prefix. */
3211 if (base_name == filename)
3212 return xstrdup (filename);
3213
3214 dir_name = alloca ((size_t) (base_name - filename + 2));
3215 /* Allocate enough space to store the dir_name + plus one extra
3216 character sometimes needed under Windows (see below), and
3217 then the closing \000 character. */
3218 strncpy (dir_name, filename, base_name - filename);
3219 dir_name[base_name - filename] = '\000';
3220
3221 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
3222 /* We need to be careful when filename is of the form 'd:foo', which
3223 is equivalent of d:./foo, which is totally different from d:/foo. */
3224 if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
3225 {
3226 dir_name[2] = '.';
3227 dir_name[3] = '\000';
3228 }
3229 #endif
3230
3231 /* Canonicalize the directory prefix, and build the resulting
3232 filename. If the dirname realpath already contains an ending
3233 directory separator, avoid doubling it. */
3234 real_path = gdb_realpath (dir_name);
3235 if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
3236 result = concat (real_path, base_name, (char *) NULL);
3237 else
3238 result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
3239
3240 xfree (real_path);
3241 return result;
3242 }
3243
3244
3245 /* This is the 32-bit CRC function used by the GNU separate debug
3246 facility. An executable may contain a section named
3247 .gnu_debuglink, which holds the name of a separate executable file
3248 containing its debug info, and a checksum of that file's contents,
3249 computed using this function. */
3250 unsigned long
3251 gnu_debuglink_crc32 (unsigned long crc, unsigned char *buf, size_t len)
3252 {
3253 static const unsigned int crc32_table[256] = {
3254 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
3255 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
3256 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
3257 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
3258 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
3259 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
3260 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
3261 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
3262 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
3263 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
3264 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
3265 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
3266 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
3267 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
3268 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
3269 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
3270 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
3271 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
3272 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
3273 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
3274 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
3275 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
3276 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
3277 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
3278 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
3279 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
3280 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
3281 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
3282 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
3283 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
3284 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
3285 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
3286 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
3287 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
3288 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
3289 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
3290 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
3291 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
3292 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
3293 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
3294 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
3295 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
3296 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
3297 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
3298 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
3299 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
3300 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
3301 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
3302 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
3303 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
3304 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
3305 0x2d02ef8d
3306 };
3307 unsigned char *end;
3308
3309 crc = ~crc & 0xffffffff;
3310 for (end = buf + len; buf < end; ++buf)
3311 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
3312 return ~crc & 0xffffffff;
3313 }
3314
3315 ULONGEST
3316 align_up (ULONGEST v, int n)
3317 {
3318 /* Check that N is really a power of two. */
3319 gdb_assert (n && (n & (n-1)) == 0);
3320 return (v + n - 1) & -n;
3321 }
3322
3323 ULONGEST
3324 align_down (ULONGEST v, int n)
3325 {
3326 /* Check that N is really a power of two. */
3327 gdb_assert (n && (n & (n-1)) == 0);
3328 return (v & -n);
3329 }
3330
3331 /* Allocation function for the libiberty hash table which uses an
3332 obstack. The obstack is passed as DATA. */
3333
3334 void *
3335 hashtab_obstack_allocate (void *data, size_t size, size_t count)
3336 {
3337 unsigned int total = size * count;
3338 void *ptr = obstack_alloc ((struct obstack *) data, total);
3339
3340 memset (ptr, 0, total);
3341 return ptr;
3342 }
3343
3344 /* Trivial deallocation function for the libiberty splay tree and hash
3345 table - don't deallocate anything. Rely on later deletion of the
3346 obstack. DATA will be the obstack, although it is not needed
3347 here. */
3348
3349 void
3350 dummy_obstack_deallocate (void *object, void *data)
3351 {
3352 return;
3353 }
3354
3355 /* The bit offset of the highest byte in a ULONGEST, for overflow
3356 checking. */
3357
3358 #define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
3359
3360 /* True (non-zero) iff DIGIT is a valid digit in radix BASE,
3361 where 2 <= BASE <= 36. */
3362
3363 static int
3364 is_digit_in_base (unsigned char digit, int base)
3365 {
3366 if (!isalnum (digit))
3367 return 0;
3368 if (base <= 10)
3369 return (isdigit (digit) && digit < base + '0');
3370 else
3371 return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
3372 }
3373
3374 static int
3375 digit_to_int (unsigned char c)
3376 {
3377 if (isdigit (c))
3378 return c - '0';
3379 else
3380 return tolower (c) - 'a' + 10;
3381 }
3382
3383 /* As for strtoul, but for ULONGEST results. */
3384
3385 ULONGEST
3386 strtoulst (const char *num, const char **trailer, int base)
3387 {
3388 unsigned int high_part;
3389 ULONGEST result;
3390 int minus = 0;
3391 int i = 0;
3392
3393 /* Skip leading whitespace. */
3394 while (isspace (num[i]))
3395 i++;
3396
3397 /* Handle prefixes. */
3398 if (num[i] == '+')
3399 i++;
3400 else if (num[i] == '-')
3401 {
3402 minus = 1;
3403 i++;
3404 }
3405
3406 if (base == 0 || base == 16)
3407 {
3408 if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
3409 {
3410 i += 2;
3411 if (base == 0)
3412 base = 16;
3413 }
3414 }
3415
3416 if (base == 0 && num[i] == '0')
3417 base = 8;
3418
3419 if (base == 0)
3420 base = 10;
3421
3422 if (base < 2 || base > 36)
3423 {
3424 errno = EINVAL;
3425 return 0;
3426 }
3427
3428 result = high_part = 0;
3429 for (; is_digit_in_base (num[i], base); i += 1)
3430 {
3431 result = result * base + digit_to_int (num[i]);
3432 high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
3433 result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
3434 if (high_part > 0xff)
3435 {
3436 errno = ERANGE;
3437 result = ~ (ULONGEST) 0;
3438 high_part = 0;
3439 minus = 0;
3440 break;
3441 }
3442 }
3443
3444 if (trailer != NULL)
3445 *trailer = &num[i];
3446
3447 result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
3448 if (minus)
3449 return -result;
3450 else
3451 return result;
3452 }
3453
3454 /* Simple, portable version of dirname that does not modify its
3455 argument. */
3456
3457 char *
3458 ldirname (const char *filename)
3459 {
3460 const char *base = lbasename (filename);
3461 char *dirname;
3462
3463 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
3464 --base;
3465
3466 if (base == filename)
3467 return NULL;
3468
3469 dirname = xmalloc (base - filename + 2);
3470 memcpy (dirname, filename, base - filename);
3471
3472 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
3473 create "d:./bar" later instead of the (different) "d:/bar". */
3474 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
3475 && !IS_DIR_SEPARATOR (filename[0]))
3476 dirname[base++ - filename] = '.';
3477
3478 dirname[base - filename] = '\0';
3479 return dirname;
3480 }
3481
3482 /* Call libiberty's buildargv, and return the result.
3483 If buildargv fails due to out-of-memory, call nomem.
3484 Therefore, the returned value is guaranteed to be non-NULL,
3485 unless the parameter itself is NULL. */
3486
3487 char **
3488 gdb_buildargv (const char *s)
3489 {
3490 char **argv = buildargv (s);
3491
3492 if (s != NULL && argv == NULL)
3493 malloc_failure (0);
3494 return argv;
3495 }
3496
3497 int
3498 compare_positive_ints (const void *ap, const void *bp)
3499 {
3500 /* Because we know we're comparing two ints which are positive,
3501 there's no danger of overflow here. */
3502 return * (int *) ap - * (int *) bp;
3503 }
3504
3505 /* String compare function for qsort. */
3506
3507 int
3508 compare_strings (const void *arg1, const void *arg2)
3509 {
3510 const char **s1 = (const char **) arg1;
3511 const char **s2 = (const char **) arg2;
3512
3513 return strcmp (*s1, *s2);
3514 }
3515
3516 #define AMBIGUOUS_MESS1 ".\nMatching formats:"
3517 #define AMBIGUOUS_MESS2 \
3518 ".\nUse \"set gnutarget format-name\" to specify the format."
3519
3520 const char *
3521 gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
3522 {
3523 char *ret, *retp;
3524 int ret_len;
3525 char **p;
3526
3527 /* Check if errmsg just need simple return. */
3528 if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL)
3529 return bfd_errmsg (error_tag);
3530
3531 ret_len = strlen (bfd_errmsg (error_tag)) + strlen (AMBIGUOUS_MESS1)
3532 + strlen (AMBIGUOUS_MESS2);
3533 for (p = matching; *p; p++)
3534 ret_len += strlen (*p) + 1;
3535 ret = xmalloc (ret_len + 1);
3536 retp = ret;
3537 make_cleanup (xfree, ret);
3538
3539 strcpy (retp, bfd_errmsg (error_tag));
3540 retp += strlen (retp);
3541
3542 strcpy (retp, AMBIGUOUS_MESS1);
3543 retp += strlen (retp);
3544
3545 for (p = matching; *p; p++)
3546 {
3547 sprintf (retp, " %s", *p);
3548 retp += strlen (retp);
3549 }
3550 xfree (matching);
3551
3552 strcpy (retp, AMBIGUOUS_MESS2);
3553
3554 return ret;
3555 }
3556
3557 /* Return ARGS parsed as a valid pid, or throw an error. */
3558
3559 int
3560 parse_pid_to_attach (char *args)
3561 {
3562 unsigned long pid;
3563 char *dummy;
3564
3565 if (!args)
3566 error_no_arg (_("process-id to attach"));
3567
3568 dummy = args;
3569 pid = strtoul (args, &dummy, 0);
3570 /* Some targets don't set errno on errors, grrr! */
3571 if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)])
3572 error (_("Illegal process-id: %s."), args);
3573
3574 return pid;
3575 }
3576
3577 /* Helper for make_bpstat_clear_actions_cleanup. */
3578
3579 static void
3580 do_bpstat_clear_actions_cleanup (void *unused)
3581 {
3582 bpstat_clear_actions ();
3583 }
3584
3585 /* Call bpstat_clear_actions for the case an exception is throw. You should
3586 discard_cleanups if no exception is caught. */
3587
3588 struct cleanup *
3589 make_bpstat_clear_actions_cleanup (void)
3590 {
3591 return make_cleanup (do_bpstat_clear_actions_cleanup, NULL);
3592 }
3593
3594 /* Check for GCC >= 4.x according to the symtab->producer string. Return minor
3595 version (x) of 4.x in such case. If it is not GCC or it is GCC older than
3596 4.x return -1. If it is GCC 5.x or higher return INT_MAX. */
3597
3598 int
3599 producer_is_gcc_ge_4 (const char *producer)
3600 {
3601 const char *cs;
3602 int major, minor;
3603
3604 if (producer == NULL)
3605 {
3606 /* For unknown compilers expect their behavior is not compliant. For GCC
3607 this case can also happen for -gdwarf-4 type units supported since
3608 gcc-4.5. */
3609
3610 return -1;
3611 }
3612
3613 /* Skip any identifier after "GNU " - such as "C++" or "Java". */
3614
3615 if (strncmp (producer, "GNU ", strlen ("GNU ")) != 0)
3616 {
3617 /* For non-GCC compilers expect their behavior is not compliant. */
3618
3619 return -1;
3620 }
3621 cs = &producer[strlen ("GNU ")];
3622 while (*cs && !isdigit (*cs))
3623 cs++;
3624 if (sscanf (cs, "%d.%d", &major, &minor) != 2)
3625 {
3626 /* Not recognized as GCC. */
3627
3628 return -1;
3629 }
3630
3631 if (major < 4)
3632 return -1;
3633 if (major > 4)
3634 return INT_MAX;
3635 return minor;
3636 }
3637
3638 /* Call xfree for each element of CHAR_PTR_VEC and final VEC_free for
3639 CHAR_PTR_VEC itself.
3640
3641 You must not modify CHAR_PTR_VEC after it got registered with this function
3642 by make_cleanup as the CHAR_PTR_VEC base address may change on its updates.
3643 Contrary to VEC_free this function does not (cannot) clear the pointer. */
3644
3645 void
3646 free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
3647 {
3648 int ix;
3649 char *name;
3650
3651 for (ix = 0; VEC_iterate (char_ptr, char_ptr_vec, ix, name); ++ix)
3652 xfree (name);
3653 VEC_free (char_ptr, char_ptr_vec);
3654 }
3655
3656 /* Helper for make_cleanup_free_char_ptr_vec. */
3657
3658 static void
3659 do_free_char_ptr_vec (void *arg)
3660 {
3661 VEC (char_ptr) *char_ptr_vec = arg;
3662
3663 free_char_ptr_vec (char_ptr_vec);
3664 }
3665
3666 /* Make cleanup handler calling xfree for each element of CHAR_PTR_VEC and
3667 final VEC_free for CHAR_PTR_VEC itself.
3668
3669 You must not modify CHAR_PTR_VEC after this cleanup registration as the
3670 CHAR_PTR_VEC base address may change on its updates. Contrary to VEC_free
3671 this function does not (cannot) clear the pointer. */
3672
3673 struct cleanup *
3674 make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
3675 {
3676 return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
3677 }
3678
3679 /* Extended version of dirnames_to_char_ptr_vec - additionally if *VECP is
3680 non-NULL the new list elements from DIRNAMES are appended to the existing
3681 *VECP list of entries. *VECP address will be updated by this call. */
3682
3683 void
3684 dirnames_to_char_ptr_vec_append (VEC (char_ptr) **vecp, const char *dirnames)
3685 {
3686 do
3687 {
3688 size_t this_len;
3689 char *next_dir, *this_dir;
3690
3691 next_dir = strchr (dirnames, DIRNAME_SEPARATOR);
3692 if (next_dir == NULL)
3693 this_len = strlen (dirnames);
3694 else
3695 {
3696 this_len = next_dir - dirnames;
3697 next_dir++;
3698 }
3699
3700 this_dir = xmalloc (this_len + 1);
3701 memcpy (this_dir, dirnames, this_len);
3702 this_dir[this_len] = '\0';
3703 VEC_safe_push (char_ptr, *vecp, this_dir);
3704
3705 dirnames = next_dir;
3706 }
3707 while (dirnames != NULL);
3708 }
3709
3710 /* Split DIRNAMES by DIRNAME_SEPARATOR delimiter and return a list of all the
3711 elements in their original order. For empty string ("") DIRNAMES return
3712 list of one empty string ("") element.
3713
3714 You may modify the returned strings.
3715 Read free_char_ptr_vec for its cleanup. */
3716
3717 VEC (char_ptr) *
3718 dirnames_to_char_ptr_vec (const char *dirnames)
3719 {
3720 VEC (char_ptr) *retval = NULL;
3721
3722 dirnames_to_char_ptr_vec_append (&retval, dirnames);
3723
3724 return retval;
3725 }
3726
3727 #ifdef HAVE_WAITPID
3728
3729 #ifdef SIGALRM
3730
3731 /* SIGALRM handler for waitpid_with_timeout. */
3732
3733 static void
3734 sigalrm_handler (int signo)
3735 {
3736 /* Nothing to do. */
3737 }
3738
3739 #endif
3740
3741 /* Wrapper to wait for child PID to die with TIMEOUT.
3742 TIMEOUT is the time to stop waiting in seconds.
3743 If TIMEOUT is zero, pass WNOHANG to waitpid.
3744 Returns PID if it was successfully waited for, otherwise -1.
3745
3746 Timeouts are currently implemented with alarm and SIGALRM.
3747 If the host does not support them, this waits "forever".
3748 It would be odd though for a host to have waitpid and not SIGALRM. */
3749
3750 pid_t
3751 wait_to_die_with_timeout (pid_t pid, int *status, int timeout)
3752 {
3753 pid_t waitpid_result;
3754
3755 gdb_assert (pid > 0);
3756 gdb_assert (timeout >= 0);
3757
3758 if (timeout > 0)
3759 {
3760 #ifdef SIGALRM
3761 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3762 struct sigaction sa, old_sa;
3763
3764 sa.sa_handler = sigalrm_handler;
3765 sigemptyset (&sa.sa_mask);
3766 sa.sa_flags = 0;
3767 sigaction (SIGALRM, &sa, &old_sa);
3768 #else
3769 void (*ofunc) ();
3770
3771 ofunc = (void (*)()) signal (SIGALRM, sigalrm_handler);
3772 #endif
3773
3774 alarm (timeout);
3775 #endif
3776
3777 waitpid_result = waitpid (pid, status, 0);
3778
3779 #ifdef SIGALRM
3780 alarm (0);
3781 #if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3782 sigaction (SIGALRM, &old_sa, NULL);
3783 #else
3784 signal (SIGALRM, ofunc);
3785 #endif
3786 #endif
3787 }
3788 else
3789 waitpid_result = waitpid (pid, status, WNOHANG);
3790
3791 if (waitpid_result == pid)
3792 return pid;
3793 else
3794 return -1;
3795 }
3796
3797 #endif /* HAVE_WAITPID */
3798
3799 /* Provide a prototype to silence -Wmissing-prototypes. */
3800 extern initialize_file_ftype _initialize_utils;
3801
3802 void
3803 _initialize_utils (void)
3804 {
3805 add_internal_problem_command (&internal_error_problem);
3806 add_internal_problem_command (&internal_warning_problem);
3807 }
This page took 0.24217 seconds and 4 git commands to generate.