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