OSDN Git Service

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