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