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