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