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