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