OSDN Git Service

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