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