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