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