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