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