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