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