* defs.h (do_exec_error_cleanups, discard_exec_error_cleanups)
[external/binutils.git] / gdb / utils.c
1 /* General utility routines for GDB, the GNU debugger.
2
3    Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
4    1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "gdb_assert.h"
24 #include <ctype.h>
25 #include "gdb_string.h"
26 #include "event-top.h"
27 #include "exceptions.h"
28
29 #ifdef TUI
30 #include "tui/tui.h"            /* For tui_get_command_dimension.   */
31 #endif
32
33 #ifdef __GO32__
34 #include <pc.h>
35 #endif
36
37 /* SunOS's curses.h has a '#define reg register' in it.  Thank you Sun. */
38 #ifdef reg
39 #undef reg
40 #endif
41
42 #include <signal.h>
43 #include "gdbcmd.h"
44 #include "serial.h"
45 #include "bfd.h"
46 #include "target.h"
47 #include "demangle.h"
48 #include "expression.h"
49 #include "language.h"
50 #include "charset.h"
51 #include "annotate.h"
52 #include "filenames.h"
53 #include "symfile.h"
54 #include "gdb_obstack.h"
55 #include "gdbcore.h"
56 #include "top.h"
57
58 #include "inferior.h"           /* for signed_pointer_to_address */
59
60 #include <sys/param.h>          /* For MAXPATHLEN */
61
62 #include "gdb_curses.h"
63
64 #include "readline/readline.h"
65
66 #include <sys/time.h>
67 #include <time.h>
68
69 #if !HAVE_DECL_MALLOC
70 extern PTR malloc ();           /* OK: PTR */
71 #endif
72 #if !HAVE_DECL_REALLOC
73 extern PTR realloc ();          /* OK: PTR */
74 #endif
75 #if !HAVE_DECL_FREE
76 extern void free ();
77 #endif
78
79 /* readline defines this.  */
80 #undef savestring
81
82 void (*deprecated_error_begin_hook) (void);
83
84 /* Prototypes for local functions */
85
86 static void vfprintf_maybe_filtered (struct ui_file *, const char *,
87                                      va_list, int) ATTR_FORMAT (printf, 2, 0);
88
89 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
90
91 static void do_my_cleanups (struct cleanup **, struct cleanup *);
92
93 static void prompt_for_continue (void);
94
95 static void set_screen_size (void);
96 static void set_width (void);
97
98 /* A flag indicating whether to timestamp debugging messages.  */
99
100 static int debug_timestamp = 0;
101
102 /* Chain of cleanup actions established with make_cleanup,
103    to be executed if an error happens.  */
104
105 static struct cleanup *cleanup_chain;   /* cleaned up after a failed command */
106 static struct cleanup *final_cleanup_chain;     /* cleaned up when gdb exits */
107 static struct cleanup *exec_cleanup_chain;      /* cleaned up on each execution command */
108
109 /* Pointer to what is left to do for an execution command after the
110    target stops. Used only in asynchronous mode, by targets that
111    support async execution.  The finish and until commands use it. So
112    does the target extended-remote command. */
113 struct continuation *cmd_continuation;
114 struct continuation *intermediate_continuation;
115
116 /* Nonzero if we have job control. */
117
118 int job_control;
119
120 /* Nonzero means a quit has been requested.  */
121
122 int quit_flag;
123
124 /* Nonzero means quit immediately if Control-C is typed now, rather
125    than waiting until QUIT is executed.  Be careful in setting this;
126    code which executes with immediate_quit set has to be very careful
127    about being able to deal with being interrupted at any time.  It is
128    almost always better to use QUIT; the only exception I can think of
129    is being able to quit out of a system call (using EINTR loses if
130    the SIGINT happens between the previous QUIT and the system call).
131    To immediately quit in the case in which a SIGINT happens between
132    the previous QUIT and setting immediate_quit (desirable anytime we
133    expect to block), call QUIT after setting immediate_quit.  */
134
135 int immediate_quit;
136
137 /* Nonzero means that encoded C++/ObjC names should be printed out in their
138    C++/ObjC form rather than raw.  */
139
140 int demangle = 1;
141 static void
142 show_demangle (struct ui_file *file, int from_tty,
143                struct cmd_list_element *c, const char *value)
144 {
145   fprintf_filtered (file, _("\
146 Demangling of encoded C++/ObjC names when displaying symbols is %s.\n"),
147                     value);
148 }
149
150 /* Nonzero means that encoded C++/ObjC names should be printed out in their
151    C++/ObjC form even in assembler language displays.  If this is set, but
152    DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls.  */
153
154 int asm_demangle = 0;
155 static void
156 show_asm_demangle (struct ui_file *file, int from_tty,
157                    struct cmd_list_element *c, const char *value)
158 {
159   fprintf_filtered (file, _("\
160 Demangling of C++/ObjC names in disassembly listings is %s.\n"),
161                     value);
162 }
163
164 /* Nonzero means that strings with character values >0x7F should be printed
165    as octal escapes.  Zero means just print the value (e.g. it's an
166    international character, and the terminal or window can cope.)  */
167
168 int sevenbit_strings = 0;
169 static void
170 show_sevenbit_strings (struct ui_file *file, int from_tty,
171                        struct cmd_list_element *c, const char *value)
172 {
173   fprintf_filtered (file, _("\
174 Printing of 8-bit characters in strings as \\nnn is %s.\n"),
175                     value);
176 }
177
178 /* String to be printed before error messages, if any.  */
179
180 char *error_pre_print;
181
182 /* String to be printed before quit messages, if any.  */
183
184 char *quit_pre_print;
185
186 /* String to be printed before warning messages, if any.  */
187
188 char *warning_pre_print = "\nwarning: ";
189
190 int pagination_enabled = 1;
191 static void
192 show_pagination_enabled (struct ui_file *file, int from_tty,
193                          struct cmd_list_element *c, const char *value)
194 {
195   fprintf_filtered (file, _("State of pagination is %s.\n"), value);
196 }
197
198 \f
199
200 /* Add a new cleanup to the cleanup_chain,
201    and return the previous chain pointer
202    to be passed later to do_cleanups or discard_cleanups.
203    Args are FUNCTION to clean up with, and ARG to pass to it.  */
204
205 struct cleanup *
206 make_cleanup (make_cleanup_ftype *function, void *arg)
207 {
208   return make_my_cleanup (&cleanup_chain, function, arg);
209 }
210
211 struct cleanup *
212 make_final_cleanup (make_cleanup_ftype *function, void *arg)
213 {
214   return make_my_cleanup (&final_cleanup_chain, function, arg);
215 }
216
217 struct cleanup *
218 make_exec_cleanup (make_cleanup_ftype *function, void *arg)
219 {
220   return make_my_cleanup (&exec_cleanup_chain, function, arg);
221 }
222
223 static void
224 do_freeargv (void *arg)
225 {
226   freeargv ((char **) arg);
227 }
228
229 struct cleanup *
230 make_cleanup_freeargv (char **arg)
231 {
232   return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
233 }
234
235 static void
236 do_bfd_close_cleanup (void *arg)
237 {
238   bfd_close (arg);
239 }
240
241 struct cleanup *
242 make_cleanup_bfd_close (bfd *abfd)
243 {
244   return make_cleanup (do_bfd_close_cleanup, abfd);
245 }
246
247 static void
248 do_close_cleanup (void *arg)
249 {
250   int *fd = arg;
251   close (*fd);
252   xfree (fd);
253 }
254
255 struct cleanup *
256 make_cleanup_close (int fd)
257 {
258   int *saved_fd = xmalloc (sizeof (fd));
259   *saved_fd = fd;
260   return make_cleanup (do_close_cleanup, saved_fd);
261 }
262
263 static void
264 do_ui_file_delete (void *arg)
265 {
266   ui_file_delete (arg);
267 }
268
269 struct cleanup *
270 make_cleanup_ui_file_delete (struct ui_file *arg)
271 {
272   return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
273 }
274
275 static void
276 do_free_section_addr_info (void *arg)
277 {
278   free_section_addr_info (arg);
279 }
280
281 struct cleanup *
282 make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
283 {
284   return make_my_cleanup (&cleanup_chain, do_free_section_addr_info, addrs);
285 }
286
287
288 struct cleanup *
289 make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
290                  void *arg)
291 {
292   struct cleanup *new
293     = (struct cleanup *) xmalloc (sizeof (struct cleanup));
294   struct cleanup *old_chain = *pmy_chain;
295
296   new->next = *pmy_chain;
297   new->function = function;
298   new->arg = arg;
299   *pmy_chain = new;
300
301   return old_chain;
302 }
303
304 /* Discard cleanups and do the actions they describe
305    until we get back to the point OLD_CHAIN in the cleanup_chain.  */
306
307 void
308 do_cleanups (struct cleanup *old_chain)
309 {
310   do_my_cleanups (&cleanup_chain, old_chain);
311 }
312
313 void
314 do_final_cleanups (struct cleanup *old_chain)
315 {
316   do_my_cleanups (&final_cleanup_chain, old_chain);
317 }
318
319 void
320 do_exec_cleanups (struct cleanup *old_chain)
321 {
322   do_my_cleanups (&exec_cleanup_chain, old_chain);
323 }
324
325 static void
326 do_my_cleanups (struct cleanup **pmy_chain,
327                 struct cleanup *old_chain)
328 {
329   struct cleanup *ptr;
330   while ((ptr = *pmy_chain) != old_chain)
331     {
332       *pmy_chain = ptr->next;   /* Do this first incase recursion */
333       (*ptr->function) (ptr->arg);
334       xfree (ptr);
335     }
336 }
337
338 /* Discard cleanups, not doing the actions they describe,
339    until we get back to the point OLD_CHAIN in the cleanup_chain.  */
340
341 void
342 discard_cleanups (struct cleanup *old_chain)
343 {
344   discard_my_cleanups (&cleanup_chain, old_chain);
345 }
346
347 void
348 discard_final_cleanups (struct cleanup *old_chain)
349 {
350   discard_my_cleanups (&final_cleanup_chain, old_chain);
351 }
352
353 void
354 discard_my_cleanups (struct cleanup **pmy_chain,
355                      struct cleanup *old_chain)
356 {
357   struct cleanup *ptr;
358   while ((ptr = *pmy_chain) != old_chain)
359     {
360       *pmy_chain = ptr->next;
361       xfree (ptr);
362     }
363 }
364
365 /* Set the cleanup_chain to 0, and return the old cleanup chain.  */
366 struct cleanup *
367 save_cleanups (void)
368 {
369   return save_my_cleanups (&cleanup_chain);
370 }
371
372 struct cleanup *
373 save_final_cleanups (void)
374 {
375   return save_my_cleanups (&final_cleanup_chain);
376 }
377
378 struct cleanup *
379 save_my_cleanups (struct cleanup **pmy_chain)
380 {
381   struct cleanup *old_chain = *pmy_chain;
382
383   *pmy_chain = 0;
384   return old_chain;
385 }
386
387 /* Restore the cleanup chain from a previously saved chain.  */
388 void
389 restore_cleanups (struct cleanup *chain)
390 {
391   restore_my_cleanups (&cleanup_chain, chain);
392 }
393
394 void
395 restore_final_cleanups (struct cleanup *chain)
396 {
397   restore_my_cleanups (&final_cleanup_chain, chain);
398 }
399
400 void
401 restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
402 {
403   *pmy_chain = chain;
404 }
405
406 /* This function is useful for cleanups.
407    Do
408
409    foo = xmalloc (...);
410    old_chain = make_cleanup (free_current_contents, &foo);
411
412    to arrange to free the object thus allocated.  */
413
414 void
415 free_current_contents (void *ptr)
416 {
417   void **location = ptr;
418   if (location == NULL)
419     internal_error (__FILE__, __LINE__,
420                     _("free_current_contents: NULL pointer"));
421   if (*location != NULL)
422     {
423       xfree (*location);
424       *location = NULL;
425     }
426 }
427
428 /* Provide a known function that does nothing, to use as a base for
429    for a possibly long chain of cleanups.  This is useful where we
430    use the cleanup chain for handling normal cleanups as well as dealing
431    with cleanups that need to be done as a result of a call to error().
432    In such cases, we may not be certain where the first cleanup is, unless
433    we have a do-nothing one to always use as the base. */
434
435 void
436 null_cleanup (void *arg)
437 {
438 }
439
440 /* Add a continuation to the continuation list, the global list
441    cmd_continuation. The new continuation will be added at the front.*/
442 void
443 add_continuation (void (*continuation_hook) (struct continuation_arg *),
444                   struct continuation_arg *arg_list)
445 {
446   struct continuation *continuation_ptr;
447
448   continuation_ptr =
449     (struct continuation *) xmalloc (sizeof (struct continuation));
450   continuation_ptr->continuation_hook = continuation_hook;
451   continuation_ptr->arg_list = arg_list;
452   continuation_ptr->next = cmd_continuation;
453   cmd_continuation = continuation_ptr;
454 }
455
456 /* Walk down the cmd_continuation list, and execute all the
457    continuations. There is a problem though. In some cases new
458    continuations may be added while we are in the middle of this
459    loop. If this happens they will be added in the front, and done
460    before we have a chance of exhausting those that were already
461    there. We need to then save the beginning of the list in a pointer
462    and do the continuations from there on, instead of using the
463    global beginning of list as our iteration pointer.  */
464 void
465 do_all_continuations (void)
466 {
467   struct continuation *continuation_ptr;
468   struct continuation *saved_continuation;
469
470   /* Copy the list header into another pointer, and set the global
471      list header to null, so that the global list can change as a side
472      effect of invoking the continuations and the processing of
473      the preexisting continuations will not be affected. */
474   continuation_ptr = cmd_continuation;
475   cmd_continuation = NULL;
476
477   /* Work now on the list we have set aside.  */
478   while (continuation_ptr)
479     {
480       (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
481       saved_continuation = continuation_ptr;
482       continuation_ptr = continuation_ptr->next;
483       xfree (saved_continuation);
484     }
485 }
486
487 /* Walk down the cmd_continuation list, and get rid of all the
488    continuations. */
489 void
490 discard_all_continuations (void)
491 {
492   struct continuation *continuation_ptr;
493
494   while (cmd_continuation)
495     {
496       continuation_ptr = cmd_continuation;
497       cmd_continuation = continuation_ptr->next;
498       xfree (continuation_ptr);
499     }
500 }
501
502 /* Add a continuation to the continuation list, the global list
503    intermediate_continuation.  The new continuation will be added at
504    the front.  */
505 void
506 add_intermediate_continuation (void (*continuation_hook)
507                                (struct continuation_arg *),
508                                struct continuation_arg *arg_list)
509 {
510   struct continuation *continuation_ptr;
511
512   continuation_ptr =
513     (struct continuation *) xmalloc (sizeof (struct continuation));
514   continuation_ptr->continuation_hook = continuation_hook;
515   continuation_ptr->arg_list = arg_list;
516   continuation_ptr->next = intermediate_continuation;
517   intermediate_continuation = continuation_ptr;
518 }
519
520 /* Walk down the cmd_continuation list, and execute all the
521    continuations. There is a problem though. In some cases new
522    continuations may be added while we are in the middle of this
523    loop. If this happens they will be added in the front, and done
524    before we have a chance of exhausting those that were already
525    there. We need to then save the beginning of the list in a pointer
526    and do the continuations from there on, instead of using the
527    global beginning of list as our iteration pointer.*/
528 void
529 do_all_intermediate_continuations (void)
530 {
531   struct continuation *continuation_ptr;
532   struct continuation *saved_continuation;
533
534   /* Copy the list header into another pointer, and set the global
535      list header to null, so that the global list can change as a side
536      effect of invoking the continuations and the processing of
537      the preexisting continuations will not be affected. */
538   continuation_ptr = intermediate_continuation;
539   intermediate_continuation = NULL;
540
541   /* Work now on the list we have set aside.  */
542   while (continuation_ptr)
543     {
544       (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
545       saved_continuation = continuation_ptr;
546       continuation_ptr = continuation_ptr->next;
547       xfree (saved_continuation);
548     }
549 }
550
551 /* Walk down the cmd_continuation list, and get rid of all the
552    continuations. */
553 void
554 discard_all_intermediate_continuations (void)
555 {
556   struct continuation *continuation_ptr;
557
558   while (intermediate_continuation)
559     {
560       continuation_ptr = intermediate_continuation;
561       intermediate_continuation = continuation_ptr->next;
562       xfree (continuation_ptr);
563     }
564 }
565 \f
566
567
568 /* Print a warning message.  The first argument STRING is the warning
569    message, used as an fprintf format string, the second is the
570    va_list of arguments for that string.  A warning is unfiltered (not
571    paginated) so that the user does not need to page through each
572    screen full of warnings when there are lots of them.  */
573
574 void
575 vwarning (const char *string, va_list args)
576 {
577   if (deprecated_warning_hook)
578     (*deprecated_warning_hook) (string, args);
579   else
580     {
581       target_terminal_ours ();
582       wrap_here ("");           /* Force out any buffered output */
583       gdb_flush (gdb_stdout);
584       if (warning_pre_print)
585         fputs_unfiltered (warning_pre_print, gdb_stderr);
586       vfprintf_unfiltered (gdb_stderr, string, args);
587       fprintf_unfiltered (gdb_stderr, "\n");
588       va_end (args);
589     }
590 }
591
592 /* Print a warning message.
593    The first argument STRING is the warning message, used as a fprintf string,
594    and the remaining args are passed as arguments to it.
595    The primary difference between warnings and errors is that a warning
596    does not force the return to command level.  */
597
598 void
599 warning (const char *string, ...)
600 {
601   va_list args;
602   va_start (args, string);
603   vwarning (string, args);
604   va_end (args);
605 }
606
607 /* Print an error message and return to command level.
608    The first argument STRING is the error message, used as a fprintf string,
609    and the remaining args are passed as arguments to it.  */
610
611 NORETURN void
612 verror (const char *string, va_list args)
613 {
614   throw_verror (GENERIC_ERROR, string, args);
615 }
616
617 NORETURN void
618 error (const char *string, ...)
619 {
620   va_list args;
621   va_start (args, string);
622   throw_verror (GENERIC_ERROR, string, args);
623   va_end (args);
624 }
625
626 /* Print an error message and quit.
627    The first argument STRING is the error message, used as a fprintf string,
628    and the remaining args are passed as arguments to it.  */
629
630 NORETURN void
631 vfatal (const char *string, va_list args)
632 {
633   throw_vfatal (string, args);
634 }
635
636 NORETURN void
637 fatal (const char *string, ...)
638 {
639   va_list args;
640   va_start (args, string);
641   throw_vfatal (string, args);
642   va_end (args);
643 }
644
645 NORETURN void
646 error_stream (struct ui_file *stream)
647 {
648   long len;
649   char *message = ui_file_xstrdup (stream, &len);
650   make_cleanup (xfree, message);
651   error (("%s"), message);
652 }
653
654 /* Print a message reporting an internal error/warning. Ask the user
655    if they want to continue, dump core, or just exit.  Return
656    something to indicate a quit.  */
657
658 struct internal_problem
659 {
660   const char *name;
661   /* FIXME: cagney/2002-08-15: There should be ``maint set/show''
662      commands available for controlling these variables.  */
663   enum auto_boolean should_quit;
664   enum auto_boolean should_dump_core;
665 };
666
667 /* Report a problem, internal to GDB, to the user.  Once the problem
668    has been reported, and assuming GDB didn't quit, the caller can
669    either allow execution to resume or throw an error.  */
670
671 static void ATTR_FORMAT (printf, 4, 0)
672 internal_vproblem (struct internal_problem *problem,
673                    const char *file, int line, const char *fmt, va_list ap)
674 {
675   static int dejavu;
676   int quit_p;
677   int dump_core_p;
678   char *reason;
679
680   /* Don't allow infinite error/warning recursion.  */
681   {
682     static char msg[] = "Recursive internal problem.\n";
683     switch (dejavu)
684       {
685       case 0:
686         dejavu = 1;
687         break;
688       case 1:
689         dejavu = 2;
690         fputs_unfiltered (msg, gdb_stderr);
691         abort ();       /* NOTE: GDB has only three calls to abort().  */
692       default:
693         dejavu = 3;
694         write (STDERR_FILENO, msg, sizeof (msg));
695         exit (1);
696       }
697   }
698
699   /* Try to get the message out and at the start of a new line.  */
700   target_terminal_ours ();
701   begin_line ();
702
703   /* Create a string containing the full error/warning message.  Need
704      to call query with this full string, as otherwize the reason
705      (error/warning) and question become separated.  Format using a
706      style similar to a compiler error message.  Include extra detail
707      so that the user knows that they are living on the edge.  */
708   {
709     char *msg;
710     msg = xstrvprintf (fmt, ap);
711     reason = xstrprintf ("\
712 %s:%d: %s: %s\n\
713 A problem internal to GDB has been detected,\n\
714 further debugging may prove unreliable.", file, line, problem->name, msg);
715     xfree (msg);
716     make_cleanup (xfree, reason);
717   }
718
719   switch (problem->should_quit)
720     {
721     case AUTO_BOOLEAN_AUTO:
722       /* Default (yes/batch case) is to quit GDB.  When in batch mode
723          this lessens the likelhood of GDB going into an infinate
724          loop.  */
725       quit_p = query (_("%s\nQuit this debugging session? "), reason);
726       break;
727     case AUTO_BOOLEAN_TRUE:
728       quit_p = 1;
729       break;
730     case AUTO_BOOLEAN_FALSE:
731       quit_p = 0;
732       break;
733     default:
734       internal_error (__FILE__, __LINE__, _("bad switch"));
735     }
736
737   switch (problem->should_dump_core)
738     {
739     case AUTO_BOOLEAN_AUTO:
740       /* Default (yes/batch case) is to dump core.  This leaves a GDB
741          `dropping' so that it is easier to see that something went
742          wrong in GDB.  */
743       dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
744       break;
745       break;
746     case AUTO_BOOLEAN_TRUE:
747       dump_core_p = 1;
748       break;
749     case AUTO_BOOLEAN_FALSE:
750       dump_core_p = 0;
751       break;
752     default:
753       internal_error (__FILE__, __LINE__, _("bad switch"));
754     }
755
756   if (quit_p)
757     {
758       if (dump_core_p)
759         abort ();               /* NOTE: GDB has only three calls to abort().  */
760       else
761         exit (1);
762     }
763   else
764     {
765       if (dump_core_p)
766         {
767 #ifdef HAVE_WORKING_FORK
768           if (fork () == 0)
769             abort ();           /* NOTE: GDB has only three calls to abort().  */
770 #endif
771         }
772     }
773
774   dejavu = 0;
775 }
776
777 static struct internal_problem internal_error_problem = {
778   "internal-error", AUTO_BOOLEAN_AUTO, AUTO_BOOLEAN_AUTO
779 };
780
781 NORETURN void
782 internal_verror (const char *file, int line, const char *fmt, va_list ap)
783 {
784   internal_vproblem (&internal_error_problem, file, line, fmt, ap);
785   deprecated_throw_reason (RETURN_ERROR);
786 }
787
788 NORETURN void
789 internal_error (const char *file, int line, const char *string, ...)
790 {
791   va_list ap;
792   va_start (ap, string);
793   internal_verror (file, line, string, ap);
794   va_end (ap);
795 }
796
797 static struct internal_problem internal_warning_problem = {
798   "internal-warning", AUTO_BOOLEAN_AUTO, AUTO_BOOLEAN_AUTO
799 };
800
801 void
802 internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
803 {
804   internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
805 }
806
807 void
808 internal_warning (const char *file, int line, const char *string, ...)
809 {
810   va_list ap;
811   va_start (ap, string);
812   internal_vwarning (file, line, string, ap);
813   va_end (ap);
814 }
815
816 /* Print the system error message for errno, and also mention STRING
817    as the file name for which the error was encountered.
818    Then return to command level.  */
819
820 NORETURN void
821 perror_with_name (const char *string)
822 {
823   char *err;
824   char *combined;
825
826   err = safe_strerror (errno);
827   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
828   strcpy (combined, string);
829   strcat (combined, ": ");
830   strcat (combined, err);
831
832   /* I understand setting these is a matter of taste.  Still, some people
833      may clear errno but not know about bfd_error.  Doing this here is not
834      unreasonable. */
835   bfd_set_error (bfd_error_no_error);
836   errno = 0;
837
838   error (_("%s."), combined);
839 }
840
841 /* Print the system error message for ERRCODE, and also mention STRING
842    as the file name for which the error was encountered.  */
843
844 void
845 print_sys_errmsg (const char *string, int errcode)
846 {
847   char *err;
848   char *combined;
849
850   err = safe_strerror (errcode);
851   combined = (char *) alloca (strlen (err) + strlen (string) + 3);
852   strcpy (combined, string);
853   strcat (combined, ": ");
854   strcat (combined, err);
855
856   /* We want anything which was printed on stdout to come out first, before
857      this message.  */
858   gdb_flush (gdb_stdout);
859   fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
860 }
861
862 /* Control C eventually causes this to be called, at a convenient time.  */
863
864 void
865 quit (void)
866 {
867 #ifdef __MSDOS__
868   /* No steenking SIGINT will ever be coming our way when the
869      program is resumed.  Don't lie.  */
870   fatal ("Quit");
871 #else
872   if (job_control
873       /* If there is no terminal switching for this target, then we can't
874          possibly get screwed by the lack of job control.  */
875       || current_target.to_terminal_ours == NULL)
876     fatal ("Quit");
877   else
878     fatal ("Quit (expect signal SIGINT when the program is resumed)");
879 #endif
880 }
881
882 \f
883 /* Called when a memory allocation fails, with the number of bytes of
884    memory requested in SIZE. */
885
886 NORETURN void
887 nomem (long size)
888 {
889   if (size > 0)
890     {
891       internal_error (__FILE__, __LINE__,
892                       _("virtual memory exhausted: can't allocate %ld bytes."),
893                       size);
894     }
895   else
896     {
897       internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
898     }
899 }
900
901 /* The xmalloc() (libiberty.h) family of memory management routines.
902
903    These are like the ISO-C malloc() family except that they implement
904    consistent semantics and guard against typical memory management
905    problems.  */
906
907 /* NOTE: These are declared using PTR to ensure consistency with
908    "libiberty.h".  xfree() is GDB local.  */
909
910 PTR                             /* OK: PTR */
911 xmalloc (size_t size)
912 {
913   void *val;
914
915   /* See libiberty/xmalloc.c.  This function need's to match that's
916      semantics.  It never returns NULL.  */
917   if (size == 0)
918     size = 1;
919
920   val = malloc (size);          /* OK: malloc */
921   if (val == NULL)
922     nomem (size);
923
924   return (val);
925 }
926
927 void *
928 xzalloc (size_t size)
929 {
930   return xcalloc (1, size);
931 }
932
933 PTR                             /* OK: PTR */
934 xrealloc (PTR ptr, size_t size) /* OK: PTR */
935 {
936   void *val;
937
938   /* See libiberty/xmalloc.c.  This function need's to match that's
939      semantics.  It never returns NULL.  */
940   if (size == 0)
941     size = 1;
942
943   if (ptr != NULL)
944     val = realloc (ptr, size);  /* OK: realloc */
945   else
946     val = malloc (size);                /* OK: malloc */
947   if (val == NULL)
948     nomem (size);
949
950   return (val);
951 }
952
953 PTR                             /* OK: PTR */
954 xcalloc (size_t number, size_t size)
955 {
956   void *mem;
957
958   /* See libiberty/xmalloc.c.  This function need's to match that's
959      semantics.  It never returns NULL.  */
960   if (number == 0 || size == 0)
961     {
962       number = 1;
963       size = 1;
964     }
965
966   mem = calloc (number, size);          /* OK: xcalloc */
967   if (mem == NULL)
968     nomem (number * size);
969
970   return mem;
971 }
972
973 void
974 xfree (void *ptr)
975 {
976   if (ptr != NULL)
977     free (ptr);         /* OK: free */
978 }
979 \f
980
981 /* Like asprintf/vasprintf but get an internal_error if the call
982    fails. */
983
984 char *
985 xstrprintf (const char *format, ...)
986 {
987   char *ret;
988   va_list args;
989   va_start (args, format);
990   ret = xstrvprintf (format, args);
991   va_end (args);
992   return ret;
993 }
994
995 void
996 xasprintf (char **ret, const char *format, ...)
997 {
998   va_list args;
999   va_start (args, format);
1000   (*ret) = xstrvprintf (format, args);
1001   va_end (args);
1002 }
1003
1004 void
1005 xvasprintf (char **ret, const char *format, va_list ap)
1006 {
1007   (*ret) = xstrvprintf (format, ap);
1008 }
1009
1010 char *
1011 xstrvprintf (const char *format, va_list ap)
1012 {
1013   char *ret = NULL;
1014   int status = vasprintf (&ret, format, ap);
1015   /* NULL is returned when there was a memory allocation problem, or
1016      any other error (for instance, a bad format string).  A negative
1017      status (the printed length) with a non-NULL buffer should never
1018      happen, but just to be sure.  */
1019   if (ret == NULL || status < 0)
1020     internal_error (__FILE__, __LINE__, _("vasprintf call failed"));
1021   return ret;
1022 }
1023
1024 int
1025 xsnprintf (char *str, size_t size, const char *format, ...)
1026 {
1027   va_list args;
1028   int ret;
1029
1030   va_start (args, format);
1031   ret = vsnprintf (str, size, format, args);
1032   gdb_assert (ret < size);
1033   va_end (args);
1034
1035   return ret;
1036 }
1037
1038 /* My replacement for the read system call.
1039    Used like `read' but keeps going if `read' returns too soon.  */
1040
1041 int
1042 myread (int desc, char *addr, int len)
1043 {
1044   int val;
1045   int orglen = len;
1046
1047   while (len > 0)
1048     {
1049       val = read (desc, addr, len);
1050       if (val < 0)
1051         return val;
1052       if (val == 0)
1053         return orglen - len;
1054       len -= val;
1055       addr += val;
1056     }
1057   return orglen;
1058 }
1059 \f
1060 /* Make a copy of the string at PTR with SIZE characters
1061    (and add a null character at the end in the copy).
1062    Uses malloc to get the space.  Returns the address of the copy.  */
1063
1064 char *
1065 savestring (const char *ptr, size_t size)
1066 {
1067   char *p = (char *) xmalloc (size + 1);
1068   memcpy (p, ptr, size);
1069   p[size] = 0;
1070   return p;
1071 }
1072
1073 void
1074 print_spaces (int n, struct ui_file *file)
1075 {
1076   fputs_unfiltered (n_spaces (n), file);
1077 }
1078
1079 /* Print a host address.  */
1080
1081 void
1082 gdb_print_host_address (const void *addr, struct ui_file *stream)
1083 {
1084
1085   /* We could use the %p conversion specifier to fprintf if we had any
1086      way of knowing whether this host supports it.  But the following
1087      should work on the Alpha and on 32 bit machines.  */
1088
1089   fprintf_filtered (stream, "0x%lx", (unsigned long) addr);
1090 }
1091 \f
1092
1093 /* This function supports the query, nquery, and yquery functions.
1094    Ask user a y-or-n question and return 0 if answer is no, 1 if
1095    answer is yes, or default the answer to the specified default
1096    (for yquery or nquery).  DEFCHAR may be 'y' or 'n' to provide a
1097    default answer, or '\0' for no default.
1098    CTLSTR is the control string and should end in "? ".  It should
1099    not say how to answer, because we do that.
1100    ARGS are the arguments passed along with the CTLSTR argument to
1101    printf.  */
1102
1103 static int ATTR_FORMAT (printf, 1, 0)
1104 defaulted_query (const char *ctlstr, const char defchar, va_list args)
1105 {
1106   int answer;
1107   int ans2;
1108   int retval;
1109   int def_value;
1110   char def_answer, not_def_answer;
1111   char *y_string, *n_string, *question;
1112
1113   /* Set up according to which answer is the default.  */
1114   if (defchar == '\0')
1115     {
1116       def_value = 1;
1117       def_answer = 'Y';
1118       not_def_answer = 'N';
1119       y_string = "y";
1120       n_string = "n";
1121     }
1122   else if (defchar == 'y')
1123     {
1124       def_value = 1;
1125       def_answer = 'Y';
1126       not_def_answer = 'N';
1127       y_string = "[y]";
1128       n_string = "n";
1129     }
1130   else
1131     {
1132       def_value = 0;
1133       def_answer = 'N';
1134       not_def_answer = 'Y';
1135       y_string = "y";
1136       n_string = "[n]";
1137     }
1138
1139   /* Automatically answer the default value if the user did not want
1140      prompts.  */
1141   if (! caution)
1142     return def_value;
1143
1144   /* If input isn't coming from the user directly, just say what
1145      question we're asking, and then answer "yes" automatically.  This
1146      way, important error messages don't get lost when talking to GDB
1147      over a pipe.  */
1148   if (! input_from_terminal_p ())
1149     {
1150       wrap_here ("");
1151       vfprintf_filtered (gdb_stdout, ctlstr, args);
1152
1153       printf_filtered (_("(%s or %s) [answered %c; input not from terminal]\n"),
1154                        y_string, n_string, def_answer);
1155       gdb_flush (gdb_stdout);
1156
1157       return def_value;
1158     }
1159
1160   /* Automatically answer the default value if input is not from the user
1161      directly, or if the user did not want prompts.  */
1162   if (!input_from_terminal_p () || !caution)
1163     return def_value;
1164
1165   if (deprecated_query_hook)
1166     {
1167       return deprecated_query_hook (ctlstr, args);
1168     }
1169
1170   /* Format the question outside of the loop, to avoid reusing args.  */
1171   question = xstrvprintf (ctlstr, args);
1172
1173   while (1)
1174     {
1175       wrap_here ("");           /* Flush any buffered output */
1176       gdb_flush (gdb_stdout);
1177
1178       if (annotation_level > 1)
1179         printf_filtered (("\n\032\032pre-query\n"));
1180
1181       fputs_filtered (question, gdb_stdout);
1182       printf_filtered (_("(%s or %s) "), y_string, n_string);
1183
1184       if (annotation_level > 1)
1185         printf_filtered (("\n\032\032query\n"));
1186
1187       wrap_here ("");
1188       gdb_flush (gdb_stdout);
1189
1190       answer = fgetc (stdin);
1191       clearerr (stdin);         /* in case of C-d */
1192       if (answer == EOF)        /* C-d */
1193         {
1194           printf_filtered ("EOF [assumed %c]\n", def_answer);
1195           retval = def_value;
1196           break;
1197         }
1198       /* Eat rest of input line, to EOF or newline */
1199       if (answer != '\n')
1200         do
1201           {
1202             ans2 = fgetc (stdin);
1203             clearerr (stdin);
1204           }
1205         while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1206
1207       if (answer >= 'a')
1208         answer -= 040;
1209       /* Check answer.  For the non-default, the user must specify
1210          the non-default explicitly.  */
1211       if (answer == not_def_answer)
1212         {
1213           retval = !def_value;
1214           break;
1215         }
1216       /* Otherwise, if a default was specified, the user may either
1217          specify the required input or have it default by entering
1218          nothing.  */
1219       if (answer == def_answer
1220           || (defchar != '\0' &&
1221               (answer == '\n' || answer == '\r' || answer == EOF)))
1222         {
1223           retval = def_value;
1224           break;
1225         }
1226       /* Invalid entries are not defaulted and require another selection.  */
1227       printf_filtered (_("Please answer %s or %s.\n"),
1228                        y_string, n_string);
1229     }
1230
1231   xfree (question);
1232   if (annotation_level > 1)
1233     printf_filtered (("\n\032\032post-query\n"));
1234   return retval;
1235 }
1236 \f
1237
1238 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1239    answer is yes, or 0 if answer is defaulted.
1240    Takes three args which are given to printf to print the question.
1241    The first, a control string, should end in "? ".
1242    It should not say how to answer, because we do that.  */
1243
1244 int
1245 nquery (const char *ctlstr, ...)
1246 {
1247   va_list args;
1248
1249   va_start (args, ctlstr);
1250   return defaulted_query (ctlstr, 'n', args);
1251   va_end (args);
1252 }
1253
1254 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1255    answer is yes, or 1 if answer is defaulted.
1256    Takes three args which are given to printf to print the question.
1257    The first, a control string, should end in "? ".
1258    It should not say how to answer, because we do that.  */
1259
1260 int
1261 yquery (const char *ctlstr, ...)
1262 {
1263   va_list args;
1264
1265   va_start (args, ctlstr);
1266   return defaulted_query (ctlstr, 'y', args);
1267   va_end (args);
1268 }
1269
1270 /* Ask user a y-or-n question and return 1 iff answer is yes.
1271    Takes three args which are given to printf to print the question.
1272    The first, a control string, should end in "? ".
1273    It should not say how to answer, because we do that.  */
1274
1275 int
1276 query (const char *ctlstr, ...)
1277 {
1278   va_list args;
1279
1280   va_start (args, ctlstr);
1281   return defaulted_query (ctlstr, '\0', args);
1282   va_end (args);
1283 }
1284
1285 /* Print an error message saying that we couldn't make sense of a
1286    \^mumble sequence in a string or character constant.  START and END
1287    indicate a substring of some larger string that contains the
1288    erroneous backslash sequence, missing the initial backslash.  */
1289 static NORETURN int
1290 no_control_char_error (const char *start, const char *end)
1291 {
1292   int len = end - start;
1293   char *copy = alloca (end - start + 1);
1294
1295   memcpy (copy, start, len);
1296   copy[len] = '\0';
1297
1298   error (_("There is no control character `\\%s' in the `%s' character set."),
1299          copy, target_charset ());
1300 }
1301
1302 /* Parse a C escape sequence.  STRING_PTR points to a variable
1303    containing a pointer to the string to parse.  That pointer
1304    should point to the character after the \.  That pointer
1305    is updated past the characters we use.  The value of the
1306    escape sequence is returned.
1307
1308    A negative value means the sequence \ newline was seen,
1309    which is supposed to be equivalent to nothing at all.
1310
1311    If \ is followed by a null character, we return a negative
1312    value and leave the string pointer pointing at the null character.
1313
1314    If \ is followed by 000, we return 0 and leave the string pointer
1315    after the zeros.  A value of 0 does not mean end of string.  */
1316
1317 int
1318 parse_escape (char **string_ptr)
1319 {
1320   int target_char;
1321   int c = *(*string_ptr)++;
1322   if (c_parse_backslash (c, &target_char))
1323     return target_char;
1324   else
1325     switch (c)
1326       {
1327       case '\n':
1328         return -2;
1329       case 0:
1330         (*string_ptr)--;
1331         return 0;
1332       case '^':
1333         {
1334           /* Remember where this escape sequence started, for reporting
1335              errors.  */
1336           char *sequence_start_pos = *string_ptr - 1;
1337
1338           c = *(*string_ptr)++;
1339
1340           if (c == '?')
1341             {
1342               /* XXXCHARSET: What is `delete' in the host character set?  */
1343               c = 0177;
1344
1345               if (!host_char_to_target (c, &target_char))
1346                 error (_("There is no character corresponding to `Delete' "
1347                        "in the target character set `%s'."), host_charset ());
1348
1349               return target_char;
1350             }
1351           else if (c == '\\')
1352             target_char = parse_escape (string_ptr);
1353           else
1354             {
1355               if (!host_char_to_target (c, &target_char))
1356                 no_control_char_error (sequence_start_pos, *string_ptr);
1357             }
1358
1359           /* Now target_char is something like `c', and we want to find
1360              its control-character equivalent.  */
1361           if (!target_char_to_control_char (target_char, &target_char))
1362             no_control_char_error (sequence_start_pos, *string_ptr);
1363
1364           return target_char;
1365         }
1366
1367         /* XXXCHARSET: we need to use isdigit and value-of-digit
1368            methods of the host character set here.  */
1369
1370       case '0':
1371       case '1':
1372       case '2':
1373       case '3':
1374       case '4':
1375       case '5':
1376       case '6':
1377       case '7':
1378         {
1379           int i = c - '0';
1380           int count = 0;
1381           while (++count < 3)
1382             {
1383               c = (**string_ptr);
1384               if (c >= '0' && c <= '7')
1385                 {
1386                   (*string_ptr)++;
1387                   i *= 8;
1388                   i += c - '0';
1389                 }
1390               else
1391                 {
1392                   break;
1393                 }
1394             }
1395           return i;
1396         }
1397       default:
1398         if (!host_char_to_target (c, &target_char))
1399           error
1400             ("The escape sequence `\%c' is equivalent to plain `%c', which"
1401              " has no equivalent\n" "in the `%s' character set.", c, c,
1402              target_charset ());
1403         return target_char;
1404       }
1405 }
1406 \f
1407 /* Print the character C on STREAM as part of the contents of a literal
1408    string whose delimiter is QUOTER.  Note that this routine should only
1409    be call for printing things which are independent of the language
1410    of the program being debugged. */
1411
1412 static void
1413 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1414            void (*do_fprintf) (struct ui_file *, const char *, ...)
1415            ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
1416 {
1417
1418   c &= 0xFF;                    /* Avoid sign bit follies */
1419
1420   if (c < 0x20 ||               /* Low control chars */
1421       (c >= 0x7F && c < 0xA0) ||        /* DEL, High controls */
1422       (sevenbit_strings && c >= 0x80))
1423     {                           /* high order bit set */
1424       switch (c)
1425         {
1426         case '\n':
1427           do_fputs ("\\n", stream);
1428           break;
1429         case '\b':
1430           do_fputs ("\\b", stream);
1431           break;
1432         case '\t':
1433           do_fputs ("\\t", stream);
1434           break;
1435         case '\f':
1436           do_fputs ("\\f", stream);
1437           break;
1438         case '\r':
1439           do_fputs ("\\r", stream);
1440           break;
1441         case '\033':
1442           do_fputs ("\\e", stream);
1443           break;
1444         case '\007':
1445           do_fputs ("\\a", stream);
1446           break;
1447         default:
1448           do_fprintf (stream, "\\%.3o", (unsigned int) c);
1449           break;
1450         }
1451     }
1452   else
1453     {
1454       if (c == '\\' || c == quoter)
1455         do_fputs ("\\", stream);
1456       do_fprintf (stream, "%c", c);
1457     }
1458 }
1459
1460 /* Print the character C on STREAM as part of the contents of a
1461    literal string whose delimiter is QUOTER.  Note that these routines
1462    should only be call for printing things which are independent of
1463    the language of the program being debugged. */
1464
1465 void
1466 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1467 {
1468   while (*str)
1469     printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1470 }
1471
1472 void
1473 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1474 {
1475   while (*str)
1476     printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1477 }
1478
1479 void
1480 fputstrn_filtered (const char *str, int n, int quoter,
1481                    struct ui_file *stream)
1482 {
1483   int i;
1484   for (i = 0; i < n; i++)
1485     printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1486 }
1487
1488 void
1489 fputstrn_unfiltered (const char *str, int n, int quoter,
1490                      struct ui_file *stream)
1491 {
1492   int i;
1493   for (i = 0; i < n; i++)
1494     printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1495 }
1496 \f
1497
1498 /* Number of lines per page or UINT_MAX if paging is disabled.  */
1499 static unsigned int lines_per_page;
1500 static void
1501 show_lines_per_page (struct ui_file *file, int from_tty,
1502                      struct cmd_list_element *c, const char *value)
1503 {
1504   fprintf_filtered (file, _("\
1505 Number of lines gdb thinks are in a page is %s.\n"),
1506                     value);
1507 }
1508
1509 /* Number of chars per line or UINT_MAX if line folding is disabled.  */
1510 static unsigned int chars_per_line;
1511 static void
1512 show_chars_per_line (struct ui_file *file, int from_tty,
1513                      struct cmd_list_element *c, const char *value)
1514 {
1515   fprintf_filtered (file, _("\
1516 Number of characters gdb thinks are in a line is %s.\n"),
1517                     value);
1518 }
1519
1520 /* Current count of lines printed on this page, chars on this line.  */
1521 static unsigned int lines_printed, chars_printed;
1522
1523 /* Buffer and start column of buffered text, for doing smarter word-
1524    wrapping.  When someone calls wrap_here(), we start buffering output
1525    that comes through fputs_filtered().  If we see a newline, we just
1526    spit it out and forget about the wrap_here().  If we see another
1527    wrap_here(), we spit it out and remember the newer one.  If we see
1528    the end of the line, we spit out a newline, the indent, and then
1529    the buffered output.  */
1530
1531 /* Malloc'd buffer with chars_per_line+2 bytes.  Contains characters which
1532    are waiting to be output (they have already been counted in chars_printed).
1533    When wrap_buffer[0] is null, the buffer is empty.  */
1534 static char *wrap_buffer;
1535
1536 /* Pointer in wrap_buffer to the next character to fill.  */
1537 static char *wrap_pointer;
1538
1539 /* String to indent by if the wrap occurs.  Must not be NULL if wrap_column
1540    is non-zero.  */
1541 static char *wrap_indent;
1542
1543 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1544    is not in effect.  */
1545 static int wrap_column;
1546 \f
1547
1548 /* Inialize the number of lines per page and chars per line.  */
1549
1550 void
1551 init_page_info (void)
1552 {
1553 #if defined(TUI)
1554   if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
1555 #endif
1556     {
1557       int rows, cols;
1558
1559 #if defined(__GO32__)
1560       rows = ScreenRows ();
1561       cols = ScreenCols ();
1562       lines_per_page = rows;
1563       chars_per_line = cols;
1564 #else
1565       /* Make sure Readline has initialized its terminal settings.  */
1566       rl_reset_terminal (NULL);
1567
1568       /* Get the screen size from Readline.  */
1569       rl_get_screen_size (&rows, &cols);
1570       lines_per_page = rows;
1571       chars_per_line = cols;
1572
1573       /* Readline should have fetched the termcap entry for us.  */
1574       if (tgetnum ("li") < 0 || getenv ("EMACS"))
1575         {
1576           /* The number of lines per page is not mentioned in the
1577              terminal description.  This probably means that paging is
1578              not useful (e.g. emacs shell window), so disable paging.  */
1579           lines_per_page = UINT_MAX;
1580         }
1581
1582       /* FIXME: Get rid of this junk.  */
1583 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1584       SIGWINCH_HANDLER (SIGWINCH);
1585 #endif
1586
1587       /* If the output is not a terminal, don't paginate it.  */
1588       if (!ui_file_isatty (gdb_stdout))
1589         lines_per_page = UINT_MAX;
1590 #endif
1591     }
1592
1593   set_screen_size ();
1594   set_width ();
1595 }
1596
1597 /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE.  */
1598
1599 static void
1600 set_screen_size (void)
1601 {
1602   int rows = lines_per_page;
1603   int cols = chars_per_line;
1604
1605   if (rows <= 0)
1606     rows = INT_MAX;
1607
1608   if (cols <= 0)
1609     cols = INT_MAX;
1610
1611   /* Update Readline's idea of the terminal size.  */
1612   rl_set_screen_size (rows, cols);
1613 }
1614
1615 /* Reinitialize WRAP_BUFFER according to the current value of
1616    CHARS_PER_LINE.  */
1617
1618 static void
1619 set_width (void)
1620 {
1621   if (chars_per_line == 0)
1622     init_page_info ();
1623
1624   if (!wrap_buffer)
1625     {
1626       wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1627       wrap_buffer[0] = '\0';
1628     }
1629   else
1630     wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1631   wrap_pointer = wrap_buffer;   /* Start it at the beginning.  */
1632 }
1633
1634 static void
1635 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1636 {
1637   set_screen_size ();
1638   set_width ();
1639 }
1640
1641 static void
1642 set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1643 {
1644   set_screen_size ();
1645 }
1646
1647 /* Wait, so the user can read what's on the screen.  Prompt the user
1648    to continue by pressing RETURN.  */
1649
1650 static void
1651 prompt_for_continue (void)
1652 {
1653   char *ignore;
1654   char cont_prompt[120];
1655
1656   if (annotation_level > 1)
1657     printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
1658
1659   strcpy (cont_prompt,
1660           "---Type <return> to continue, or q <return> to quit---");
1661   if (annotation_level > 1)
1662     strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1663
1664   /* We must do this *before* we call gdb_readline, else it will eventually
1665      call us -- thinking that we're trying to print beyond the end of the 
1666      screen.  */
1667   reinitialize_more_filter ();
1668
1669   immediate_quit++;
1670   /* On a real operating system, the user can quit with SIGINT.
1671      But not on GO32.
1672
1673      'q' is provided on all systems so users don't have to change habits
1674      from system to system, and because telling them what to do in
1675      the prompt is more user-friendly than expecting them to think of
1676      SIGINT.  */
1677   /* Call readline, not gdb_readline, because GO32 readline handles control-C
1678      whereas control-C to gdb_readline will cause the user to get dumped
1679      out to DOS.  */
1680   ignore = gdb_readline_wrapper (cont_prompt);
1681
1682   if (annotation_level > 1)
1683     printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
1684
1685   if (ignore)
1686     {
1687       char *p = ignore;
1688       while (*p == ' ' || *p == '\t')
1689         ++p;
1690       if (p[0] == 'q')
1691         async_request_quit (0);
1692       xfree (ignore);
1693     }
1694   immediate_quit--;
1695
1696   /* Now we have to do this again, so that GDB will know that it doesn't
1697      need to save the ---Type <return>--- line at the top of the screen.  */
1698   reinitialize_more_filter ();
1699
1700   dont_repeat ();               /* Forget prev cmd -- CR won't repeat it. */
1701 }
1702
1703 /* Reinitialize filter; ie. tell it to reset to original values.  */
1704
1705 void
1706 reinitialize_more_filter (void)
1707 {
1708   lines_printed = 0;
1709   chars_printed = 0;
1710 }
1711
1712 /* Indicate that if the next sequence of characters overflows the line,
1713    a newline should be inserted here rather than when it hits the end. 
1714    If INDENT is non-null, it is a string to be printed to indent the
1715    wrapped part on the next line.  INDENT must remain accessible until
1716    the next call to wrap_here() or until a newline is printed through
1717    fputs_filtered().
1718
1719    If the line is already overfull, we immediately print a newline and
1720    the indentation, and disable further wrapping.
1721
1722    If we don't know the width of lines, but we know the page height,
1723    we must not wrap words, but should still keep track of newlines
1724    that were explicitly printed.
1725
1726    INDENT should not contain tabs, as that will mess up the char count
1727    on the next line.  FIXME.
1728
1729    This routine is guaranteed to force out any output which has been
1730    squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1731    used to force out output from the wrap_buffer.  */
1732
1733 void
1734 wrap_here (char *indent)
1735 {
1736   /* This should have been allocated, but be paranoid anyway. */
1737   if (!wrap_buffer)
1738     internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
1739
1740   if (wrap_buffer[0])
1741     {
1742       *wrap_pointer = '\0';
1743       fputs_unfiltered (wrap_buffer, gdb_stdout);
1744     }
1745   wrap_pointer = wrap_buffer;
1746   wrap_buffer[0] = '\0';
1747   if (chars_per_line == UINT_MAX)       /* No line overflow checking */
1748     {
1749       wrap_column = 0;
1750     }
1751   else if (chars_printed >= chars_per_line)
1752     {
1753       puts_filtered ("\n");
1754       if (indent != NULL)
1755         puts_filtered (indent);
1756       wrap_column = 0;
1757     }
1758   else
1759     {
1760       wrap_column = chars_printed;
1761       if (indent == NULL)
1762         wrap_indent = "";
1763       else
1764         wrap_indent = indent;
1765     }
1766 }
1767
1768 /* Print input string to gdb_stdout, filtered, with wrap, 
1769    arranging strings in columns of n chars. String can be
1770    right or left justified in the column.  Never prints 
1771    trailing spaces.  String should never be longer than
1772    width.  FIXME: this could be useful for the EXAMINE 
1773    command, which currently doesn't tabulate very well */
1774
1775 void
1776 puts_filtered_tabular (char *string, int width, int right)
1777 {
1778   int spaces = 0;
1779   int stringlen;
1780   char *spacebuf;
1781
1782   gdb_assert (chars_per_line > 0);
1783   if (chars_per_line == UINT_MAX)
1784     {
1785       fputs_filtered (string, gdb_stdout);
1786       fputs_filtered ("\n", gdb_stdout);
1787       return;
1788     }
1789
1790   if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1791     fputs_filtered ("\n", gdb_stdout);
1792
1793   if (width >= chars_per_line)
1794     width = chars_per_line - 1;
1795
1796   stringlen = strlen (string);
1797
1798   if (chars_printed > 0)
1799     spaces = width - (chars_printed - 1) % width - 1;
1800   if (right)
1801     spaces += width - stringlen;
1802
1803   spacebuf = alloca (spaces + 1);
1804   spacebuf[spaces] = '\0';
1805   while (spaces--)
1806     spacebuf[spaces] = ' ';
1807
1808   fputs_filtered (spacebuf, gdb_stdout);
1809   fputs_filtered (string, gdb_stdout);
1810 }
1811
1812
1813 /* Ensure that whatever gets printed next, using the filtered output
1814    commands, starts at the beginning of the line.  I.E. if there is
1815    any pending output for the current line, flush it and start a new
1816    line.  Otherwise do nothing. */
1817
1818 void
1819 begin_line (void)
1820 {
1821   if (chars_printed > 0)
1822     {
1823       puts_filtered ("\n");
1824     }
1825 }
1826
1827
1828 /* Like fputs but if FILTER is true, pause after every screenful.
1829
1830    Regardless of FILTER can wrap at points other than the final
1831    character of a line.
1832
1833    Unlike fputs, fputs_maybe_filtered does not return a value.
1834    It is OK for LINEBUFFER to be NULL, in which case just don't print
1835    anything.
1836
1837    Note that a longjmp to top level may occur in this routine (only if
1838    FILTER is true) (since prompt_for_continue may do so) so this
1839    routine should not be called when cleanups are not in place.  */
1840
1841 static void
1842 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1843                       int filter)
1844 {
1845   const char *lineptr;
1846
1847   if (linebuffer == 0)
1848     return;
1849
1850   /* Don't do any filtering if it is disabled.  */
1851   if ((stream != gdb_stdout) || !pagination_enabled
1852       || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
1853     {
1854       fputs_unfiltered (linebuffer, stream);
1855       return;
1856     }
1857
1858   /* Go through and output each character.  Show line extension
1859      when this is necessary; prompt user for new page when this is
1860      necessary.  */
1861
1862   lineptr = linebuffer;
1863   while (*lineptr)
1864     {
1865       /* Possible new page.  */
1866       if (filter && (lines_printed >= lines_per_page - 1))
1867         prompt_for_continue ();
1868
1869       while (*lineptr && *lineptr != '\n')
1870         {
1871           /* Print a single line.  */
1872           if (*lineptr == '\t')
1873             {
1874               if (wrap_column)
1875                 *wrap_pointer++ = '\t';
1876               else
1877                 fputc_unfiltered ('\t', stream);
1878               /* Shifting right by 3 produces the number of tab stops
1879                  we have already passed, and then adding one and
1880                  shifting left 3 advances to the next tab stop.  */
1881               chars_printed = ((chars_printed >> 3) + 1) << 3;
1882               lineptr++;
1883             }
1884           else
1885             {
1886               if (wrap_column)
1887                 *wrap_pointer++ = *lineptr;
1888               else
1889                 fputc_unfiltered (*lineptr, stream);
1890               chars_printed++;
1891               lineptr++;
1892             }
1893
1894           if (chars_printed >= chars_per_line)
1895             {
1896               unsigned int save_chars = chars_printed;
1897
1898               chars_printed = 0;
1899               lines_printed++;
1900               /* If we aren't actually wrapping, don't output newline --
1901                  if chars_per_line is right, we probably just overflowed
1902                  anyway; if it's wrong, let us keep going.  */
1903               if (wrap_column)
1904                 fputc_unfiltered ('\n', stream);
1905
1906               /* Possible new page.  */
1907               if (lines_printed >= lines_per_page - 1)
1908                 prompt_for_continue ();
1909
1910               /* Now output indentation and wrapped string */
1911               if (wrap_column)
1912                 {
1913                   fputs_unfiltered (wrap_indent, stream);
1914                   *wrap_pointer = '\0'; /* Null-terminate saved stuff */
1915                   fputs_unfiltered (wrap_buffer, stream);       /* and eject it */
1916                   /* FIXME, this strlen is what prevents wrap_indent from
1917                      containing tabs.  However, if we recurse to print it
1918                      and count its chars, we risk trouble if wrap_indent is
1919                      longer than (the user settable) chars_per_line. 
1920                      Note also that this can set chars_printed > chars_per_line
1921                      if we are printing a long string.  */
1922                   chars_printed = strlen (wrap_indent)
1923                     + (save_chars - wrap_column);
1924                   wrap_pointer = wrap_buffer;   /* Reset buffer */
1925                   wrap_buffer[0] = '\0';
1926                   wrap_column = 0;      /* And disable fancy wrap */
1927                 }
1928             }
1929         }
1930
1931       if (*lineptr == '\n')
1932         {
1933           chars_printed = 0;
1934           wrap_here ((char *) 0);       /* Spit out chars, cancel further wraps */
1935           lines_printed++;
1936           fputc_unfiltered ('\n', stream);
1937           lineptr++;
1938         }
1939     }
1940 }
1941
1942 void
1943 fputs_filtered (const char *linebuffer, struct ui_file *stream)
1944 {
1945   fputs_maybe_filtered (linebuffer, stream, 1);
1946 }
1947
1948 int
1949 putchar_unfiltered (int c)
1950 {
1951   char buf = c;
1952   ui_file_write (gdb_stdout, &buf, 1);
1953   return c;
1954 }
1955
1956 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
1957    May return nonlocally.  */
1958
1959 int
1960 putchar_filtered (int c)
1961 {
1962   return fputc_filtered (c, gdb_stdout);
1963 }
1964
1965 int
1966 fputc_unfiltered (int c, struct ui_file *stream)
1967 {
1968   char buf = c;
1969   ui_file_write (stream, &buf, 1);
1970   return c;
1971 }
1972
1973 int
1974 fputc_filtered (int c, struct ui_file *stream)
1975 {
1976   char buf[2];
1977
1978   buf[0] = c;
1979   buf[1] = 0;
1980   fputs_filtered (buf, stream);
1981   return c;
1982 }
1983
1984 /* puts_debug is like fputs_unfiltered, except it prints special
1985    characters in printable fashion.  */
1986
1987 void
1988 puts_debug (char *prefix, char *string, char *suffix)
1989 {
1990   int ch;
1991
1992   /* Print prefix and suffix after each line.  */
1993   static int new_line = 1;
1994   static int return_p = 0;
1995   static char *prev_prefix = "";
1996   static char *prev_suffix = "";
1997
1998   if (*string == '\n')
1999     return_p = 0;
2000
2001   /* If the prefix is changing, print the previous suffix, a new line,
2002      and the new prefix.  */
2003   if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
2004     {
2005       fputs_unfiltered (prev_suffix, gdb_stdlog);
2006       fputs_unfiltered ("\n", gdb_stdlog);
2007       fputs_unfiltered (prefix, gdb_stdlog);
2008     }
2009
2010   /* Print prefix if we printed a newline during the previous call.  */
2011   if (new_line)
2012     {
2013       new_line = 0;
2014       fputs_unfiltered (prefix, gdb_stdlog);
2015     }
2016
2017   prev_prefix = prefix;
2018   prev_suffix = suffix;
2019
2020   /* Output characters in a printable format.  */
2021   while ((ch = *string++) != '\0')
2022     {
2023       switch (ch)
2024         {
2025         default:
2026           if (isprint (ch))
2027             fputc_unfiltered (ch, gdb_stdlog);
2028
2029           else
2030             fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
2031           break;
2032
2033         case '\\':
2034           fputs_unfiltered ("\\\\", gdb_stdlog);
2035           break;
2036         case '\b':
2037           fputs_unfiltered ("\\b", gdb_stdlog);
2038           break;
2039         case '\f':
2040           fputs_unfiltered ("\\f", gdb_stdlog);
2041           break;
2042         case '\n':
2043           new_line = 1;
2044           fputs_unfiltered ("\\n", gdb_stdlog);
2045           break;
2046         case '\r':
2047           fputs_unfiltered ("\\r", gdb_stdlog);
2048           break;
2049         case '\t':
2050           fputs_unfiltered ("\\t", gdb_stdlog);
2051           break;
2052         case '\v':
2053           fputs_unfiltered ("\\v", gdb_stdlog);
2054           break;
2055         }
2056
2057       return_p = ch == '\r';
2058     }
2059
2060   /* Print suffix if we printed a newline.  */
2061   if (new_line)
2062     {
2063       fputs_unfiltered (suffix, gdb_stdlog);
2064       fputs_unfiltered ("\n", gdb_stdlog);
2065     }
2066 }
2067
2068
2069 /* Print a variable number of ARGS using format FORMAT.  If this
2070    information is going to put the amount written (since the last call
2071    to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2072    call prompt_for_continue to get the users permision to continue.
2073
2074    Unlike fprintf, this function does not return a value.
2075
2076    We implement three variants, vfprintf (takes a vararg list and stream),
2077    fprintf (takes a stream to write on), and printf (the usual).
2078
2079    Note also that a longjmp to top level may occur in this routine
2080    (since prompt_for_continue may do so) so this routine should not be
2081    called when cleanups are not in place.  */
2082
2083 static void
2084 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2085                          va_list args, int filter)
2086 {
2087   char *linebuffer;
2088   struct cleanup *old_cleanups;
2089
2090   linebuffer = xstrvprintf (format, args);
2091   old_cleanups = make_cleanup (xfree, linebuffer);
2092   fputs_maybe_filtered (linebuffer, stream, filter);
2093   do_cleanups (old_cleanups);
2094 }
2095
2096
2097 void
2098 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
2099 {
2100   vfprintf_maybe_filtered (stream, format, args, 1);
2101 }
2102
2103 void
2104 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
2105 {
2106   char *linebuffer;
2107   struct cleanup *old_cleanups;
2108
2109   linebuffer = xstrvprintf (format, args);
2110   old_cleanups = make_cleanup (xfree, linebuffer);
2111   if (debug_timestamp && stream == gdb_stdlog)
2112     {
2113       struct timeval tm;
2114       char *timestamp;
2115
2116       gettimeofday (&tm, NULL);
2117       timestamp = xstrprintf ("%ld:%ld ", (long) tm.tv_sec, (long) tm.tv_usec);
2118       make_cleanup (xfree, timestamp);
2119       fputs_unfiltered (timestamp, stream);
2120     }
2121   fputs_unfiltered (linebuffer, stream);
2122   do_cleanups (old_cleanups);
2123 }
2124
2125 void
2126 vprintf_filtered (const char *format, va_list args)
2127 {
2128   vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2129 }
2130
2131 void
2132 vprintf_unfiltered (const char *format, va_list args)
2133 {
2134   vfprintf_unfiltered (gdb_stdout, format, args);
2135 }
2136
2137 void
2138 fprintf_filtered (struct ui_file *stream, const char *format, ...)
2139 {
2140   va_list args;
2141   va_start (args, format);
2142   vfprintf_filtered (stream, format, args);
2143   va_end (args);
2144 }
2145
2146 void
2147 fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
2148 {
2149   va_list args;
2150   va_start (args, format);
2151   vfprintf_unfiltered (stream, format, args);
2152   va_end (args);
2153 }
2154
2155 /* Like fprintf_filtered, but prints its result indented.
2156    Called as fprintfi_filtered (spaces, stream, format, ...);  */
2157
2158 void
2159 fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2160                    ...)
2161 {
2162   va_list args;
2163   va_start (args, format);
2164   print_spaces_filtered (spaces, stream);
2165
2166   vfprintf_filtered (stream, format, args);
2167   va_end (args);
2168 }
2169
2170
2171 void
2172 printf_filtered (const char *format, ...)
2173 {
2174   va_list args;
2175   va_start (args, format);
2176   vfprintf_filtered (gdb_stdout, format, args);
2177   va_end (args);
2178 }
2179
2180
2181 void
2182 printf_unfiltered (const char *format, ...)
2183 {
2184   va_list args;
2185   va_start (args, format);
2186   vfprintf_unfiltered (gdb_stdout, format, args);
2187   va_end (args);
2188 }
2189
2190 /* Like printf_filtered, but prints it's result indented.
2191    Called as printfi_filtered (spaces, format, ...);  */
2192
2193 void
2194 printfi_filtered (int spaces, const char *format, ...)
2195 {
2196   va_list args;
2197   va_start (args, format);
2198   print_spaces_filtered (spaces, gdb_stdout);
2199   vfprintf_filtered (gdb_stdout, format, args);
2200   va_end (args);
2201 }
2202
2203 /* Easy -- but watch out!
2204
2205    This routine is *not* a replacement for puts()!  puts() appends a newline.
2206    This one doesn't, and had better not!  */
2207
2208 void
2209 puts_filtered (const char *string)
2210 {
2211   fputs_filtered (string, gdb_stdout);
2212 }
2213
2214 void
2215 puts_unfiltered (const char *string)
2216 {
2217   fputs_unfiltered (string, gdb_stdout);
2218 }
2219
2220 /* Return a pointer to N spaces and a null.  The pointer is good
2221    until the next call to here.  */
2222 char *
2223 n_spaces (int n)
2224 {
2225   char *t;
2226   static char *spaces = 0;
2227   static int max_spaces = -1;
2228
2229   if (n > max_spaces)
2230     {
2231       if (spaces)
2232         xfree (spaces);
2233       spaces = (char *) xmalloc (n + 1);
2234       for (t = spaces + n; t != spaces;)
2235         *--t = ' ';
2236       spaces[n] = '\0';
2237       max_spaces = n;
2238     }
2239
2240   return spaces + max_spaces - n;
2241 }
2242
2243 /* Print N spaces.  */
2244 void
2245 print_spaces_filtered (int n, struct ui_file *stream)
2246 {
2247   fputs_filtered (n_spaces (n), stream);
2248 }
2249 \f
2250 /* C++/ObjC demangler stuff.  */
2251
2252 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2253    LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2254    If the name is not mangled, or the language for the name is unknown, or
2255    demangling is off, the name is printed in its "raw" form. */
2256
2257 void
2258 fprintf_symbol_filtered (struct ui_file *stream, char *name,
2259                          enum language lang, int arg_mode)
2260 {
2261   char *demangled;
2262
2263   if (name != NULL)
2264     {
2265       /* If user wants to see raw output, no problem.  */
2266       if (!demangle)
2267         {
2268           fputs_filtered (name, stream);
2269         }
2270       else
2271         {
2272           demangled = language_demangle (language_def (lang), name, arg_mode);
2273           fputs_filtered (demangled ? demangled : name, stream);
2274           if (demangled != NULL)
2275             {
2276               xfree (demangled);
2277             }
2278         }
2279     }
2280 }
2281
2282 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2283    differences in whitespace.  Returns 0 if they match, non-zero if they
2284    don't (slightly different than strcmp()'s range of return values).
2285
2286    As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2287    This "feature" is useful when searching for matching C++ function names
2288    (such as if the user types 'break FOO', where FOO is a mangled C++
2289    function). */
2290
2291 int
2292 strcmp_iw (const char *string1, const char *string2)
2293 {
2294   while ((*string1 != '\0') && (*string2 != '\0'))
2295     {
2296       while (isspace (*string1))
2297         {
2298           string1++;
2299         }
2300       while (isspace (*string2))
2301         {
2302           string2++;
2303         }
2304       if (*string1 != *string2)
2305         {
2306           break;
2307         }
2308       if (*string1 != '\0')
2309         {
2310           string1++;
2311           string2++;
2312         }
2313     }
2314   return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2315 }
2316
2317 /* This is like strcmp except that it ignores whitespace and treats
2318    '(' as the first non-NULL character in terms of ordering.  Like
2319    strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2320    STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2321    according to that ordering.
2322
2323    If a list is sorted according to this function and if you want to
2324    find names in the list that match some fixed NAME according to
2325    strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2326    where this function would put NAME.
2327
2328    Here are some examples of why using strcmp to sort is a bad idea:
2329
2330    Whitespace example:
2331
2332    Say your partial symtab contains: "foo<char *>", "goo".  Then, if
2333    we try to do a search for "foo<char*>", strcmp will locate this
2334    after "foo<char *>" and before "goo".  Then lookup_partial_symbol
2335    will start looking at strings beginning with "goo", and will never
2336    see the correct match of "foo<char *>".
2337
2338    Parenthesis example:
2339
2340    In practice, this is less like to be an issue, but I'll give it a
2341    shot.  Let's assume that '$' is a legitimate character to occur in
2342    symbols.  (Which may well even be the case on some systems.)  Then
2343    say that the partial symbol table contains "foo$" and "foo(int)".
2344    strcmp will put them in this order, since '$' < '('.  Now, if the
2345    user searches for "foo", then strcmp will sort "foo" before "foo$".
2346    Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2347    "foo") is false, so it won't proceed to the actual match of
2348    "foo(int)" with "foo".  */
2349
2350 int
2351 strcmp_iw_ordered (const char *string1, const char *string2)
2352 {
2353   while ((*string1 != '\0') && (*string2 != '\0'))
2354     {
2355       while (isspace (*string1))
2356         {
2357           string1++;
2358         }
2359       while (isspace (*string2))
2360         {
2361           string2++;
2362         }
2363       if (*string1 != *string2)
2364         {
2365           break;
2366         }
2367       if (*string1 != '\0')
2368         {
2369           string1++;
2370           string2++;
2371         }
2372     }
2373
2374   switch (*string1)
2375     {
2376       /* Characters are non-equal unless they're both '\0'; we want to
2377          make sure we get the comparison right according to our
2378          comparison in the cases where one of them is '\0' or '('.  */
2379     case '\0':
2380       if (*string2 == '\0')
2381         return 0;
2382       else
2383         return -1;
2384     case '(':
2385       if (*string2 == '\0')
2386         return 1;
2387       else
2388         return -1;
2389     default:
2390       if (*string2 == '(')
2391         return 1;
2392       else
2393         return *string1 - *string2;
2394     }
2395 }
2396
2397 /* A simple comparison function with opposite semantics to strcmp.  */
2398
2399 int
2400 streq (const char *lhs, const char *rhs)
2401 {
2402   return !strcmp (lhs, rhs);
2403 }
2404 \f
2405
2406 /*
2407    ** subset_compare()
2408    **    Answer whether string_to_compare is a full or partial match to
2409    **    template_string.  The partial match must be in sequence starting
2410    **    at index 0.
2411  */
2412 int
2413 subset_compare (char *string_to_compare, char *template_string)
2414 {
2415   int match;
2416   if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2417       && strlen (string_to_compare) <= strlen (template_string))
2418     match =
2419       (strncmp
2420        (template_string, string_to_compare, strlen (string_to_compare)) == 0);
2421   else
2422     match = 0;
2423   return match;
2424 }
2425
2426 static void
2427 pagination_on_command (char *arg, int from_tty)
2428 {
2429   pagination_enabled = 1;
2430 }
2431
2432 static void
2433 pagination_off_command (char *arg, int from_tty)
2434 {
2435   pagination_enabled = 0;
2436 }
2437
2438 static void
2439 show_debug_timestamp (struct ui_file *file, int from_tty,
2440                       struct cmd_list_element *c, const char *value)
2441 {
2442   fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"), value);
2443 }
2444 \f
2445
2446 void
2447 initialize_utils (void)
2448 {
2449   struct cmd_list_element *c;
2450
2451   add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
2452 Set number of characters gdb thinks are in a line."), _("\
2453 Show number of characters gdb thinks are in a line."), NULL,
2454                             set_width_command,
2455                             show_chars_per_line,
2456                             &setlist, &showlist);
2457
2458   add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
2459 Set number of lines gdb thinks are in a page."), _("\
2460 Show number of lines gdb thinks are in a page."), NULL,
2461                             set_height_command,
2462                             show_lines_per_page,
2463                             &setlist, &showlist);
2464
2465   init_page_info ();
2466
2467   add_setshow_boolean_cmd ("demangle", class_support, &demangle, _("\
2468 Set demangling of encoded C++/ObjC names when displaying symbols."), _("\
2469 Show demangling of encoded C++/ObjC names when displaying symbols."), NULL,
2470                            NULL,
2471                            show_demangle,
2472                            &setprintlist, &showprintlist);
2473
2474   add_setshow_boolean_cmd ("pagination", class_support,
2475                            &pagination_enabled, _("\
2476 Set state of pagination."), _("\
2477 Show state of pagination."), NULL,
2478                            NULL,
2479                            show_pagination_enabled,
2480                            &setlist, &showlist);
2481
2482   if (xdb_commands)
2483     {
2484       add_com ("am", class_support, pagination_on_command,
2485                _("Enable pagination"));
2486       add_com ("sm", class_support, pagination_off_command,
2487                _("Disable pagination"));
2488     }
2489
2490   add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2491                            &sevenbit_strings, _("\
2492 Set printing of 8-bit characters in strings as \\nnn."), _("\
2493 Show printing of 8-bit characters in strings as \\nnn."), NULL,
2494                            NULL,
2495                            show_sevenbit_strings,
2496                            &setprintlist, &showprintlist);
2497
2498   add_setshow_boolean_cmd ("asm-demangle", class_support, &asm_demangle, _("\
2499 Set demangling of C++/ObjC names in disassembly listings."), _("\
2500 Show demangling of C++/ObjC names in disassembly listings."), NULL,
2501                            NULL,
2502                            show_asm_demangle,
2503                            &setprintlist, &showprintlist);
2504
2505   add_setshow_boolean_cmd ("timestamp", class_maintenance,
2506                             &debug_timestamp, _("\
2507 Set timestamping of debugging messages."), _("\
2508 Show timestamping of debugging messages."), _("\
2509 When set, debugging messages will be marked with seconds and microseconds."),
2510                            NULL,
2511                            show_debug_timestamp,
2512                            &setdebuglist, &showdebuglist);
2513 }
2514
2515 /* Machine specific function to handle SIGWINCH signal. */
2516
2517 #ifdef  SIGWINCH_HANDLER_BODY
2518 SIGWINCH_HANDLER_BODY
2519 #endif
2520 /* print routines to handle variable size regs, etc. */
2521 /* temporary storage using circular buffer */
2522 #define NUMCELLS 16
2523 #define CELLSIZE 50
2524 static char *
2525 get_cell (void)
2526 {
2527   static char buf[NUMCELLS][CELLSIZE];
2528   static int cell = 0;
2529   if (++cell >= NUMCELLS)
2530     cell = 0;
2531   return buf[cell];
2532 }
2533
2534 int
2535 strlen_paddr (void)
2536 {
2537   return (gdbarch_addr_bit (current_gdbarch) / 8 * 2);
2538 }
2539
2540 char *
2541 paddr (CORE_ADDR addr)
2542 {
2543   return phex (addr, gdbarch_addr_bit (current_gdbarch) / 8);
2544 }
2545
2546 char *
2547 paddr_nz (CORE_ADDR addr)
2548 {
2549   return phex_nz (addr, gdbarch_addr_bit (current_gdbarch) / 8);
2550 }
2551
2552 const char *
2553 paddress (CORE_ADDR addr)
2554 {
2555   /* Truncate address to the size of a target address, avoiding shifts
2556      larger or equal than the width of a CORE_ADDR.  The local
2557      variable ADDR_BIT stops the compiler reporting a shift overflow
2558      when it won't occur. */
2559   /* NOTE: This assumes that the significant address information is
2560      kept in the least significant bits of ADDR - the upper bits were
2561      either zero or sign extended.  Should gdbarch_address_to_pointer or
2562      some ADDRESS_TO_PRINTABLE() be used to do the conversion?  */
2563
2564   int addr_bit = gdbarch_addr_bit (current_gdbarch);
2565
2566   if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2567     addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2568   return hex_string (addr);
2569 }
2570
2571 static char *
2572 decimal2str (char *sign, ULONGEST addr, int width)
2573 {
2574   /* Steal code from valprint.c:print_decimal().  Should this worry
2575      about the real size of addr as the above does? */
2576   unsigned long temp[3];
2577   char *str = get_cell ();
2578
2579   int i = 0;
2580   do
2581     {
2582       temp[i] = addr % (1000 * 1000 * 1000);
2583       addr /= (1000 * 1000 * 1000);
2584       i++;
2585       width -= 9;
2586     }
2587   while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2588
2589   width += 9;
2590   if (width < 0)
2591     width = 0;
2592
2593   switch (i)
2594     {
2595     case 1:
2596       xsnprintf (str, CELLSIZE, "%s%0*lu", sign, width, temp[0]);
2597       break;
2598     case 2:
2599       xsnprintf (str, CELLSIZE, "%s%0*lu%09lu", sign, width,
2600                  temp[1], temp[0]);
2601       break;
2602     case 3:
2603       xsnprintf (str, CELLSIZE, "%s%0*lu%09lu%09lu", sign, width,
2604                  temp[2], temp[1], temp[0]);
2605       break;
2606     default:
2607       internal_error (__FILE__, __LINE__,
2608                       _("failed internal consistency check"));
2609     }
2610
2611   return str;
2612 }
2613
2614 static char *
2615 octal2str (ULONGEST addr, int width)
2616 {
2617   unsigned long temp[3];
2618   char *str = get_cell ();
2619
2620   int i = 0;
2621   do
2622     {
2623       temp[i] = addr % (0100000 * 0100000);
2624       addr /= (0100000 * 0100000);
2625       i++;
2626       width -= 10;
2627     }
2628   while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2629
2630   width += 10;
2631   if (width < 0)
2632     width = 0;
2633
2634   switch (i)
2635     {
2636     case 1:
2637       if (temp[0] == 0)
2638         xsnprintf (str, CELLSIZE, "%*o", width, 0);
2639       else
2640         xsnprintf (str, CELLSIZE, "0%0*lo", width, temp[0]);
2641       break;
2642     case 2:
2643       xsnprintf (str, CELLSIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
2644       break;
2645     case 3:
2646       xsnprintf (str, CELLSIZE, "0%0*lo%010lo%010lo", width,
2647                  temp[2], temp[1], temp[0]);
2648       break;
2649     default:
2650       internal_error (__FILE__, __LINE__,
2651                       _("failed internal consistency check"));
2652     }
2653
2654   return str;
2655 }
2656
2657 char *
2658 paddr_u (CORE_ADDR addr)
2659 {
2660   return decimal2str ("", addr, 0);
2661 }
2662
2663 char *
2664 paddr_d (LONGEST addr)
2665 {
2666   if (addr < 0)
2667     return decimal2str ("-", -addr, 0);
2668   else
2669     return decimal2str ("", addr, 0);
2670 }
2671
2672 /* Eliminate warning from compiler on 32-bit systems.  */
2673 static int thirty_two = 32;
2674
2675 char *
2676 phex (ULONGEST l, int sizeof_l)
2677 {
2678   char *str;
2679
2680   switch (sizeof_l)
2681     {
2682     case 8:
2683       str = get_cell ();
2684       xsnprintf (str, CELLSIZE, "%08lx%08lx",
2685                  (unsigned long) (l >> thirty_two),
2686                  (unsigned long) (l & 0xffffffff));
2687       break;
2688     case 4:
2689       str = get_cell ();
2690       xsnprintf (str, CELLSIZE, "%08lx", (unsigned long) l);
2691       break;
2692     case 2:
2693       str = get_cell ();
2694       xsnprintf (str, CELLSIZE, "%04x", (unsigned short) (l & 0xffff));
2695       break;
2696     default:
2697       str = phex (l, sizeof (l));
2698       break;
2699     }
2700
2701   return str;
2702 }
2703
2704 char *
2705 phex_nz (ULONGEST l, int sizeof_l)
2706 {
2707   char *str;
2708
2709   switch (sizeof_l)
2710     {
2711     case 8:
2712       {
2713         unsigned long high = (unsigned long) (l >> thirty_two);
2714         str = get_cell ();
2715         if (high == 0)
2716           xsnprintf (str, CELLSIZE, "%lx",
2717                      (unsigned long) (l & 0xffffffff));
2718         else
2719           xsnprintf (str, CELLSIZE, "%lx%08lx", high,
2720                      (unsigned long) (l & 0xffffffff));
2721         break;
2722       }
2723     case 4:
2724       str = get_cell ();
2725       xsnprintf (str, CELLSIZE, "%lx", (unsigned long) l);
2726       break;
2727     case 2:
2728       str = get_cell ();
2729       xsnprintf (str, CELLSIZE, "%x", (unsigned short) (l & 0xffff));
2730       break;
2731     default:
2732       str = phex_nz (l, sizeof (l));
2733       break;
2734     }
2735
2736   return str;
2737 }
2738
2739 /* Converts a LONGEST to a C-format hexadecimal literal and stores it
2740    in a static string.  Returns a pointer to this string.  */
2741 char *
2742 hex_string (LONGEST num)
2743 {
2744   char *result = get_cell ();
2745   xsnprintf (result, CELLSIZE, "0x%s", phex_nz (num, sizeof (num)));
2746   return result;
2747 }
2748
2749 /* Converts a LONGEST number to a C-format hexadecimal literal and
2750    stores it in a static string.  Returns a pointer to this string
2751    that is valid until the next call.  The number is padded on the
2752    left with 0s to at least WIDTH characters.  */
2753 char *
2754 hex_string_custom (LONGEST num, int width)
2755 {
2756   char *result = get_cell ();
2757   char *result_end = result + CELLSIZE - 1;
2758   const char *hex = phex_nz (num, sizeof (num));
2759   int hex_len = strlen (hex);
2760
2761   if (hex_len > width)
2762     width = hex_len;
2763   if (width + 2 >= CELLSIZE)
2764     internal_error (__FILE__, __LINE__,
2765                     _("hex_string_custom: insufficient space to store result"));
2766
2767   strcpy (result_end - width - 2, "0x");
2768   memset (result_end - width, '0', width);
2769   strcpy (result_end - hex_len, hex);
2770   return result_end - width - 2;
2771 }
2772
2773 /* Convert VAL to a numeral in the given radix.  For
2774  * radix 10, IS_SIGNED may be true, indicating a signed quantity;
2775  * otherwise VAL is interpreted as unsigned.  If WIDTH is supplied, 
2776  * it is the minimum width (0-padded if needed).  USE_C_FORMAT means
2777  * to use C format in all cases.  If it is false, then 'x' 
2778  * and 'o' formats do not include a prefix (0x or leading 0). */
2779
2780 char *
2781 int_string (LONGEST val, int radix, int is_signed, int width, 
2782             int use_c_format)
2783 {
2784   switch (radix) 
2785     {
2786     case 16:
2787       {
2788         char *result;
2789         if (width == 0)
2790           result = hex_string (val);
2791         else
2792           result = hex_string_custom (val, width);
2793         if (! use_c_format)
2794           result += 2;
2795         return result;
2796       }
2797     case 10:
2798       {
2799         if (is_signed && val < 0)
2800           return decimal2str ("-", -val, width);
2801         else
2802           return decimal2str ("", val, width);
2803       }
2804     case 8:
2805       {
2806         char *result = octal2str (val, width);
2807         if (use_c_format || val == 0)
2808           return result;
2809         else
2810           return result + 1;
2811       }
2812     default:
2813       internal_error (__FILE__, __LINE__,
2814                       _("failed internal consistency check"));
2815     }
2816 }       
2817
2818 /* Convert a CORE_ADDR into a string.  */
2819 const char *
2820 core_addr_to_string (const CORE_ADDR addr)
2821 {
2822   char *str = get_cell ();
2823   strcpy (str, "0x");
2824   strcat (str, phex (addr, sizeof (addr)));
2825   return str;
2826 }
2827
2828 const char *
2829 core_addr_to_string_nz (const CORE_ADDR addr)
2830 {
2831   char *str = get_cell ();
2832   strcpy (str, "0x");
2833   strcat (str, phex_nz (addr, sizeof (addr)));
2834   return str;
2835 }
2836
2837 /* Convert a string back into a CORE_ADDR.  */
2838 CORE_ADDR
2839 string_to_core_addr (const char *my_string)
2840 {
2841   int addr_bit = gdbarch_addr_bit (current_gdbarch);
2842   CORE_ADDR addr = 0;
2843
2844   if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2845     {
2846       /* Assume that it is in hex.  */
2847       int i;
2848       for (i = 2; my_string[i] != '\0'; i++)
2849         {
2850           if (isdigit (my_string[i]))
2851             addr = (my_string[i] - '0') + (addr * 16);
2852           else if (isxdigit (my_string[i]))
2853             addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2854           else
2855             error (_("invalid hex \"%s\""), my_string);
2856         }
2857
2858       /* Not very modular, but if the executable format expects
2859          addresses to be sign-extended, then do so if the address was
2860          specified with only 32 significant bits.  Really this should
2861          be determined by the target architecture, not by the object
2862          file.  */
2863       if (i - 2 == addr_bit / 4
2864           && exec_bfd
2865           && bfd_get_sign_extend_vma (exec_bfd))
2866         addr = (addr ^ ((CORE_ADDR) 1 << (addr_bit - 1)))
2867                - ((CORE_ADDR) 1 << (addr_bit - 1));
2868     }
2869   else
2870     {
2871       /* Assume that it is in decimal.  */
2872       int i;
2873       for (i = 0; my_string[i] != '\0'; i++)
2874         {
2875           if (isdigit (my_string[i]))
2876             addr = (my_string[i] - '0') + (addr * 10);
2877           else
2878             error (_("invalid decimal \"%s\""), my_string);
2879         }
2880     }
2881
2882   return addr;
2883 }
2884
2885 char *
2886 gdb_realpath (const char *filename)
2887 {
2888   /* Method 1: The system has a compile time upper bound on a filename
2889      path.  Use that and realpath() to canonicalize the name.  This is
2890      the most common case.  Note that, if there isn't a compile time
2891      upper bound, you want to avoid realpath() at all costs.  */
2892 #if defined(HAVE_REALPATH)
2893   {
2894 # if defined (PATH_MAX)
2895     char buf[PATH_MAX];
2896 #  define USE_REALPATH
2897 # elif defined (MAXPATHLEN)
2898     char buf[MAXPATHLEN];
2899 #  define USE_REALPATH
2900 # endif
2901 # if defined (USE_REALPATH)
2902     const char *rp = realpath (filename, buf);
2903     if (rp == NULL)
2904       rp = filename;
2905     return xstrdup (rp);
2906 # endif
2907   }
2908 #endif /* HAVE_REALPATH */
2909
2910   /* Method 2: The host system (i.e., GNU) has the function
2911      canonicalize_file_name() which malloc's a chunk of memory and
2912      returns that, use that.  */
2913 #if defined(HAVE_CANONICALIZE_FILE_NAME)
2914   {
2915     char *rp = canonicalize_file_name (filename);
2916     if (rp == NULL)
2917       return xstrdup (filename);
2918     else
2919       return rp;
2920   }
2921 #endif
2922
2923   /* FIXME: cagney/2002-11-13:
2924
2925      Method 2a: Use realpath() with a NULL buffer.  Some systems, due
2926      to the problems described in in method 3, have modified their
2927      realpath() implementation so that it will allocate a buffer when
2928      NULL is passed in.  Before this can be used, though, some sort of
2929      configure time test would need to be added.  Otherwize the code
2930      will likely core dump.  */
2931
2932   /* Method 3: Now we're getting desperate!  The system doesn't have a
2933      compile time buffer size and no alternative function.  Query the
2934      OS, using pathconf(), for the buffer limit.  Care is needed
2935      though, some systems do not limit PATH_MAX (return -1 for
2936      pathconf()) making it impossible to pass a correctly sized buffer
2937      to realpath() (it could always overflow).  On those systems, we
2938      skip this.  */
2939 #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
2940   {
2941     /* Find out the max path size.  */
2942     long path_max = pathconf ("/", _PC_PATH_MAX);
2943     if (path_max > 0)
2944       {
2945         /* PATH_MAX is bounded.  */
2946         char *buf = alloca (path_max);
2947         char *rp = realpath (filename, buf);
2948         return xstrdup (rp ? rp : filename);
2949       }
2950   }
2951 #endif
2952
2953   /* This system is a lost cause, just dup the buffer.  */
2954   return xstrdup (filename);
2955 }
2956
2957 /* Return a copy of FILENAME, with its directory prefix canonicalized
2958    by gdb_realpath.  */
2959
2960 char *
2961 xfullpath (const char *filename)
2962 {
2963   const char *base_name = lbasename (filename);
2964   char *dir_name;
2965   char *real_path;
2966   char *result;
2967
2968   /* Extract the basename of filename, and return immediately 
2969      a copy of filename if it does not contain any directory prefix. */
2970   if (base_name == filename)
2971     return xstrdup (filename);
2972
2973   dir_name = alloca ((size_t) (base_name - filename + 2));
2974   /* Allocate enough space to store the dir_name + plus one extra
2975      character sometimes needed under Windows (see below), and
2976      then the closing \000 character */
2977   strncpy (dir_name, filename, base_name - filename);
2978   dir_name[base_name - filename] = '\000';
2979
2980 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
2981   /* We need to be careful when filename is of the form 'd:foo', which
2982      is equivalent of d:./foo, which is totally different from d:/foo.  */
2983   if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
2984     {
2985       dir_name[2] = '.';
2986       dir_name[3] = '\000';
2987     }
2988 #endif
2989
2990   /* Canonicalize the directory prefix, and build the resulting
2991      filename. If the dirname realpath already contains an ending
2992      directory separator, avoid doubling it.  */
2993   real_path = gdb_realpath (dir_name);
2994   if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
2995     result = concat (real_path, base_name, (char *)NULL);
2996   else
2997     result = concat (real_path, SLASH_STRING, base_name, (char *)NULL);
2998
2999   xfree (real_path);
3000   return result;
3001 }
3002
3003
3004 /* This is the 32-bit CRC function used by the GNU separate debug
3005    facility.  An executable may contain a section named
3006    .gnu_debuglink, which holds the name of a separate executable file
3007    containing its debug info, and a checksum of that file's contents,
3008    computed using this function.  */
3009 unsigned long
3010 gnu_debuglink_crc32 (unsigned long crc, unsigned char *buf, size_t len)
3011 {
3012   static const unsigned long crc32_table[256] = {
3013     0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
3014     0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
3015     0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
3016     0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
3017     0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
3018     0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
3019     0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
3020     0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
3021     0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
3022     0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
3023     0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
3024     0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
3025     0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
3026     0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
3027     0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
3028     0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
3029     0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
3030     0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
3031     0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
3032     0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
3033     0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
3034     0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
3035     0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
3036     0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
3037     0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
3038     0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
3039     0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
3040     0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
3041     0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
3042     0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
3043     0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
3044     0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
3045     0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
3046     0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
3047     0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
3048     0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
3049     0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
3050     0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
3051     0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
3052     0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
3053     0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
3054     0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
3055     0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
3056     0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
3057     0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
3058     0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
3059     0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
3060     0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
3061     0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
3062     0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
3063     0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
3064     0x2d02ef8d
3065   };
3066   unsigned char *end;
3067
3068   crc = ~crc & 0xffffffff;
3069   for (end = buf + len; buf < end; ++buf)
3070     crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
3071   return ~crc & 0xffffffff;;
3072 }
3073
3074 ULONGEST
3075 align_up (ULONGEST v, int n)
3076 {
3077   /* Check that N is really a power of two.  */
3078   gdb_assert (n && (n & (n-1)) == 0);
3079   return (v + n - 1) & -n;
3080 }
3081
3082 ULONGEST
3083 align_down (ULONGEST v, int n)
3084 {
3085   /* Check that N is really a power of two.  */
3086   gdb_assert (n && (n & (n-1)) == 0);
3087   return (v & -n);
3088 }
3089
3090 /* Allocation function for the libiberty hash table which uses an
3091    obstack.  The obstack is passed as DATA.  */
3092
3093 void *
3094 hashtab_obstack_allocate (void *data, size_t size, size_t count)
3095 {
3096   unsigned int total = size * count;
3097   void *ptr = obstack_alloc ((struct obstack *) data, total);
3098   memset (ptr, 0, total);
3099   return ptr;
3100 }
3101
3102 /* Trivial deallocation function for the libiberty splay tree and hash
3103    table - don't deallocate anything.  Rely on later deletion of the
3104    obstack.  DATA will be the obstack, although it is not needed
3105    here.  */
3106
3107 void
3108 dummy_obstack_deallocate (void *object, void *data)
3109 {
3110   return;
3111 }
3112
3113 /* The bit offset of the highest byte in a ULONGEST, for overflow
3114    checking.  */
3115
3116 #define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
3117
3118 /* True (non-zero) iff DIGIT is a valid digit in radix BASE,
3119    where 2 <= BASE <= 36.  */
3120
3121 static int
3122 is_digit_in_base (unsigned char digit, int base)
3123 {
3124   if (!isalnum (digit))
3125     return 0;
3126   if (base <= 10)
3127     return (isdigit (digit) && digit < base + '0');
3128   else
3129     return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
3130 }
3131
3132 static int
3133 digit_to_int (unsigned char c)
3134 {
3135   if (isdigit (c))
3136     return c - '0';
3137   else
3138     return tolower (c) - 'a' + 10;
3139 }
3140
3141 /* As for strtoul, but for ULONGEST results.  */
3142
3143 ULONGEST
3144 strtoulst (const char *num, const char **trailer, int base)
3145 {
3146   unsigned int high_part;
3147   ULONGEST result;
3148   int minus = 0;
3149   int i = 0;
3150
3151   /* Skip leading whitespace.  */
3152   while (isspace (num[i]))
3153     i++;
3154
3155   /* Handle prefixes.  */
3156   if (num[i] == '+')
3157     i++;
3158   else if (num[i] == '-')
3159     {
3160       minus = 1;
3161       i++;
3162     }
3163
3164   if (base == 0 || base == 16)
3165     {
3166       if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
3167         {
3168           i += 2;
3169           if (base == 0)
3170             base = 16;
3171         }
3172     }
3173
3174   if (base == 0 && num[i] == '0')
3175     base = 8;
3176
3177   if (base == 0)
3178     base = 10;
3179
3180   if (base < 2 || base > 36)
3181     {
3182       errno = EINVAL;
3183       return 0;
3184     }
3185
3186   result = high_part = 0;
3187   for (; is_digit_in_base (num[i], base); i += 1)
3188     {
3189       result = result * base + digit_to_int (num[i]);
3190       high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
3191       result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
3192       if (high_part > 0xff)
3193         {
3194           errno = ERANGE;
3195           result = ~ (ULONGEST) 0;
3196           high_part = 0;
3197           minus = 0;
3198           break;
3199         }
3200     }
3201
3202   if (trailer != NULL)
3203     *trailer = &num[i];
3204
3205   result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
3206   if (minus)
3207     return -result;
3208   else
3209     return result;
3210 }
3211
3212 /* Simple, portable version of dirname that does not modify its
3213    argument.  */
3214
3215 char *
3216 ldirname (const char *filename)
3217 {
3218   const char *base = lbasename (filename);
3219   char *dirname;
3220
3221   while (base > filename && IS_DIR_SEPARATOR (base[-1]))
3222     --base;
3223
3224   if (base == filename)
3225     return NULL;
3226
3227   dirname = xmalloc (base - filename + 2);
3228   memcpy (dirname, filename, base - filename);
3229
3230   /* On DOS based file systems, convert "d:foo" to "d:.", so that we
3231      create "d:./bar" later instead of the (different) "d:/bar".  */
3232   if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
3233       && !IS_DIR_SEPARATOR (filename[0]))
3234     dirname[base++ - filename] = '.';
3235
3236   dirname[base - filename] = '\0';
3237   return dirname;
3238 }