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