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