xref: /openbsd-src/gnu/usr.bin/binutils/gdb/utils.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
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 (*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 
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 
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 (warning_hook)
570     (*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 (error_begin_hook)
663     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     xvasprintf (&msg, fmt, ap);
756     xasprintf (&reason, "\
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 
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 
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   xvasprintf (&ret, 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   xvasprintf (ret, format, args);
1170   va_end (args);
1171 }
1172 
1173 void
1174 xvasprintf (char **ret, const char *format, va_list ap)
1175 {
1176   int status = vasprintf (ret, format, ap);
1177   /* NULL could be returned due to a memory allocation problem; a
1178      badly format string; or something else. */
1179   if ((*ret) == NULL)
1180     internal_error (__FILE__, __LINE__,
1181 		    "vasprintf returned NULL buffer (errno %d)", errno);
1182   /* A negative status with a non-NULL buffer shouldn't never
1183      happen. But to be sure. */
1184   if (status < 0)
1185     internal_error (__FILE__, __LINE__,
1186 		    "vasprintf call failed (errno %d)", errno);
1187 }
1188 
1189 
1190 /* My replacement for the read system call.
1191    Used like `read' but keeps going if `read' returns too soon.  */
1192 
1193 int
1194 myread (int desc, char *addr, int len)
1195 {
1196   int val;
1197   int orglen = len;
1198 
1199   while (len > 0)
1200     {
1201       val = read (desc, addr, len);
1202       if (val < 0)
1203 	return val;
1204       if (val == 0)
1205 	return orglen - len;
1206       len -= val;
1207       addr += val;
1208     }
1209   return orglen;
1210 }
1211 
1212 /* Make a copy of the string at PTR with SIZE characters
1213    (and add a null character at the end in the copy).
1214    Uses malloc to get the space.  Returns the address of the copy.  */
1215 
1216 char *
1217 savestring (const char *ptr, size_t size)
1218 {
1219   char *p = (char *) xmalloc (size + 1);
1220   memcpy (p, ptr, size);
1221   p[size] = 0;
1222   return p;
1223 }
1224 
1225 char *
1226 msavestring (void *md, const char *ptr, size_t size)
1227 {
1228   char *p = (char *) xmmalloc (md, size + 1);
1229   memcpy (p, ptr, size);
1230   p[size] = 0;
1231   return p;
1232 }
1233 
1234 char *
1235 mstrsave (void *md, const char *ptr)
1236 {
1237   return (msavestring (md, ptr, strlen (ptr)));
1238 }
1239 
1240 void
1241 print_spaces (int n, struct ui_file *file)
1242 {
1243   fputs_unfiltered (n_spaces (n), file);
1244 }
1245 
1246 /* Print a host address.  */
1247 
1248 void
1249 gdb_print_host_address (const void *addr, struct ui_file *stream)
1250 {
1251 
1252   /* We could use the %p conversion specifier to fprintf if we had any
1253      way of knowing whether this host supports it.  But the following
1254      should work on the Alpha and on 32 bit machines.  */
1255 
1256   fprintf_filtered (stream, "0x%lx", (unsigned long) addr);
1257 }
1258 
1259 /* Ask user a y-or-n question and return 1 iff answer is yes.
1260    Takes three args which are given to printf to print the question.
1261    The first, a control string, should end in "? ".
1262    It should not say how to answer, because we do that.  */
1263 
1264 /* VARARGS */
1265 int
1266 query (const char *ctlstr, ...)
1267 {
1268   va_list args;
1269   int answer;
1270   int ans2;
1271   int retval;
1272 
1273   va_start (args, ctlstr);
1274 
1275   if (query_hook)
1276     {
1277       return query_hook (ctlstr, args);
1278     }
1279 
1280   /* Automatically answer "yes" if input is not from a terminal.  */
1281   if (!input_from_terminal_p ())
1282     return 1;
1283 
1284   while (1)
1285     {
1286       wrap_here ("");		/* Flush any buffered output */
1287       gdb_flush (gdb_stdout);
1288 
1289       if (annotation_level > 1)
1290 	printf_filtered ("\n\032\032pre-query\n");
1291 
1292       vfprintf_filtered (gdb_stdout, ctlstr, args);
1293       printf_filtered ("(y or n) ");
1294 
1295       if (annotation_level > 1)
1296 	printf_filtered ("\n\032\032query\n");
1297 
1298       wrap_here ("");
1299       gdb_flush (gdb_stdout);
1300 
1301       answer = fgetc (stdin);
1302       clearerr (stdin);		/* in case of C-d */
1303       if (answer == EOF)	/* C-d */
1304 	{
1305 	  retval = 1;
1306 	  break;
1307 	}
1308       /* Eat rest of input line, to EOF or newline */
1309       if (answer != '\n')
1310 	do
1311 	  {
1312 	    ans2 = fgetc (stdin);
1313 	    clearerr (stdin);
1314 	  }
1315 	while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1316 
1317       if (answer >= 'a')
1318 	answer -= 040;
1319       if (answer == 'Y')
1320 	{
1321 	  retval = 1;
1322 	  break;
1323 	}
1324       if (answer == 'N')
1325 	{
1326 	  retval = 0;
1327 	  break;
1328 	}
1329       printf_filtered ("Please answer y or n.\n");
1330     }
1331 
1332   if (annotation_level > 1)
1333     printf_filtered ("\n\032\032post-query\n");
1334   return retval;
1335 }
1336 
1337 
1338 /* This function supports the nquery() and yquery() functions.
1339    Ask user a y-or-n question and return 0 if answer is no, 1 if
1340    answer is yes, or default the answer to the specified default.
1341    DEFCHAR is either 'y' or 'n' and refers to the default answer.
1342    CTLSTR is the control string and should end in "? ".  It should
1343    not say how to answer, because we do that.
1344    ARGS are the arguments passed along with the CTLSTR argument to
1345    printf.  */
1346 
1347 static int
1348 defaulted_query (const char *ctlstr, const char defchar, va_list args)
1349 {
1350   int answer;
1351   int ans2;
1352   int retval;
1353   int def_value;
1354   char def_answer, not_def_answer;
1355   char *y_string, *n_string;
1356 
1357   /* Set up according to which answer is the default.  */
1358   if (defchar == 'y')
1359     {
1360       def_value = 1;
1361       def_answer = 'Y';
1362       not_def_answer = 'N';
1363       y_string = "[y]";
1364       n_string = "n";
1365     }
1366   else
1367     {
1368       def_value = 0;
1369       def_answer = 'N';
1370       not_def_answer = 'Y';
1371       y_string = "y";
1372       n_string = "[n]";
1373     }
1374 
1375   if (query_hook)
1376     {
1377       return query_hook (ctlstr, args);
1378     }
1379 
1380   /* Automatically answer default value if input is not from a terminal.  */
1381   if (!input_from_terminal_p ())
1382     return def_value;
1383 
1384   while (1)
1385     {
1386       wrap_here ("");		/* Flush any buffered output */
1387       gdb_flush (gdb_stdout);
1388 
1389       if (annotation_level > 1)
1390 	printf_filtered ("\n\032\032pre-%cquery\n", defchar);
1391 
1392       vfprintf_filtered (gdb_stdout, ctlstr, args);
1393       printf_filtered ("(%s or %s) ", y_string, n_string);
1394 
1395       if (annotation_level > 1)
1396 	printf_filtered ("\n\032\032%cquery\n", defchar);
1397 
1398       wrap_here ("");
1399       gdb_flush (gdb_stdout);
1400 
1401       answer = fgetc (stdin);
1402       clearerr (stdin);		/* in case of C-d */
1403       if (answer == EOF)	/* C-d */
1404 	{
1405 	  retval = def_value;
1406 	  break;
1407 	}
1408       /* Eat rest of input line, to EOF or newline */
1409       if (answer != '\n')
1410 	do
1411 	  {
1412 	    ans2 = fgetc (stdin);
1413 	    clearerr (stdin);
1414 	  }
1415 	while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1416 
1417       if (answer >= 'a')
1418 	answer -= 040;
1419       /* Check answer.  For the non-default, the user must specify
1420          the non-default explicitly.  */
1421       if (answer == not_def_answer)
1422 	{
1423 	  retval = !def_value;
1424 	  break;
1425 	}
1426       /* Otherwise, for the default, the user may either specify
1427          the required input or have it default by entering nothing.  */
1428       if (answer == def_answer || answer == '\n' ||
1429 	  answer == '\r' || answer == EOF)
1430 	{
1431 	  retval = def_value;
1432 	  break;
1433 	}
1434       /* Invalid entries are not defaulted and require another selection.  */
1435       printf_filtered ("Please answer %s or %s.\n",
1436 		       y_string, n_string);
1437     }
1438 
1439   if (annotation_level > 1)
1440     printf_filtered ("\n\032\032post-%cquery\n", defchar);
1441   return retval;
1442 }
1443 
1444 
1445 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1446    answer is yes, or 0 if answer is defaulted.
1447    Takes three args which are given to printf to print the question.
1448    The first, a control string, should end in "? ".
1449    It should not say how to answer, because we do that.  */
1450 
1451 int
1452 nquery (const char *ctlstr, ...)
1453 {
1454   va_list args;
1455 
1456   va_start (args, ctlstr);
1457   return defaulted_query (ctlstr, 'n', args);
1458   va_end (args);
1459 }
1460 
1461 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1462    answer is yes, or 1 if answer is defaulted.
1463    Takes three args which are given to printf to print the question.
1464    The first, a control string, should end in "? ".
1465    It should not say how to answer, because we do that.  */
1466 
1467 int
1468 yquery (const char *ctlstr, ...)
1469 {
1470   va_list args;
1471 
1472   va_start (args, ctlstr);
1473   return defaulted_query (ctlstr, 'y', args);
1474   va_end (args);
1475 }
1476 
1477 /* Print an error message saying that we couldn't make sense of a
1478    \^mumble sequence in a string or character constant.  START and END
1479    indicate a substring of some larger string that contains the
1480    erroneous backslash sequence, missing the initial backslash.  */
1481 static NORETURN int
1482 no_control_char_error (const char *start, const char *end)
1483 {
1484   int len = end - start;
1485   char *copy = alloca (end - start + 1);
1486 
1487   memcpy (copy, start, len);
1488   copy[len] = '\0';
1489 
1490   error ("There is no control character `\\%s' in the `%s' character set.",
1491 	 copy, target_charset ());
1492 }
1493 
1494 /* Parse a C escape sequence.  STRING_PTR points to a variable
1495    containing a pointer to the string to parse.  That pointer
1496    should point to the character after the \.  That pointer
1497    is updated past the characters we use.  The value of the
1498    escape sequence is returned.
1499 
1500    A negative value means the sequence \ newline was seen,
1501    which is supposed to be equivalent to nothing at all.
1502 
1503    If \ is followed by a null character, we return a negative
1504    value and leave the string pointer pointing at the null character.
1505 
1506    If \ is followed by 000, we return 0 and leave the string pointer
1507    after the zeros.  A value of 0 does not mean end of string.  */
1508 
1509 int
1510 parse_escape (char **string_ptr)
1511 {
1512   int target_char;
1513   int c = *(*string_ptr)++;
1514   if (c_parse_backslash (c, &target_char))
1515     return target_char;
1516   else
1517     switch (c)
1518       {
1519       case '\n':
1520 	return -2;
1521       case 0:
1522 	(*string_ptr)--;
1523 	return 0;
1524       case '^':
1525 	{
1526 	  /* Remember where this escape sequence started, for reporting
1527 	     errors.  */
1528 	  char *sequence_start_pos = *string_ptr - 1;
1529 
1530 	  c = *(*string_ptr)++;
1531 
1532 	  if (c == '?')
1533 	    {
1534 	      /* XXXCHARSET: What is `delete' in the host character set?  */
1535 	      c = 0177;
1536 
1537 	      if (!host_char_to_target (c, &target_char))
1538 		error ("There is no character corresponding to `Delete' "
1539 		       "in the target character set `%s'.", host_charset ());
1540 
1541 	      return target_char;
1542 	    }
1543 	  else if (c == '\\')
1544 	    target_char = parse_escape (string_ptr);
1545 	  else
1546 	    {
1547 	      if (!host_char_to_target (c, &target_char))
1548 		no_control_char_error (sequence_start_pos, *string_ptr);
1549 	    }
1550 
1551 	  /* Now target_char is something like `c', and we want to find
1552 	     its control-character equivalent.  */
1553 	  if (!target_char_to_control_char (target_char, &target_char))
1554 	    no_control_char_error (sequence_start_pos, *string_ptr);
1555 
1556 	  return target_char;
1557 	}
1558 
1559 	/* XXXCHARSET: we need to use isdigit and value-of-digit
1560 	   methods of the host character set here.  */
1561 
1562       case '0':
1563       case '1':
1564       case '2':
1565       case '3':
1566       case '4':
1567       case '5':
1568       case '6':
1569       case '7':
1570 	{
1571 	  int i = c - '0';
1572 	  int count = 0;
1573 	  while (++count < 3)
1574 	    {
1575 	      c = (**string_ptr);
1576 	      if (c >= '0' && c <= '7')
1577 		{
1578 		  (*string_ptr)++;
1579 		  i *= 8;
1580 		  i += c - '0';
1581 		}
1582 	      else
1583 		{
1584 		  break;
1585 		}
1586 	    }
1587 	  return i;
1588 	}
1589       default:
1590 	if (!host_char_to_target (c, &target_char))
1591 	  error
1592 	    ("The escape sequence `\%c' is equivalent to plain `%c', which"
1593 	     " has no equivalent\n" "in the `%s' character set.", c, c,
1594 	     target_charset ());
1595 	return target_char;
1596       }
1597 }
1598 
1599 /* Print the character C on STREAM as part of the contents of a literal
1600    string whose delimiter is QUOTER.  Note that this routine should only
1601    be call for printing things which are independent of the language
1602    of the program being debugged. */
1603 
1604 static void
1605 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1606 	   void (*do_fprintf) (struct ui_file *, const char *, ...),
1607 	   struct ui_file *stream, int quoter)
1608 {
1609 
1610   c &= 0xFF;			/* Avoid sign bit follies */
1611 
1612   if (c < 0x20 ||		/* Low control chars */
1613       (c >= 0x7F && c < 0xA0) ||	/* DEL, High controls */
1614       (sevenbit_strings && c >= 0x80))
1615     {				/* high order bit set */
1616       switch (c)
1617 	{
1618 	case '\n':
1619 	  do_fputs ("\\n", stream);
1620 	  break;
1621 	case '\b':
1622 	  do_fputs ("\\b", stream);
1623 	  break;
1624 	case '\t':
1625 	  do_fputs ("\\t", stream);
1626 	  break;
1627 	case '\f':
1628 	  do_fputs ("\\f", stream);
1629 	  break;
1630 	case '\r':
1631 	  do_fputs ("\\r", stream);
1632 	  break;
1633 	case '\033':
1634 	  do_fputs ("\\e", stream);
1635 	  break;
1636 	case '\007':
1637 	  do_fputs ("\\a", stream);
1638 	  break;
1639 	default:
1640 	  do_fprintf (stream, "\\%.3o", (unsigned int) c);
1641 	  break;
1642 	}
1643     }
1644   else
1645     {
1646       if (c == '\\' || c == quoter)
1647 	do_fputs ("\\", stream);
1648       do_fprintf (stream, "%c", c);
1649     }
1650 }
1651 
1652 /* Print the character C on STREAM as part of the contents of a
1653    literal string whose delimiter is QUOTER.  Note that these routines
1654    should only be call for printing things which are independent of
1655    the language of the program being debugged. */
1656 
1657 void
1658 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1659 {
1660   while (*str)
1661     printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1662 }
1663 
1664 void
1665 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1666 {
1667   while (*str)
1668     printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1669 }
1670 
1671 void
1672 fputstrn_unfiltered (const char *str, int n, int quoter,
1673 		     struct ui_file *stream)
1674 {
1675   int i;
1676   for (i = 0; i < n; i++)
1677     printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1678 }
1679 
1680 
1681 /* Number of lines per page or UINT_MAX if paging is disabled.  */
1682 static unsigned int lines_per_page;
1683 
1684 /* Number of chars per line or UINT_MAX if line folding is disabled.  */
1685 static unsigned int chars_per_line;
1686 
1687 /* Current count of lines printed on this page, chars on this line.  */
1688 static unsigned int lines_printed, chars_printed;
1689 
1690 /* Buffer and start column of buffered text, for doing smarter word-
1691    wrapping.  When someone calls wrap_here(), we start buffering output
1692    that comes through fputs_filtered().  If we see a newline, we just
1693    spit it out and forget about the wrap_here().  If we see another
1694    wrap_here(), we spit it out and remember the newer one.  If we see
1695    the end of the line, we spit out a newline, the indent, and then
1696    the buffered output.  */
1697 
1698 /* Malloc'd buffer with chars_per_line+2 bytes.  Contains characters which
1699    are waiting to be output (they have already been counted in chars_printed).
1700    When wrap_buffer[0] is null, the buffer is empty.  */
1701 static char *wrap_buffer;
1702 
1703 /* Pointer in wrap_buffer to the next character to fill.  */
1704 static char *wrap_pointer;
1705 
1706 /* String to indent by if the wrap occurs.  Must not be NULL if wrap_column
1707    is non-zero.  */
1708 static char *wrap_indent;
1709 
1710 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1711    is not in effect.  */
1712 static int wrap_column;
1713 
1714 
1715 /* Inialize the number of lines per page and chars per line.  */
1716 
1717 void
1718 init_page_info (void)
1719 {
1720 #if defined(TUI)
1721   if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
1722 #endif
1723     {
1724       int rows, cols;
1725 
1726 #if defined(__GO32__)
1727       rows = ScreenRows ();
1728       cols = ScreenCols ();
1729       lines_per_page = rows;
1730       chars_per_line = cols;
1731 #else
1732       /* Make sure Readline has initialized its terminal settings.  */
1733       rl_reset_terminal (NULL);
1734 
1735       /* Get the screen size from Readline.  */
1736       rl_get_screen_size (&rows, &cols);
1737       lines_per_page = rows;
1738       chars_per_line = cols;
1739 
1740       /* Readline should have fetched the termcap entry for us.  */
1741       if (tgetnum ("li") < 0 || getenv ("EMACS"))
1742 	{
1743 	  /* The number of lines per page is not mentioned in the
1744 	     terminal description.  This probably means that paging is
1745 	     not useful (e.g. emacs shell window), so disable paging.  */
1746 	  lines_per_page = UINT_MAX;
1747 	}
1748 
1749       /* FIXME: Get rid of this junk.  */
1750 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1751       SIGWINCH_HANDLER (SIGWINCH);
1752 #endif
1753 
1754       /* If the output is not a terminal, don't paginate it.  */
1755       if (!ui_file_isatty (gdb_stdout))
1756 	lines_per_page = UINT_MAX;
1757 #endif
1758     }
1759 
1760   set_screen_size ();
1761   set_width ();
1762 }
1763 
1764 /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE.  */
1765 
1766 static void
1767 set_screen_size (void)
1768 {
1769   int rows = lines_per_page;
1770   int cols = chars_per_line;
1771 
1772   if (rows <= 0)
1773     rows = INT_MAX;
1774 
1775   if (cols <= 0)
1776     rl_get_screen_size (NULL, &cols);
1777 
1778   /* Update Readline's idea of the terminal size.  */
1779   rl_set_screen_size (rows, cols);
1780 }
1781 
1782 /* Reinitialize WRAP_BUFFER according to the current value of
1783    CHARS_PER_LINE.  */
1784 
1785 static void
1786 set_width (void)
1787 {
1788   if (chars_per_line == 0)
1789     init_page_info ();
1790 
1791   if (!wrap_buffer)
1792     {
1793       wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1794       wrap_buffer[0] = '\0';
1795     }
1796   else
1797     wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1798   wrap_pointer = wrap_buffer;	/* Start it at the beginning.  */
1799 }
1800 
1801 static void
1802 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1803 {
1804   set_screen_size ();
1805   set_width ();
1806 }
1807 
1808 static void
1809 set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1810 {
1811   set_screen_size ();
1812 }
1813 
1814 /* Wait, so the user can read what's on the screen.  Prompt the user
1815    to continue by pressing RETURN.  */
1816 
1817 static void
1818 prompt_for_continue (void)
1819 {
1820   char *ignore;
1821   char cont_prompt[120];
1822 
1823   if (annotation_level > 1)
1824     printf_unfiltered ("\n\032\032pre-prompt-for-continue\n");
1825 
1826   strcpy (cont_prompt,
1827 	  "---Type <return> to continue, or q <return> to quit---");
1828   if (annotation_level > 1)
1829     strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1830 
1831   /* We must do this *before* we call gdb_readline, else it will eventually
1832      call us -- thinking that we're trying to print beyond the end of the
1833      screen.  */
1834   reinitialize_more_filter ();
1835 
1836   immediate_quit++;
1837   /* On a real operating system, the user can quit with SIGINT.
1838      But not on GO32.
1839 
1840      'q' is provided on all systems so users don't have to change habits
1841      from system to system, and because telling them what to do in
1842      the prompt is more user-friendly than expecting them to think of
1843      SIGINT.  */
1844   /* Call readline, not gdb_readline, because GO32 readline handles control-C
1845      whereas control-C to gdb_readline will cause the user to get dumped
1846      out to DOS.  */
1847   ignore = gdb_readline_wrapper (cont_prompt);
1848 
1849   if (annotation_level > 1)
1850     printf_unfiltered ("\n\032\032post-prompt-for-continue\n");
1851 
1852   if (ignore)
1853     {
1854       char *p = ignore;
1855       while (*p == ' ' || *p == '\t')
1856 	++p;
1857       if (p[0] == 'q')
1858 	{
1859 	  if (!event_loop_p)
1860 	    request_quit (SIGINT);
1861 	  else
1862 	    async_request_quit (0);
1863 	}
1864       xfree (ignore);
1865     }
1866   immediate_quit--;
1867 
1868   /* Now we have to do this again, so that GDB will know that it doesn't
1869      need to save the ---Type <return>--- line at the top of the screen.  */
1870   reinitialize_more_filter ();
1871 
1872   dont_repeat ();		/* Forget prev cmd -- CR won't repeat it. */
1873 }
1874 
1875 /* Reinitialize filter; ie. tell it to reset to original values.  */
1876 
1877 void
1878 reinitialize_more_filter (void)
1879 {
1880   lines_printed = 0;
1881   chars_printed = 0;
1882 }
1883 
1884 /* Indicate that if the next sequence of characters overflows the line,
1885    a newline should be inserted here rather than when it hits the end.
1886    If INDENT is non-null, it is a string to be printed to indent the
1887    wrapped part on the next line.  INDENT must remain accessible until
1888    the next call to wrap_here() or until a newline is printed through
1889    fputs_filtered().
1890 
1891    If the line is already overfull, we immediately print a newline and
1892    the indentation, and disable further wrapping.
1893 
1894    If we don't know the width of lines, but we know the page height,
1895    we must not wrap words, but should still keep track of newlines
1896    that were explicitly printed.
1897 
1898    INDENT should not contain tabs, as that will mess up the char count
1899    on the next line.  FIXME.
1900 
1901    This routine is guaranteed to force out any output which has been
1902    squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1903    used to force out output from the wrap_buffer.  */
1904 
1905 void
1906 wrap_here (char *indent)
1907 {
1908   /* This should have been allocated, but be paranoid anyway. */
1909   if (!wrap_buffer)
1910     internal_error (__FILE__, __LINE__, "failed internal consistency check");
1911 
1912   if (wrap_buffer[0])
1913     {
1914       *wrap_pointer = '\0';
1915       fputs_unfiltered (wrap_buffer, gdb_stdout);
1916     }
1917   wrap_pointer = wrap_buffer;
1918   wrap_buffer[0] = '\0';
1919   if (chars_per_line == UINT_MAX)	/* No line overflow checking */
1920     {
1921       wrap_column = 0;
1922     }
1923   else if (chars_printed >= chars_per_line)
1924     {
1925       puts_filtered ("\n");
1926       if (indent != NULL)
1927 	puts_filtered (indent);
1928       wrap_column = 0;
1929     }
1930   else
1931     {
1932       wrap_column = chars_printed;
1933       if (indent == NULL)
1934 	wrap_indent = "";
1935       else
1936 	wrap_indent = indent;
1937     }
1938 }
1939 
1940 /* Print input string to gdb_stdout, filtered, with wrap,
1941    arranging strings in columns of n chars. String can be
1942    right or left justified in the column.  Never prints
1943    trailing spaces.  String should never be longer than
1944    width.  FIXME: this could be useful for the EXAMINE
1945    command, which currently doesn't tabulate very well */
1946 
1947 void
1948 puts_filtered_tabular (char *string, int width, int right)
1949 {
1950   int spaces = 0;
1951   int stringlen;
1952   char *spacebuf;
1953 
1954   gdb_assert (chars_per_line > 0);
1955   if (chars_per_line == UINT_MAX)
1956     {
1957       fputs_filtered (string, gdb_stdout);
1958       fputs_filtered ("\n", gdb_stdout);
1959       return;
1960     }
1961 
1962   if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1963     fputs_filtered ("\n", gdb_stdout);
1964 
1965   if (width >= chars_per_line)
1966     width = chars_per_line - 1;
1967 
1968   stringlen = strlen (string);
1969 
1970   if (chars_printed > 0)
1971     spaces = width - (chars_printed - 1) % width - 1;
1972   if (right)
1973     spaces += width - stringlen;
1974 
1975   spacebuf = alloca (spaces + 1);
1976   spacebuf[spaces] = '\0';
1977   while (spaces--)
1978     spacebuf[spaces] = ' ';
1979 
1980   fputs_filtered (spacebuf, gdb_stdout);
1981   fputs_filtered (string, gdb_stdout);
1982 }
1983 
1984 
1985 /* Ensure that whatever gets printed next, using the filtered output
1986    commands, starts at the beginning of the line.  I.E. if there is
1987    any pending output for the current line, flush it and start a new
1988    line.  Otherwise do nothing. */
1989 
1990 void
1991 begin_line (void)
1992 {
1993   if (chars_printed > 0)
1994     {
1995       puts_filtered ("\n");
1996     }
1997 }
1998 
1999 
2000 /* Like fputs but if FILTER is true, pause after every screenful.
2001 
2002    Regardless of FILTER can wrap at points other than the final
2003    character of a line.
2004 
2005    Unlike fputs, fputs_maybe_filtered does not return a value.
2006    It is OK for LINEBUFFER to be NULL, in which case just don't print
2007    anything.
2008 
2009    Note that a longjmp to top level may occur in this routine (only if
2010    FILTER is true) (since prompt_for_continue may do so) so this
2011    routine should not be called when cleanups are not in place.  */
2012 
2013 static void
2014 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
2015 		      int filter)
2016 {
2017   const char *lineptr;
2018 
2019   if (linebuffer == 0)
2020     return;
2021 
2022   /* Don't do any filtering if it is disabled.  */
2023   if ((stream != gdb_stdout) || !pagination_enabled
2024       || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
2025     {
2026       fputs_unfiltered (linebuffer, stream);
2027       return;
2028     }
2029 
2030   /* Go through and output each character.  Show line extension
2031      when this is necessary; prompt user for new page when this is
2032      necessary.  */
2033 
2034   lineptr = linebuffer;
2035   while (*lineptr)
2036     {
2037       /* Possible new page.  */
2038       if (filter && (lines_printed >= lines_per_page - 1))
2039 	prompt_for_continue ();
2040 
2041       while (*lineptr && *lineptr != '\n')
2042 	{
2043 	  /* Print a single line.  */
2044 	  if (*lineptr == '\t')
2045 	    {
2046 	      if (wrap_column)
2047 		*wrap_pointer++ = '\t';
2048 	      else
2049 		fputc_unfiltered ('\t', stream);
2050 	      /* Shifting right by 3 produces the number of tab stops
2051 	         we have already passed, and then adding one and
2052 	         shifting left 3 advances to the next tab stop.  */
2053 	      chars_printed = ((chars_printed >> 3) + 1) << 3;
2054 	      lineptr++;
2055 	    }
2056 	  else
2057 	    {
2058 	      if (wrap_column)
2059 		*wrap_pointer++ = *lineptr;
2060 	      else
2061 		fputc_unfiltered (*lineptr, stream);
2062 	      chars_printed++;
2063 	      lineptr++;
2064 	    }
2065 
2066 	  if (chars_printed >= chars_per_line)
2067 	    {
2068 	      unsigned int save_chars = chars_printed;
2069 
2070 	      chars_printed = 0;
2071 	      lines_printed++;
2072 	      /* If we aren't actually wrapping, don't output newline --
2073 	         if chars_per_line is right, we probably just overflowed
2074 	         anyway; if it's wrong, let us keep going.  */
2075 	      if (wrap_column)
2076 		fputc_unfiltered ('\n', stream);
2077 
2078 	      /* Possible new page.  */
2079 	      if (lines_printed >= lines_per_page - 1)
2080 		prompt_for_continue ();
2081 
2082 	      /* Now output indentation and wrapped string */
2083 	      if (wrap_column)
2084 		{
2085 		  fputs_unfiltered (wrap_indent, stream);
2086 		  *wrap_pointer = '\0';	/* Null-terminate saved stuff */
2087 		  fputs_unfiltered (wrap_buffer, stream);	/* and eject it */
2088 		  /* FIXME, this strlen is what prevents wrap_indent from
2089 		     containing tabs.  However, if we recurse to print it
2090 		     and count its chars, we risk trouble if wrap_indent is
2091 		     longer than (the user settable) chars_per_line.
2092 		     Note also that this can set chars_printed > chars_per_line
2093 		     if we are printing a long string.  */
2094 		  chars_printed = strlen (wrap_indent)
2095 		    + (save_chars - wrap_column);
2096 		  wrap_pointer = wrap_buffer;	/* Reset buffer */
2097 		  wrap_buffer[0] = '\0';
2098 		  wrap_column = 0;	/* And disable fancy wrap */
2099 		}
2100 	    }
2101 	}
2102 
2103       if (*lineptr == '\n')
2104 	{
2105 	  chars_printed = 0;
2106 	  wrap_here ((char *) 0);	/* Spit out chars, cancel further wraps */
2107 	  lines_printed++;
2108 	  fputc_unfiltered ('\n', stream);
2109 	  lineptr++;
2110 	}
2111     }
2112 }
2113 
2114 void
2115 fputs_filtered (const char *linebuffer, struct ui_file *stream)
2116 {
2117   fputs_maybe_filtered (linebuffer, stream, 1);
2118 }
2119 
2120 int
2121 putchar_unfiltered (int c)
2122 {
2123   char buf = c;
2124   ui_file_write (gdb_stdout, &buf, 1);
2125   return c;
2126 }
2127 
2128 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2129    May return nonlocally.  */
2130 
2131 int
2132 putchar_filtered (int c)
2133 {
2134   return fputc_filtered (c, gdb_stdout);
2135 }
2136 
2137 int
2138 fputc_unfiltered (int c, struct ui_file *stream)
2139 {
2140   char buf = c;
2141   ui_file_write (stream, &buf, 1);
2142   return c;
2143 }
2144 
2145 int
2146 fputc_filtered (int c, struct ui_file *stream)
2147 {
2148   char buf[2];
2149 
2150   buf[0] = c;
2151   buf[1] = 0;
2152   fputs_filtered (buf, stream);
2153   return c;
2154 }
2155 
2156 /* puts_debug is like fputs_unfiltered, except it prints special
2157    characters in printable fashion.  */
2158 
2159 void
2160 puts_debug (char *prefix, char *string, char *suffix)
2161 {
2162   int ch;
2163 
2164   /* Print prefix and suffix after each line.  */
2165   static int new_line = 1;
2166   static int return_p = 0;
2167   static char *prev_prefix = "";
2168   static char *prev_suffix = "";
2169 
2170   if (*string == '\n')
2171     return_p = 0;
2172 
2173   /* If the prefix is changing, print the previous suffix, a new line,
2174      and the new prefix.  */
2175   if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
2176     {
2177       fputs_unfiltered (prev_suffix, gdb_stdlog);
2178       fputs_unfiltered ("\n", gdb_stdlog);
2179       fputs_unfiltered (prefix, gdb_stdlog);
2180     }
2181 
2182   /* Print prefix if we printed a newline during the previous call.  */
2183   if (new_line)
2184     {
2185       new_line = 0;
2186       fputs_unfiltered (prefix, gdb_stdlog);
2187     }
2188 
2189   prev_prefix = prefix;
2190   prev_suffix = suffix;
2191 
2192   /* Output characters in a printable format.  */
2193   while ((ch = *string++) != '\0')
2194     {
2195       switch (ch)
2196 	{
2197 	default:
2198 	  if (isprint (ch))
2199 	    fputc_unfiltered (ch, gdb_stdlog);
2200 
2201 	  else
2202 	    fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
2203 	  break;
2204 
2205 	case '\\':
2206 	  fputs_unfiltered ("\\\\", gdb_stdlog);
2207 	  break;
2208 	case '\b':
2209 	  fputs_unfiltered ("\\b", gdb_stdlog);
2210 	  break;
2211 	case '\f':
2212 	  fputs_unfiltered ("\\f", gdb_stdlog);
2213 	  break;
2214 	case '\n':
2215 	  new_line = 1;
2216 	  fputs_unfiltered ("\\n", gdb_stdlog);
2217 	  break;
2218 	case '\r':
2219 	  fputs_unfiltered ("\\r", gdb_stdlog);
2220 	  break;
2221 	case '\t':
2222 	  fputs_unfiltered ("\\t", gdb_stdlog);
2223 	  break;
2224 	case '\v':
2225 	  fputs_unfiltered ("\\v", gdb_stdlog);
2226 	  break;
2227 	}
2228 
2229       return_p = ch == '\r';
2230     }
2231 
2232   /* Print suffix if we printed a newline.  */
2233   if (new_line)
2234     {
2235       fputs_unfiltered (suffix, gdb_stdlog);
2236       fputs_unfiltered ("\n", gdb_stdlog);
2237     }
2238 }
2239 
2240 
2241 /* Print a variable number of ARGS using format FORMAT.  If this
2242    information is going to put the amount written (since the last call
2243    to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2244    call prompt_for_continue to get the users permision to continue.
2245 
2246    Unlike fprintf, this function does not return a value.
2247 
2248    We implement three variants, vfprintf (takes a vararg list and stream),
2249    fprintf (takes a stream to write on), and printf (the usual).
2250 
2251    Note also that a longjmp to top level may occur in this routine
2252    (since prompt_for_continue may do so) so this routine should not be
2253    called when cleanups are not in place.  */
2254 
2255 static void
2256 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2257 			 va_list args, int filter)
2258 {
2259   char *linebuffer;
2260   struct cleanup *old_cleanups;
2261 
2262   xvasprintf (&linebuffer, format, args);
2263   old_cleanups = make_cleanup (xfree, linebuffer);
2264   fputs_maybe_filtered (linebuffer, stream, filter);
2265   do_cleanups (old_cleanups);
2266 }
2267 
2268 
2269 void
2270 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
2271 {
2272   vfprintf_maybe_filtered (stream, format, args, 1);
2273 }
2274 
2275 void
2276 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
2277 {
2278   char *linebuffer;
2279   struct cleanup *old_cleanups;
2280 
2281   xvasprintf (&linebuffer, format, args);
2282   old_cleanups = make_cleanup (xfree, linebuffer);
2283   fputs_unfiltered (linebuffer, stream);
2284   do_cleanups (old_cleanups);
2285 }
2286 
2287 void
2288 vprintf_filtered (const char *format, va_list args)
2289 {
2290   vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2291 }
2292 
2293 void
2294 vprintf_unfiltered (const char *format, va_list args)
2295 {
2296   vfprintf_unfiltered (gdb_stdout, format, args);
2297 }
2298 
2299 void
2300 fprintf_filtered (struct ui_file *stream, const char *format, ...)
2301 {
2302   va_list args;
2303   va_start (args, format);
2304   vfprintf_filtered (stream, format, args);
2305   va_end (args);
2306 }
2307 
2308 void
2309 fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
2310 {
2311   va_list args;
2312   va_start (args, format);
2313   vfprintf_unfiltered (stream, format, args);
2314   va_end (args);
2315 }
2316 
2317 /* Like fprintf_filtered, but prints its result indented.
2318    Called as fprintfi_filtered (spaces, stream, format, ...);  */
2319 
2320 void
2321 fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2322 		   ...)
2323 {
2324   va_list args;
2325   va_start (args, format);
2326   print_spaces_filtered (spaces, stream);
2327 
2328   vfprintf_filtered (stream, format, args);
2329   va_end (args);
2330 }
2331 
2332 
2333 void
2334 printf_filtered (const char *format, ...)
2335 {
2336   va_list args;
2337   va_start (args, format);
2338   vfprintf_filtered (gdb_stdout, format, args);
2339   va_end (args);
2340 }
2341 
2342 
2343 void
2344 printf_unfiltered (const char *format, ...)
2345 {
2346   va_list args;
2347   va_start (args, format);
2348   vfprintf_unfiltered (gdb_stdout, format, args);
2349   va_end (args);
2350 }
2351 
2352 /* Like printf_filtered, but prints it's result indented.
2353    Called as printfi_filtered (spaces, format, ...);  */
2354 
2355 void
2356 printfi_filtered (int spaces, const char *format, ...)
2357 {
2358   va_list args;
2359   va_start (args, format);
2360   print_spaces_filtered (spaces, gdb_stdout);
2361   vfprintf_filtered (gdb_stdout, format, args);
2362   va_end (args);
2363 }
2364 
2365 /* Easy -- but watch out!
2366 
2367    This routine is *not* a replacement for puts()!  puts() appends a newline.
2368    This one doesn't, and had better not!  */
2369 
2370 void
2371 puts_filtered (const char *string)
2372 {
2373   fputs_filtered (string, gdb_stdout);
2374 }
2375 
2376 void
2377 puts_unfiltered (const char *string)
2378 {
2379   fputs_unfiltered (string, gdb_stdout);
2380 }
2381 
2382 /* Return a pointer to N spaces and a null.  The pointer is good
2383    until the next call to here.  */
2384 char *
2385 n_spaces (int n)
2386 {
2387   char *t;
2388   static char *spaces = 0;
2389   static int max_spaces = -1;
2390 
2391   if (n > max_spaces)
2392     {
2393       if (spaces)
2394 	xfree (spaces);
2395       spaces = (char *) xmalloc (n + 1);
2396       for (t = spaces + n; t != spaces;)
2397 	*--t = ' ';
2398       spaces[n] = '\0';
2399       max_spaces = n;
2400     }
2401 
2402   return spaces + max_spaces - n;
2403 }
2404 
2405 /* Print N spaces.  */
2406 void
2407 print_spaces_filtered (int n, struct ui_file *stream)
2408 {
2409   fputs_filtered (n_spaces (n), stream);
2410 }
2411 
2412 /* C++/ObjC demangler stuff.  */
2413 
2414 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2415    LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2416    If the name is not mangled, or the language for the name is unknown, or
2417    demangling is off, the name is printed in its "raw" form. */
2418 
2419 void
2420 fprintf_symbol_filtered (struct ui_file *stream, char *name,
2421 			 enum language lang, int arg_mode)
2422 {
2423   char *demangled;
2424 
2425   if (name != NULL)
2426     {
2427       /* If user wants to see raw output, no problem.  */
2428       if (!demangle)
2429 	{
2430 	  fputs_filtered (name, stream);
2431 	}
2432       else
2433 	{
2434 	  demangled = language_demangle (language_def (lang), name, arg_mode);
2435 	  fputs_filtered (demangled ? demangled : name, stream);
2436 	  if (demangled != NULL)
2437 	    {
2438 	      xfree (demangled);
2439 	    }
2440 	}
2441     }
2442 }
2443 
2444 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2445    differences in whitespace.  Returns 0 if they match, non-zero if they
2446    don't (slightly different than strcmp()'s range of return values).
2447 
2448    As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2449    This "feature" is useful when searching for matching C++ function names
2450    (such as if the user types 'break FOO', where FOO is a mangled C++
2451    function). */
2452 
2453 int
2454 strcmp_iw (const char *string1, const char *string2)
2455 {
2456   while ((*string1 != '\0') && (*string2 != '\0'))
2457     {
2458       while (isspace (*string1))
2459 	{
2460 	  string1++;
2461 	}
2462       while (isspace (*string2))
2463 	{
2464 	  string2++;
2465 	}
2466       if (*string1 != *string2)
2467 	{
2468 	  break;
2469 	}
2470       if (*string1 != '\0')
2471 	{
2472 	  string1++;
2473 	  string2++;
2474 	}
2475     }
2476   return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2477 }
2478 
2479 /* This is like strcmp except that it ignores whitespace and treats
2480    '(' as the first non-NULL character in terms of ordering.  Like
2481    strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2482    STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2483    according to that ordering.
2484 
2485    If a list is sorted according to this function and if you want to
2486    find names in the list that match some fixed NAME according to
2487    strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2488    where this function would put NAME.
2489 
2490    Here are some examples of why using strcmp to sort is a bad idea:
2491 
2492    Whitespace example:
2493 
2494    Say your partial symtab contains: "foo<char *>", "goo".  Then, if
2495    we try to do a search for "foo<char*>", strcmp will locate this
2496    after "foo<char *>" and before "goo".  Then lookup_partial_symbol
2497    will start looking at strings beginning with "goo", and will never
2498    see the correct match of "foo<char *>".
2499 
2500    Parenthesis example:
2501 
2502    In practice, this is less like to be an issue, but I'll give it a
2503    shot.  Let's assume that '$' is a legitimate character to occur in
2504    symbols.  (Which may well even be the case on some systems.)  Then
2505    say that the partial symbol table contains "foo$" and "foo(int)".
2506    strcmp will put them in this order, since '$' < '('.  Now, if the
2507    user searches for "foo", then strcmp will sort "foo" before "foo$".
2508    Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2509    "foo") is false, so it won't proceed to the actual match of
2510    "foo(int)" with "foo".  */
2511 
2512 int
2513 strcmp_iw_ordered (const char *string1, const char *string2)
2514 {
2515   while ((*string1 != '\0') && (*string2 != '\0'))
2516     {
2517       while (isspace (*string1))
2518 	{
2519 	  string1++;
2520 	}
2521       while (isspace (*string2))
2522 	{
2523 	  string2++;
2524 	}
2525       if (*string1 != *string2)
2526 	{
2527 	  break;
2528 	}
2529       if (*string1 != '\0')
2530 	{
2531 	  string1++;
2532 	  string2++;
2533 	}
2534     }
2535 
2536   switch (*string1)
2537     {
2538       /* Characters are non-equal unless they're both '\0'; we want to
2539 	 make sure we get the comparison right according to our
2540 	 comparison in the cases where one of them is '\0' or '('.  */
2541     case '\0':
2542       if (*string2 == '\0')
2543 	return 0;
2544       else
2545 	return -1;
2546     case '(':
2547       if (*string2 == '\0')
2548 	return 1;
2549       else
2550 	return -1;
2551     default:
2552       if (*string2 == '(')
2553 	return 1;
2554       else
2555 	return *string1 - *string2;
2556     }
2557 }
2558 
2559 /* A simple comparison function with opposite semantics to strcmp.  */
2560 
2561 int
2562 streq (const char *lhs, const char *rhs)
2563 {
2564   return !strcmp (lhs, rhs);
2565 }
2566 
2567 
2568 /*
2569    ** subset_compare()
2570    **    Answer whether string_to_compare is a full or partial match to
2571    **    template_string.  The partial match must be in sequence starting
2572    **    at index 0.
2573  */
2574 int
2575 subset_compare (char *string_to_compare, char *template_string)
2576 {
2577   int match;
2578   if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2579       && strlen (string_to_compare) <= strlen (template_string))
2580     match =
2581       (strncmp
2582        (template_string, string_to_compare, strlen (string_to_compare)) == 0);
2583   else
2584     match = 0;
2585   return match;
2586 }
2587 
2588 
2589 static void pagination_on_command (char *arg, int from_tty);
2590 static void
2591 pagination_on_command (char *arg, int from_tty)
2592 {
2593   pagination_enabled = 1;
2594 }
2595 
2596 static void pagination_on_command (char *arg, int from_tty);
2597 static void
2598 pagination_off_command (char *arg, int from_tty)
2599 {
2600   pagination_enabled = 0;
2601 }
2602 
2603 
2604 void
2605 initialize_utils (void)
2606 {
2607   struct cmd_list_element *c;
2608 
2609   c = add_set_cmd ("width", class_support, var_uinteger, &chars_per_line,
2610 		   "Set number of characters gdb thinks are in a line.",
2611 		   &setlist);
2612   add_show_from_set (c, &showlist);
2613   set_cmd_sfunc (c, set_width_command);
2614 
2615   c = add_set_cmd ("height", class_support, var_uinteger, &lines_per_page,
2616 		   "Set number of lines gdb thinks are in a page.", &setlist);
2617   add_show_from_set (c, &showlist);
2618   set_cmd_sfunc (c, set_height_command);
2619 
2620   init_page_info ();
2621 
2622   add_show_from_set
2623     (add_set_cmd ("demangle", class_support, var_boolean,
2624 		  (char *) &demangle,
2625 		  "Set demangling of encoded C++/ObjC names when displaying symbols.",
2626 		  &setprintlist), &showprintlist);
2627 
2628   add_show_from_set
2629     (add_set_cmd ("pagination", class_support,
2630 		  var_boolean, (char *) &pagination_enabled,
2631 		  "Set state of pagination.", &setlist), &showlist);
2632 
2633   if (xdb_commands)
2634     {
2635       add_com ("am", class_support, pagination_on_command,
2636 	       "Enable pagination");
2637       add_com ("sm", class_support, pagination_off_command,
2638 	       "Disable pagination");
2639     }
2640 
2641   add_show_from_set
2642     (add_set_cmd ("sevenbit-strings", class_support, var_boolean,
2643 		  (char *) &sevenbit_strings,
2644 		  "Set printing of 8-bit characters in strings as \\nnn.",
2645 		  &setprintlist), &showprintlist);
2646 
2647   add_show_from_set
2648     (add_set_cmd ("asm-demangle", class_support, var_boolean,
2649 		  (char *) &asm_demangle,
2650 		  "Set demangling of C++/ObjC names in disassembly listings.",
2651 		  &setprintlist), &showprintlist);
2652 }
2653 
2654 /* Machine specific function to handle SIGWINCH signal. */
2655 
2656 #ifdef  SIGWINCH_HANDLER_BODY
2657 SIGWINCH_HANDLER_BODY
2658 #endif
2659 /* print routines to handle variable size regs, etc. */
2660 /* temporary storage using circular buffer */
2661 #define NUMCELLS 16
2662 #define CELLSIZE 32
2663 static char *
2664 get_cell (void)
2665 {
2666   static char buf[NUMCELLS][CELLSIZE];
2667   static int cell = 0;
2668   if (++cell >= NUMCELLS)
2669     cell = 0;
2670   return buf[cell];
2671 }
2672 
2673 int
2674 strlen_paddr (void)
2675 {
2676   return (TARGET_ADDR_BIT / 8 * 2);
2677 }
2678 
2679 char *
2680 paddr (CORE_ADDR addr)
2681 {
2682   return phex (addr, TARGET_ADDR_BIT / 8);
2683 }
2684 
2685 char *
2686 paddr_nz (CORE_ADDR addr)
2687 {
2688   return phex_nz (addr, TARGET_ADDR_BIT / 8);
2689 }
2690 
2691 static void
2692 decimal2str (char *paddr_str, char *sign, ULONGEST addr)
2693 {
2694   /* steal code from valprint.c:print_decimal().  Should this worry
2695      about the real size of addr as the above does? */
2696   unsigned long temp[3];
2697   int i = 0;
2698   do
2699     {
2700       temp[i] = addr % (1000 * 1000 * 1000);
2701       addr /= (1000 * 1000 * 1000);
2702       i++;
2703     }
2704   while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2705   switch (i)
2706     {
2707     case 1:
2708       sprintf (paddr_str, "%s%lu", sign, temp[0]);
2709       break;
2710     case 2:
2711       sprintf (paddr_str, "%s%lu%09lu", sign, temp[1], temp[0]);
2712       break;
2713     case 3:
2714       sprintf (paddr_str, "%s%lu%09lu%09lu", sign, temp[2], temp[1], temp[0]);
2715       break;
2716     default:
2717       internal_error (__FILE__, __LINE__,
2718 		      "failed internal consistency check");
2719     }
2720 }
2721 
2722 char *
2723 paddr_u (CORE_ADDR addr)
2724 {
2725   char *paddr_str = get_cell ();
2726   decimal2str (paddr_str, "", addr);
2727   return paddr_str;
2728 }
2729 
2730 char *
2731 paddr_d (LONGEST addr)
2732 {
2733   char *paddr_str = get_cell ();
2734   if (addr < 0)
2735     decimal2str (paddr_str, "-", -addr);
2736   else
2737     decimal2str (paddr_str, "", addr);
2738   return paddr_str;
2739 }
2740 
2741 /* eliminate warning from compiler on 32-bit systems */
2742 static int thirty_two = 32;
2743 
2744 char *
2745 phex (ULONGEST l, int sizeof_l)
2746 {
2747   char *str;
2748   switch (sizeof_l)
2749     {
2750     case 8:
2751       str = get_cell ();
2752       sprintf (str, "%08lx%08lx",
2753 	       (unsigned long) (l >> thirty_two),
2754 	       (unsigned long) (l & 0xffffffff));
2755       break;
2756     case 4:
2757       str = get_cell ();
2758       sprintf (str, "%08lx", (unsigned long) l);
2759       break;
2760     case 2:
2761       str = get_cell ();
2762       sprintf (str, "%04x", (unsigned short) (l & 0xffff));
2763       break;
2764     default:
2765       str = phex (l, sizeof (l));
2766       break;
2767     }
2768   return str;
2769 }
2770 
2771 char *
2772 phex_nz (ULONGEST l, int sizeof_l)
2773 {
2774   char *str;
2775   switch (sizeof_l)
2776     {
2777     case 8:
2778       {
2779 	unsigned long high = (unsigned long) (l >> thirty_two);
2780 	str = get_cell ();
2781 	if (high == 0)
2782 	  sprintf (str, "%lx", (unsigned long) (l & 0xffffffff));
2783 	else
2784 	  sprintf (str, "%lx%08lx", high, (unsigned long) (l & 0xffffffff));
2785 	break;
2786       }
2787     case 4:
2788       str = get_cell ();
2789       sprintf (str, "%lx", (unsigned long) l);
2790       break;
2791     case 2:
2792       str = get_cell ();
2793       sprintf (str, "%x", (unsigned short) (l & 0xffff));
2794       break;
2795     default:
2796       str = phex_nz (l, sizeof (l));
2797       break;
2798     }
2799   return str;
2800 }
2801 
2802 
2803 /* Convert a CORE_ADDR into a string.  */
2804 const char *
2805 core_addr_to_string (const CORE_ADDR addr)
2806 {
2807   char *str = get_cell ();
2808   strcpy (str, "0x");
2809   strcat (str, phex (addr, sizeof (addr)));
2810   return str;
2811 }
2812 
2813 const char *
2814 core_addr_to_string_nz (const CORE_ADDR addr)
2815 {
2816   char *str = get_cell ();
2817   strcpy (str, "0x");
2818   strcat (str, phex_nz (addr, sizeof (addr)));
2819   return str;
2820 }
2821 
2822 /* Convert a string back into a CORE_ADDR.  */
2823 CORE_ADDR
2824 string_to_core_addr (const char *my_string)
2825 {
2826   CORE_ADDR addr = 0;
2827   if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2828     {
2829       /* Assume that it is in decimal.  */
2830       int i;
2831       for (i = 2; my_string[i] != '\0'; i++)
2832 	{
2833 	  if (isdigit (my_string[i]))
2834 	    addr = (my_string[i] - '0') + (addr * 16);
2835 	  else if (isxdigit (my_string[i]))
2836 	    addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2837 	  else
2838 	    internal_error (__FILE__, __LINE__, "invalid hex");
2839 	}
2840     }
2841   else
2842     {
2843       /* Assume that it is in decimal.  */
2844       int i;
2845       for (i = 0; my_string[i] != '\0'; i++)
2846 	{
2847 	  if (isdigit (my_string[i]))
2848 	    addr = (my_string[i] - '0') + (addr * 10);
2849 	  else
2850 	    internal_error (__FILE__, __LINE__, "invalid decimal");
2851 	}
2852     }
2853   return addr;
2854 }
2855 
2856 char *
2857 gdb_realpath (const char *filename)
2858 {
2859   /* Method 1: The system has a compile time upper bound on a filename
2860      path.  Use that and realpath() to canonicalize the name.  This is
2861      the most common case.  Note that, if there isn't a compile time
2862      upper bound, you want to avoid realpath() at all costs.  */
2863 #if defined(HAVE_REALPATH)
2864   {
2865 # if defined (PATH_MAX)
2866     char buf[PATH_MAX];
2867 #  define USE_REALPATH
2868 # elif defined (MAXPATHLEN)
2869     char buf[MAXPATHLEN];
2870 #  define USE_REALPATH
2871 # endif
2872 # if defined (USE_REALPATH)
2873     const char *rp = realpath (filename, buf);
2874     if (rp == NULL)
2875       rp = filename;
2876     return xstrdup (rp);
2877 # endif
2878   }
2879 #endif /* HAVE_REALPATH */
2880 
2881   /* Method 2: The host system (i.e., GNU) has the function
2882      canonicalize_file_name() which malloc's a chunk of memory and
2883      returns that, use that.  */
2884 #if defined(HAVE_CANONICALIZE_FILE_NAME)
2885   {
2886     char *rp = canonicalize_file_name (filename);
2887     if (rp == NULL)
2888       return xstrdup (filename);
2889     else
2890       return rp;
2891   }
2892 #endif
2893 
2894   /* FIXME: cagney/2002-11-13:
2895 
2896      Method 2a: Use realpath() with a NULL buffer.  Some systems, due
2897      to the problems described in in method 3, have modified their
2898      realpath() implementation so that it will allocate a buffer when
2899      NULL is passed in.  Before this can be used, though, some sort of
2900      configure time test would need to be added.  Otherwize the code
2901      will likely core dump.  */
2902 
2903   /* Method 3: Now we're getting desperate!  The system doesn't have a
2904      compile time buffer size and no alternative function.  Query the
2905      OS, using pathconf(), for the buffer limit.  Care is needed
2906      though, some systems do not limit PATH_MAX (return -1 for
2907      pathconf()) making it impossible to pass a correctly sized buffer
2908      to realpath() (it could always overflow).  On those systems, we
2909      skip this.  */
2910 #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
2911   {
2912     /* Find out the max path size.  */
2913     long path_max = pathconf ("/", _PC_PATH_MAX);
2914     if (path_max > 0)
2915       {
2916 	/* PATH_MAX is bounded.  */
2917 	char *buf = alloca (path_max);
2918 	char *rp = realpath (filename, buf);
2919 	return xstrdup (rp ? rp : filename);
2920       }
2921   }
2922 #endif
2923 
2924   /* This system is a lost cause, just dup the buffer.  */
2925   return xstrdup (filename);
2926 }
2927 
2928 /* Return a copy of FILENAME, with its directory prefix canonicalized
2929    by gdb_realpath.  */
2930 
2931 char *
2932 xfullpath (const char *filename)
2933 {
2934   const char *base_name = lbasename (filename);
2935   char *dir_name;
2936   char *real_path;
2937   char *result;
2938 
2939   /* Extract the basename of filename, and return immediately
2940      a copy of filename if it does not contain any directory prefix. */
2941   if (base_name == filename)
2942     return xstrdup (filename);
2943 
2944   dir_name = alloca ((size_t) (base_name - filename + 2));
2945   /* Allocate enough space to store the dir_name + plus one extra
2946      character sometimes needed under Windows (see below), and
2947      then the closing \000 character */
2948   strncpy (dir_name, filename, base_name - filename);
2949   dir_name[base_name - filename] = '\000';
2950 
2951 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
2952   /* We need to be careful when filename is of the form 'd:foo', which
2953      is equivalent of d:./foo, which is totally different from d:/foo.  */
2954   if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
2955     {
2956       dir_name[2] = '.';
2957       dir_name[3] = '\000';
2958     }
2959 #endif
2960 
2961   /* Canonicalize the directory prefix, and build the resulting
2962      filename. If the dirname realpath already contains an ending
2963      directory separator, avoid doubling it.  */
2964   real_path = gdb_realpath (dir_name);
2965   if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
2966     result = concat (real_path, base_name, NULL);
2967   else
2968     result = concat (real_path, SLASH_STRING, base_name, NULL);
2969 
2970   xfree (real_path);
2971   return result;
2972 }
2973 
2974 
2975 /* This is the 32-bit CRC function used by the GNU separate debug
2976    facility.  An executable may contain a section named
2977    .gnu_debuglink, which holds the name of a separate executable file
2978    containing its debug info, and a checksum of that file's contents,
2979    computed using this function.  */
2980 unsigned long
2981 gnu_debuglink_crc32 (unsigned long crc, unsigned char *buf, size_t len)
2982 {
2983   static const unsigned long crc32_table[256] = {
2984     0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
2985     0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
2986     0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
2987     0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
2988     0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
2989     0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
2990     0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
2991     0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
2992     0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
2993     0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
2994     0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
2995     0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
2996     0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
2997     0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
2998     0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
2999     0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
3000     0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
3001     0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
3002     0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
3003     0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
3004     0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
3005     0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
3006     0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
3007     0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
3008     0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
3009     0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
3010     0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
3011     0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
3012     0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
3013     0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
3014     0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
3015     0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
3016     0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
3017     0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
3018     0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
3019     0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
3020     0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
3021     0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
3022     0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
3023     0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
3024     0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
3025     0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
3026     0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
3027     0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
3028     0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
3029     0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
3030     0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
3031     0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
3032     0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
3033     0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
3034     0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
3035     0x2d02ef8d
3036   };
3037   unsigned char *end;
3038 
3039   crc = ~crc & 0xffffffff;
3040   for (end = buf + len; buf < end; ++buf)
3041     crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
3042   return ~crc & 0xffffffff;;
3043 }
3044 
3045 ULONGEST
3046 align_up (ULONGEST v, int n)
3047 {
3048   /* Check that N is really a power of two.  */
3049   gdb_assert (n && (n & (n-1)) == 0);
3050   return (v + n - 1) & -n;
3051 }
3052 
3053 ULONGEST
3054 align_down (ULONGEST v, int n)
3055 {
3056   /* Check that N is really a power of two.  */
3057   gdb_assert (n && (n & (n-1)) == 0);
3058   return (v & -n);
3059 }
3060