]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/gdb/gdb/utils.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / gdb / gdb / utils.c
1 /* General utility routines for GDB, the GNU debugger.
2
3    Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
5    Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330,
22    Boston, MA 02111-1307, USA.  */
23
24 #include "defs.h"
25 #include "gdb_assert.h"
26 #include <ctype.h>
27 #include "gdb_string.h"
28 #include "event-top.h"
29
30 #ifdef TUI
31 #include "tui/tui.h"            /* For tui_get_command_dimension.   */
32 #endif
33
34 #ifdef __GO32__
35 #include <pc.h>
36 #endif
37
38 /* SunOS's curses.h has a '#define reg register' in it.  Thank you Sun. */
39 #ifdef reg
40 #undef reg
41 #endif
42
43 #include <signal.h>
44 #include "gdbcmd.h"
45 #include "serial.h"
46 #include "bfd.h"
47 #include "target.h"
48 #include "demangle.h"
49 #include "expression.h"
50 #include "language.h"
51 #include "charset.h"
52 #include "annotate.h"
53 #include "filenames.h"
54
55 #include "inferior.h"           /* for signed_pointer_to_address */
56
57 #include <sys/param.h>          /* For MAXPATHLEN */
58
59 #ifdef HAVE_CURSES_H
60 #include <curses.h>
61 #endif
62 #ifdef HAVE_TERM_H
63 #include <term.h>
64 #endif
65
66 #include "readline/readline.h"
67
68 #ifdef NEED_DECLARATION_MALLOC
69 extern PTR malloc ();           /* OK: PTR */
70 #endif
71 #ifdef NEED_DECLARATION_REALLOC
72 extern PTR realloc ();          /* OK: PTR */
73 #endif
74 #ifdef NEED_DECLARATION_FREE
75 extern void free ();
76 #endif
77 /* Actually, we'll never have the decl, since we don't define _GNU_SOURCE.  */
78 #if defined(HAVE_CANONICALIZE_FILE_NAME) \
79     && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
80 extern char *canonicalize_file_name (const char *);
81 #endif
82
83 /* readline defines this.  */
84 #undef savestring
85
86 void (*error_begin_hook) (void);
87
88 /* Holds the last error message issued by gdb */
89
90 static struct ui_file *gdb_lasterr;
91
92 /* Prototypes for local functions */
93
94 static void vfprintf_maybe_filtered (struct ui_file *, const char *,
95                                      va_list, int);
96
97 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
98
99 static void do_my_cleanups (struct cleanup **, struct cleanup *);
100
101 static void prompt_for_continue (void);
102
103 static void set_screen_size (void);
104 static void set_width (void);
105
106 /* Chain of cleanup actions established with make_cleanup,
107    to be executed if an error happens.  */
108
109 static struct cleanup *cleanup_chain;   /* cleaned up after a failed command */
110 static struct cleanup *final_cleanup_chain;     /* cleaned up when gdb exits */
111 static struct cleanup *run_cleanup_chain;       /* cleaned up on each 'run' */
112 static struct cleanup *exec_cleanup_chain;      /* cleaned up on each execution command */
113 /* cleaned up on each error from within an execution command */
114 static struct cleanup *exec_error_cleanup_chain;
115
116 /* Pointer to what is left to do for an execution command after the
117    target stops. Used only in asynchronous mode, by targets that
118    support async execution.  The finish and until commands use it. So
119    does the target extended-remote command. */
120 struct continuation *cmd_continuation;
121 struct continuation *intermediate_continuation;
122
123 /* Nonzero if we have job control. */
124
125 int job_control;
126
127 /* Nonzero means a quit has been requested.  */
128
129 int quit_flag;
130
131 /* Nonzero means quit immediately if Control-C is typed now, rather
132    than waiting until QUIT is executed.  Be careful in setting this;
133    code which executes with immediate_quit set has to be very careful
134    about being able to deal with being interrupted at any time.  It is
135    almost always better to use QUIT; the only exception I can think of
136    is being able to quit out of a system call (using EINTR loses if
137    the SIGINT happens between the previous QUIT and the system call).
138    To immediately quit in the case in which a SIGINT happens between
139    the previous QUIT and setting immediate_quit (desirable anytime we
140    expect to block), call QUIT after setting immediate_quit.  */
141
142 int immediate_quit;
143
144 /* Nonzero means that encoded C++/ObjC names should be printed out in their
145    C++/ObjC form rather than raw.  */
146
147 int demangle = 1;
148
149 /* Nonzero means that encoded C++/ObjC names should be printed out in their
150    C++/ObjC form even in assembler language displays.  If this is set, but
151    DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls.  */
152
153 int asm_demangle = 0;
154
155 /* Nonzero means that strings with character values >0x7F should be printed
156    as octal escapes.  Zero means just print the value (e.g. it's an
157    international character, and the terminal or window can cope.)  */
158
159 int sevenbit_strings = 0;
160
161 /* String to be printed before error messages, if any.  */
162
163 char *error_pre_print;
164
165 /* String to be printed before quit messages, if any.  */
166
167 char *quit_pre_print;
168
169 /* String to be printed before warning messages, if any.  */
170
171 char *warning_pre_print = "\nwarning: ";
172
173 int pagination_enabled = 1;
174 \f
175
176 /* Add a new cleanup to the cleanup_chain,
177    and return the previous chain pointer
178    to be passed later to do_cleanups or discard_cleanups.
179    Args are FUNCTION to clean up with, and ARG to pass to it.  */
180
181 struct cleanup *
182 make_cleanup (make_cleanup_ftype *function, void *arg)
183 {
184   return make_my_cleanup (&cleanup_chain, function, arg);
185 }
186
187 struct cleanup *
188 make_final_cleanup (make_cleanup_ftype *function, void *arg)
189 {
190   return make_my_cleanup (&final_cleanup_chain, function, arg);
191 }
192
193 struct cleanup *
194 make_run_cleanup (make_cleanup_ftype *function, void *arg)
195 {
196   return make_my_cleanup (&run_cleanup_chain, function, arg);
197 }
198
199 struct cleanup *
200 make_exec_cleanup (make_cleanup_ftype *function, void *arg)
201 {
202   return make_my_cleanup (&exec_cleanup_chain, function, arg);
203 }
204
205 struct cleanup *
206 make_exec_error_cleanup (make_cleanup_ftype *function, void *arg)
207 {
208   return make_my_cleanup (&exec_error_cleanup_chain, function, arg);
209 }
210
211 static void
212 do_freeargv (void *arg)
213 {
214   freeargv ((char **) arg);
215 }
216
217 struct cleanup *
218 make_cleanup_freeargv (char **arg)
219 {
220   return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
221 }
222
223 static void
224 do_bfd_close_cleanup (void *arg)
225 {
226   bfd_close (arg);
227 }
228
229 struct cleanup *
230 make_cleanup_bfd_close (bfd *abfd)
231 {
232   return make_cleanup (do_bfd_close_cleanup, abfd);
233 }
234
235 static void
236 do_close_cleanup (void *arg)
237 {
238   int *fd = arg;
239   close (*fd);
240   xfree (fd);
241 }
242
243 struct cleanup *
244 make_cleanup_close (int fd)
245 {
246   int *saved_fd = xmalloc (sizeof (fd));
247   *saved_fd = fd;
248   return make_cleanup (do_close_cleanup, saved_fd);
249 }
250
251 static void
252 do_ui_file_delete (void *arg)
253 {
254   ui_file_delete (arg);
255 }
256
257 struct cleanup *
258 make_cleanup_ui_file_delete (struct ui_file *arg)
259 {
260   return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
261 }
262
263 struct cleanup *
264 make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
265                  void *arg)
266 {
267   struct cleanup *new
268     = (struct cleanup *) xmalloc (sizeof (struct cleanup));
269   struct cleanup *old_chain = *pmy_chain;
270
271   new->next = *pmy_chain;
272   new->function = function;
273   new->arg = arg;
274   *pmy_chain = new;
275
276   return old_chain;
277 }
278
279 /* Discard cleanups and do the actions they describe
280    until we get back to the point OLD_CHAIN in the cleanup_chain.  */
281
282 void
283 do_cleanups (struct cleanup *old_chain)
284 {
285   do_my_cleanups (&cleanup_chain, old_chain);
286 }
287
288 void
289 do_final_cleanups (struct cleanup *old_chain)
290 {
291   do_my_cleanups (&final_cleanup_chain, old_chain);
292 }
293
294 void
295 do_run_cleanups (struct cleanup *old_chain)
296 {
297   do_my_cleanups (&run_cleanup_chain, old_chain);
298 }
299
300 void
301 do_exec_cleanups (struct cleanup *old_chain)
302 {
303   do_my_cleanups (&exec_cleanup_chain, old_chain);
304 }
305
306 void
307 do_exec_error_cleanups (struct cleanup *old_chain)
308 {
309   do_my_cleanups (&exec_error_cleanup_chain, old_chain);
310 }
311
312 static void
313 do_my_cleanups (struct cleanup **pmy_chain,
314                 struct cleanup *old_chain)
315 {
316   struct cleanup *ptr;
317   while ((ptr = *pmy_chain) != old_chain)
318     {
319       *pmy_chain = ptr->next;   /* Do this first incase recursion */
320       (*ptr->function) (ptr->arg);
321       xfree (ptr);
322     }
323 }
324
325 /* Discard cleanups, not doing the actions they describe,
326    until we get back to the point OLD_CHAIN in the cleanup_chain.  */
327
328 void
329 discard_cleanups (struct cleanup *old_chain)
330 {
331   discard_my_cleanups (&cleanup_chain, old_chain);
332 }
333
334 void
335 discard_final_cleanups (struct cleanup *old_chain)
336 {
337   discard_my_cleanups (&final_cleanup_chain, old_chain);
338 }
339
340 void
341 discard_exec_error_cleanups (struct cleanup *old_chain)
342 {
343   discard_my_cleanups (&exec_error_cleanup_chain, old_chain);
344 }
345
346 void
347 discard_my_cleanups (struct cleanup **pmy_chain,
348                      struct cleanup *old_chain)
349 {
350   struct cleanup *ptr;
351   while ((ptr = *pmy_chain) != old_chain)
352     {
353       *pmy_chain = ptr->next;
354       xfree (ptr);
355     }
356 }
357
358 /* Set the cleanup_chain to 0, and return the old cleanup chain.  */
359 struct cleanup *
360 save_cleanups (void)
361 {
362   return save_my_cleanups (&cleanup_chain);
363 }
364
365 struct cleanup *
366 save_final_cleanups (void)
367 {
368   return save_my_cleanups (&final_cleanup_chain);
369 }
370
371 struct cleanup *
372 save_my_cleanups (struct cleanup **pmy_chain)
373 {
374   struct cleanup *old_chain = *pmy_chain;
375
376   *pmy_chain = 0;
377   return old_chain;
378 }
379
380 /* Restore the cleanup chain from a previously saved chain.  */
381 void
382 restore_cleanups (struct cleanup *chain)
383 {
384   restore_my_cleanups (&cleanup_chain, chain);
385 }
386
387 void
388 restore_final_cleanups (struct cleanup *chain)
389 {
390   restore_my_cleanups (&final_cleanup_chain, chain);
391 }
392
393 void
394 restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
395 {
396   *pmy_chain = chain;
397 }
398
399 /* This function is useful for cleanups.
400    Do
401
402    foo = xmalloc (...);
403    old_chain = make_cleanup (free_current_contents, &foo);
404
405    to arrange to free the object thus allocated.  */
406
407 void
408 free_current_contents (void *ptr)
409 {
410   void **location = ptr;
411   if (location == NULL)
412     internal_error (__FILE__, __LINE__,
413                     "free_current_contents: NULL pointer");
414   if (*location != NULL)
415     {
416       xfree (*location);
417       *location = NULL;
418     }
419 }
420
421 /* Provide a known function that does nothing, to use as a base for
422    for a possibly long chain of cleanups.  This is useful where we
423    use the cleanup chain for handling normal cleanups as well as dealing
424    with cleanups that need to be done as a result of a call to error().
425    In such cases, we may not be certain where the first cleanup is, unless
426    we have a do-nothing one to always use as the base. */
427
428 void
429 null_cleanup (void *arg)
430 {
431 }
432
433 /* Add a continuation to the continuation list, the global list
434    cmd_continuation. The new continuation will be added at the front.*/
435 void
436 add_continuation (void (*continuation_hook) (struct continuation_arg *),
437                   struct continuation_arg *arg_list)
438 {
439   struct continuation *continuation_ptr;
440
441   continuation_ptr =
442     (struct continuation *) xmalloc (sizeof (struct continuation));
443   continuation_ptr->continuation_hook = continuation_hook;
444   continuation_ptr->arg_list = arg_list;
445   continuation_ptr->next = cmd_continuation;
446   cmd_continuation = continuation_ptr;
447 }
448
449 /* Walk down the cmd_continuation list, and execute all the
450    continuations. There is a problem though. In some cases new
451    continuations may be added while we are in the middle of this
452    loop. If this happens they will be added in the front, and done
453    before we have a chance of exhausting those that were already
454    there. We need to then save the beginning of the list in a pointer
455    and do the continuations from there on, instead of using the
456    global beginning of list as our iteration pointer.*/
457 void
458 do_all_continuations (void)
459 {
460   struct continuation *continuation_ptr;
461   struct continuation *saved_continuation;
462
463   /* Copy the list header into another pointer, and set the global
464      list header to null, so that the global list can change as a side
465      effect of invoking the continuations and the processing of
466      the preexisting continuations will not be affected. */
467   continuation_ptr = cmd_continuation;
468   cmd_continuation = NULL;
469
470   /* Work now on the list we have set aside. */
471   while (continuation_ptr)
472     {
473       (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
474       saved_continuation = continuation_ptr;
475       continuation_ptr = continuation_ptr->next;
476       xfree (saved_continuation);
477     }
478 }
479
480 /* Walk down the cmd_continuation list, and get rid of all the
481    continuations. */
482 void
483 discard_all_continuations (void)
484 {
485   struct continuation *continuation_ptr;
486
487   while (cmd_continuation)
488     {
489       continuation_ptr = cmd_continuation;
490       cmd_continuation = continuation_ptr->next;
491       xfree (continuation_ptr);
492     }
493 }
494
495 /* Add a continuation to the continuation list, the global list
496    intermediate_continuation. The new continuation will be added at the front.*/
497 void
498 add_intermediate_continuation (void (*continuation_hook)
499                                (struct continuation_arg *),
500                                struct continuation_arg *arg_list)
501 {
502   struct continuation *continuation_ptr;
503
504   continuation_ptr =
505     (struct continuation *) xmalloc (sizeof (struct continuation));
506   continuation_ptr->continuation_hook = continuation_hook;
507   continuation_ptr->arg_list = arg_list;
508   continuation_ptr->next = intermediate_continuation;
509   intermediate_continuation = continuation_ptr;
510 }
511
512 /* Walk down the cmd_continuation list, and execute all the
513    continuations. There is a problem though. In some cases new
514    continuations may be added while we are in the middle of this
515    loop. If this happens they will be added in the front, and done
516    before we have a chance of exhausting those that were already
517    there. We need to then save the beginning of the list in a pointer
518    and do the continuations from there on, instead of using the
519    global beginning of list as our iteration pointer.*/
520 void
521 do_all_intermediate_continuations (void)
522 {
523   struct continuation *continuation_ptr;
524   struct continuation *saved_continuation;
525
526   /* Copy the list header into another pointer, and set the global
527      list header to null, so that the global list can change as a side
528      effect of invoking the continuations and the processing of
529      the preexisting continuations will not be affected. */
530   continuation_ptr = intermediate_continuation;
531   intermediate_continuation = NULL;
532
533   /* Work now on the list we have set aside. */
534   while (continuation_ptr)
535     {
536       (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
537       saved_continuation = continuation_ptr;
538       continuation_ptr = continuation_ptr->next;
539       xfree (saved_continuation);
540     }
541 }
542
543 /* Walk down the cmd_continuation list, and get rid of all the
544    continuations. */
545 void
546 discard_all_intermediate_continuations (void)
547 {
548   struct continuation *continuation_ptr;
549
550   while (intermediate_continuation)
551     {
552       continuation_ptr = intermediate_continuation;
553       intermediate_continuation = continuation_ptr->next;
554       xfree (continuation_ptr);
555     }
556 }
557 \f
558
559
560 /* Print a warning message.  The first argument STRING is the warning
561    message, used as an fprintf format string, the second is the
562    va_list of arguments for that string.  A warning is unfiltered (not
563    paginated) so that the user does not need to page through each
564    screen full of warnings when there are lots of them.  */
565
566 void
567 vwarning (const char *string, va_list args)
568 {
569   if (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 \f
986 /* Memory management stuff (malloc friends).  */
987
988 static void *
989 mmalloc (void *md, size_t size)
990 {
991   return malloc (size);         /* NOTE: GDB's only call to malloc() */
992 }
993
994 static void *
995 mrealloc (void *md, void *ptr, size_t size)
996 {
997   if (ptr == 0)                 /* Guard against old realloc's */
998     return mmalloc (md, size);
999   else
1000     return realloc (ptr, size); /* NOTE: GDB's only call to ralloc() */
1001 }
1002
1003 static void *
1004 mcalloc (void *md, size_t number, size_t size)
1005 {
1006   return calloc (number, size); /* NOTE: GDB's only call to calloc() */
1007 }
1008
1009 static void
1010 mfree (void *md, void *ptr)
1011 {
1012   free (ptr);                   /* NOTE: GDB's only call to free() */
1013 }
1014
1015 /* This used to do something interesting with USE_MMALLOC.
1016  * It can be retired any time.  -- chastain 2004-01-19.  */
1017 void
1018 init_malloc (void *md)
1019 {
1020 }
1021
1022 /* Called when a memory allocation fails, with the number of bytes of
1023    memory requested in SIZE. */
1024
1025 NORETURN void
1026 nomem (long size)
1027 {
1028   if (size > 0)
1029     {
1030       internal_error (__FILE__, __LINE__,
1031                       "virtual memory exhausted: can't allocate %ld bytes.",
1032                       size);
1033     }
1034   else
1035     {
1036       internal_error (__FILE__, __LINE__, "virtual memory exhausted.");
1037     }
1038 }
1039
1040 /* The xmmalloc() family of memory management routines.
1041
1042    These are are like the mmalloc() family except that they implement
1043    consistent semantics and guard against typical memory management
1044    problems: if a malloc fails, an internal error is thrown; if
1045    free(NULL) is called, it is ignored; if *alloc(0) is called, NULL
1046    is returned.
1047
1048    All these routines are implemented using the mmalloc() family. */
1049
1050 void *
1051 xmmalloc (void *md, size_t size)
1052 {
1053   void *val;
1054
1055   /* See libiberty/xmalloc.c.  This function need's to match that's
1056      semantics.  It never returns NULL.  */
1057   if (size == 0)
1058     size = 1;
1059
1060   val = mmalloc (md, size);
1061   if (val == NULL)
1062     nomem (size);
1063
1064   return (val);
1065 }
1066
1067 void *
1068 xmrealloc (void *md, void *ptr, size_t size)
1069 {
1070   void *val;
1071
1072   /* See libiberty/xmalloc.c.  This function need's to match that's
1073      semantics.  It never returns NULL.  */
1074   if (size == 0)
1075     size = 1;
1076
1077   if (ptr != NULL)
1078     val = mrealloc (md, ptr, size);
1079   else
1080     val = mmalloc (md, size);
1081   if (val == NULL)
1082     nomem (size);
1083
1084   return (val);
1085 }
1086
1087 void *
1088 xmcalloc (void *md, size_t number, size_t size)
1089 {
1090   void *mem;
1091
1092   /* See libiberty/xmalloc.c.  This function need's to match that's
1093      semantics.  It never returns NULL.  */
1094   if (number == 0 || size == 0)
1095     {
1096       number = 1;
1097       size = 1;
1098     }
1099
1100   mem = mcalloc (md, number, size);
1101   if (mem == NULL)
1102     nomem (number * size);
1103
1104   return mem;
1105 }
1106
1107 void
1108 xmfree (void *md, void *ptr)
1109 {
1110   if (ptr != NULL)
1111     mfree (md, ptr);
1112 }
1113
1114 /* The xmalloc() (libiberty.h) family of memory management routines.
1115
1116    These are like the ISO-C malloc() family except that they implement
1117    consistent semantics and guard against typical memory management
1118    problems.  See xmmalloc() above for further information.
1119
1120    All these routines are wrappers to the xmmalloc() family. */
1121
1122 /* NOTE: These are declared using PTR to ensure consistency with
1123    "libiberty.h".  xfree() is GDB local.  */
1124
1125 PTR                             /* OK: PTR */
1126 xmalloc (size_t size)
1127 {
1128   return xmmalloc (NULL, size);
1129 }
1130
1131 PTR                             /* OK: PTR */
1132 xrealloc (PTR ptr, size_t size) /* OK: PTR */
1133 {
1134   return xmrealloc (NULL, ptr, size);
1135 }
1136
1137 PTR                             /* OK: PTR */
1138 xcalloc (size_t number, size_t size)
1139 {
1140   return xmcalloc (NULL, number, size);
1141 }
1142
1143 void
1144 xfree (void *ptr)
1145 {
1146   xmfree (NULL, ptr);
1147 }
1148 \f
1149
1150 /* Like asprintf/vasprintf but get an internal_error if the call
1151    fails. */
1152
1153 char *
1154 xstrprintf (const char *format, ...)
1155 {
1156   char *ret;
1157   va_list args;
1158   va_start (args, format);
1159   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 \f
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 \f
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-query\n");
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\032query\n");
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-query\n");
1441   return retval;
1442 }
1443 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 }