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