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