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