OSDN Git Service

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