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