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