* i386-linux-tdep.c (I386_LINUX_RECORD_SIZE_*,
[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 "yes" 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 /* Automatically answer the default value if input is not from the user
1452 directly, or if the user did not want prompts. */
1453 if (!input_from_terminal_p () || !caution)
1454 return def_value;
1455
1456 if (deprecated_query_hook)
1457 {
1458 return deprecated_query_hook (ctlstr, args);
1459 }
1460
1461 /* Format the question outside of the loop, to avoid reusing args. */
1462 question = xstrvprintf (ctlstr, args);
1463
1464 while (1)
1465 {
1466 wrap_here (""); /* Flush any buffered output */
1467 gdb_flush (gdb_stdout);
1468
1469 if (annotation_level > 1)
1470 printf_filtered (("\n\032\032pre-query\n"));
1471
1472 fputs_filtered (question, gdb_stdout);
1473 printf_filtered (_("(%s or %s) "), y_string, n_string);
1474
1475 if (annotation_level > 1)
1476 printf_filtered (("\n\032\032query\n"));
1477
1478 wrap_here ("");
1479 gdb_flush (gdb_stdout);
1480
1481 answer = fgetc (stdin);
1482
1483 /* We expect fgetc to block until a character is read. But
1484 this may not be the case if the terminal was opened with
1485 the NONBLOCK flag. In that case, if there is nothing to
1486 read on stdin, fgetc returns EOF, but also sets the error
1487 condition flag on stdin and errno to EAGAIN. With a true
1488 EOF, stdin's error condition flag is not set.
1489
1490 A situation where this behavior was observed is a pseudo
1491 terminal on AIX. */
1492 while (answer == EOF && ferror (stdin) && errno == EAGAIN)
1493 {
1494 /* Not a real EOF. Wait a little while and try again until
1495 we read something. */
1496 clearerr (stdin);
1497 gdb_usleep (10000);
1498 answer = fgetc (stdin);
1499 }
1500
1501 clearerr (stdin); /* in case of C-d */
1502 if (answer == EOF) /* C-d */
1503 {
1504 printf_filtered ("EOF [assumed %c]\n", def_answer);
1505 retval = def_value;
1506 break;
1507 }
1508 /* Eat rest of input line, to EOF or newline */
1509 if (answer != '\n')
1510 do
1511 {
1512 ans2 = fgetc (stdin);
1513 clearerr (stdin);
1514 }
1515 while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1516
1517 if (answer >= 'a')
1518 answer -= 040;
1519 /* Check answer. For the non-default, the user must specify
1520 the non-default explicitly. */
1521 if (answer == not_def_answer)
1522 {
1523 retval = !def_value;
1524 break;
1525 }
1526 /* Otherwise, if a default was specified, the user may either
1527 specify the required input or have it default by entering
1528 nothing. */
1529 if (answer == def_answer
1530 || (defchar != '\0' &&
1531 (answer == '\n' || answer == '\r' || answer == EOF)))
1532 {
1533 retval = def_value;
1534 break;
1535 }
1536 /* Invalid entries are not defaulted and require another selection. */
1537 printf_filtered (_("Please answer %s or %s.\n"),
1538 y_string, n_string);
1539 }
1540
1541 xfree (question);
1542 if (annotation_level > 1)
1543 printf_filtered (("\n\032\032post-query\n"));
1544 return retval;
1545 }
1546 \f
1547
1548 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1549 answer is yes, or 0 if answer is defaulted.
1550 Takes three args which are given to printf to print the question.
1551 The first, a control string, should end in "? ".
1552 It should not say how to answer, because we do that. */
1553
1554 int
1555 nquery (const char *ctlstr, ...)
1556 {
1557 va_list args;
1558
1559 va_start (args, ctlstr);
1560 return defaulted_query (ctlstr, 'n', args);
1561 va_end (args);
1562 }
1563
1564 /* Ask user a y-or-n question and return 0 if answer is no, 1 if
1565 answer is yes, or 1 if answer is defaulted.
1566 Takes three args which are given to printf to print the question.
1567 The first, a control string, should end in "? ".
1568 It should not say how to answer, because we do that. */
1569
1570 int
1571 yquery (const char *ctlstr, ...)
1572 {
1573 va_list args;
1574
1575 va_start (args, ctlstr);
1576 return defaulted_query (ctlstr, 'y', args);
1577 va_end (args);
1578 }
1579
1580 /* Ask user a y-or-n question and return 1 iff answer is yes.
1581 Takes three args which are given to printf to print the question.
1582 The first, a control string, should end in "? ".
1583 It should not say how to answer, because we do that. */
1584
1585 int
1586 query (const char *ctlstr, ...)
1587 {
1588 va_list args;
1589
1590 va_start (args, ctlstr);
1591 return defaulted_query (ctlstr, '\0', args);
1592 va_end (args);
1593 }
1594
1595 /* A helper for parse_escape that converts a host character to a
1596 target character. C is the host character. If conversion is
1597 possible, then the target character is stored in *TARGET_C and the
1598 function returns 1. Otherwise, the function returns 0. */
1599
1600 static int
1601 host_char_to_target (int c, int *target_c)
1602 {
1603 struct obstack host_data;
1604 char the_char = c;
1605 struct cleanup *cleanups;
1606 int result = 0;
1607
1608 obstack_init (&host_data);
1609 cleanups = make_cleanup_obstack_free (&host_data);
1610
1611 convert_between_encodings (target_charset (), host_charset (),
1612 &the_char, 1, 1, &host_data, translit_none);
1613
1614 if (obstack_object_size (&host_data) == 1)
1615 {
1616 result = 1;
1617 *target_c = *(char *) obstack_base (&host_data);
1618 }
1619
1620 do_cleanups (cleanups);
1621 return result;
1622 }
1623
1624 /* Parse a C escape sequence. STRING_PTR points to a variable
1625 containing a pointer to the string to parse. That pointer
1626 should point to the character after the \. That pointer
1627 is updated past the characters we use. The value of the
1628 escape sequence is returned.
1629
1630 A negative value means the sequence \ newline was seen,
1631 which is supposed to be equivalent to nothing at all.
1632
1633 If \ is followed by a null character, we return a negative
1634 value and leave the string pointer pointing at the null character.
1635
1636 If \ is followed by 000, we return 0 and leave the string pointer
1637 after the zeros. A value of 0 does not mean end of string. */
1638
1639 int
1640 parse_escape (char **string_ptr)
1641 {
1642 int target_char = -2; /* initialize to avoid GCC warnings */
1643 int c = *(*string_ptr)++;
1644 switch (c)
1645 {
1646 case '\n':
1647 return -2;
1648 case 0:
1649 (*string_ptr)--;
1650 return 0;
1651
1652 case '0':
1653 case '1':
1654 case '2':
1655 case '3':
1656 case '4':
1657 case '5':
1658 case '6':
1659 case '7':
1660 {
1661 int i = host_hex_value (c);
1662 int count = 0;
1663 while (++count < 3)
1664 {
1665 c = (**string_ptr);
1666 if (isdigit (c) && c != '8' && c != '9')
1667 {
1668 (*string_ptr)++;
1669 i *= 8;
1670 i += host_hex_value (c);
1671 }
1672 else
1673 {
1674 break;
1675 }
1676 }
1677 return i;
1678 }
1679
1680 case 'a':
1681 c = '\a';
1682 break;
1683 case 'b':
1684 c = '\b';
1685 break;
1686 case 'f':
1687 c = '\f';
1688 break;
1689 case 'n':
1690 c = '\n';
1691 break;
1692 case 'r':
1693 c = '\r';
1694 break;
1695 case 't':
1696 c = '\t';
1697 break;
1698 case 'v':
1699 c = '\v';
1700 break;
1701
1702 default:
1703 break;
1704 }
1705
1706 if (!host_char_to_target (c, &target_char))
1707 error
1708 ("The escape sequence `\%c' is equivalent to plain `%c', which"
1709 " has no equivalent\n" "in the `%s' character set.", c, c,
1710 target_charset ());
1711 return target_char;
1712 }
1713 \f
1714 /* Print the character C on STREAM as part of the contents of a literal
1715 string whose delimiter is QUOTER. Note that this routine should only
1716 be call for printing things which are independent of the language
1717 of the program being debugged. */
1718
1719 static void
1720 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1721 void (*do_fprintf) (struct ui_file *, const char *, ...)
1722 ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
1723 {
1724
1725 c &= 0xFF; /* Avoid sign bit follies */
1726
1727 if (c < 0x20 || /* Low control chars */
1728 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1729 (sevenbit_strings && c >= 0x80))
1730 { /* high order bit set */
1731 switch (c)
1732 {
1733 case '\n':
1734 do_fputs ("\\n", stream);
1735 break;
1736 case '\b':
1737 do_fputs ("\\b", stream);
1738 break;
1739 case '\t':
1740 do_fputs ("\\t", stream);
1741 break;
1742 case '\f':
1743 do_fputs ("\\f", stream);
1744 break;
1745 case '\r':
1746 do_fputs ("\\r", stream);
1747 break;
1748 case '\033':
1749 do_fputs ("\\e", stream);
1750 break;
1751 case '\007':
1752 do_fputs ("\\a", stream);
1753 break;
1754 default:
1755 do_fprintf (stream, "\\%.3o", (unsigned int) c);
1756 break;
1757 }
1758 }
1759 else
1760 {
1761 if (c == '\\' || c == quoter)
1762 do_fputs ("\\", stream);
1763 do_fprintf (stream, "%c", c);
1764 }
1765 }
1766
1767 /* Print the character C on STREAM as part of the contents of a
1768 literal string whose delimiter is QUOTER. Note that these routines
1769 should only be call for printing things which are independent of
1770 the language of the program being debugged. */
1771
1772 void
1773 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1774 {
1775 while (*str)
1776 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1777 }
1778
1779 void
1780 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1781 {
1782 while (*str)
1783 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1784 }
1785
1786 void
1787 fputstrn_filtered (const char *str, int n, int quoter,
1788 struct ui_file *stream)
1789 {
1790 int i;
1791 for (i = 0; i < n; i++)
1792 printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1793 }
1794
1795 void
1796 fputstrn_unfiltered (const char *str, int n, int quoter,
1797 struct ui_file *stream)
1798 {
1799 int i;
1800 for (i = 0; i < n; i++)
1801 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1802 }
1803 \f
1804
1805 /* Number of lines per page or UINT_MAX if paging is disabled. */
1806 static unsigned int lines_per_page;
1807 static void
1808 show_lines_per_page (struct ui_file *file, int from_tty,
1809 struct cmd_list_element *c, const char *value)
1810 {
1811 fprintf_filtered (file, _("\
1812 Number of lines gdb thinks are in a page is %s.\n"),
1813 value);
1814 }
1815
1816 /* Number of chars per line or UINT_MAX if line folding is disabled. */
1817 static unsigned int chars_per_line;
1818 static void
1819 show_chars_per_line (struct ui_file *file, int from_tty,
1820 struct cmd_list_element *c, const char *value)
1821 {
1822 fprintf_filtered (file, _("\
1823 Number of characters gdb thinks are in a line is %s.\n"),
1824 value);
1825 }
1826
1827 /* Current count of lines printed on this page, chars on this line. */
1828 static unsigned int lines_printed, chars_printed;
1829
1830 /* Buffer and start column of buffered text, for doing smarter word-
1831 wrapping. When someone calls wrap_here(), we start buffering output
1832 that comes through fputs_filtered(). If we see a newline, we just
1833 spit it out and forget about the wrap_here(). If we see another
1834 wrap_here(), we spit it out and remember the newer one. If we see
1835 the end of the line, we spit out a newline, the indent, and then
1836 the buffered output. */
1837
1838 /* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1839 are waiting to be output (they have already been counted in chars_printed).
1840 When wrap_buffer[0] is null, the buffer is empty. */
1841 static char *wrap_buffer;
1842
1843 /* Pointer in wrap_buffer to the next character to fill. */
1844 static char *wrap_pointer;
1845
1846 /* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1847 is non-zero. */
1848 static char *wrap_indent;
1849
1850 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1851 is not in effect. */
1852 static int wrap_column;
1853 \f
1854
1855 /* Inialize the number of lines per page and chars per line. */
1856
1857 void
1858 init_page_info (void)
1859 {
1860 #if defined(TUI)
1861 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
1862 #endif
1863 {
1864 int rows, cols;
1865
1866 #if defined(__GO32__)
1867 rows = ScreenRows ();
1868 cols = ScreenCols ();
1869 lines_per_page = rows;
1870 chars_per_line = cols;
1871 #else
1872 /* Make sure Readline has initialized its terminal settings. */
1873 rl_reset_terminal (NULL);
1874
1875 /* Get the screen size from Readline. */
1876 rl_get_screen_size (&rows, &cols);
1877 lines_per_page = rows;
1878 chars_per_line = cols;
1879
1880 /* Readline should have fetched the termcap entry for us. */
1881 if (tgetnum ("li") < 0 || getenv ("EMACS"))
1882 {
1883 /* The number of lines per page is not mentioned in the
1884 terminal description. This probably means that paging is
1885 not useful (e.g. emacs shell window), so disable paging. */
1886 lines_per_page = UINT_MAX;
1887 }
1888
1889 /* FIXME: Get rid of this junk. */
1890 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1891 SIGWINCH_HANDLER (SIGWINCH);
1892 #endif
1893
1894 /* If the output is not a terminal, don't paginate it. */
1895 if (!ui_file_isatty (gdb_stdout))
1896 lines_per_page = UINT_MAX;
1897 #endif
1898 }
1899
1900 set_screen_size ();
1901 set_width ();
1902 }
1903
1904 /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1905
1906 static void
1907 set_screen_size (void)
1908 {
1909 int rows = lines_per_page;
1910 int cols = chars_per_line;
1911
1912 if (rows <= 0)
1913 rows = INT_MAX;
1914
1915 if (cols <= 0)
1916 cols = INT_MAX;
1917
1918 /* Update Readline's idea of the terminal size. */
1919 rl_set_screen_size (rows, cols);
1920 }
1921
1922 /* Reinitialize WRAP_BUFFER according to the current value of
1923 CHARS_PER_LINE. */
1924
1925 static void
1926 set_width (void)
1927 {
1928 if (chars_per_line == 0)
1929 init_page_info ();
1930
1931 if (!wrap_buffer)
1932 {
1933 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1934 wrap_buffer[0] = '\0';
1935 }
1936 else
1937 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1938 wrap_pointer = wrap_buffer; /* Start it at the beginning. */
1939 }
1940
1941 static void
1942 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1943 {
1944 set_screen_size ();
1945 set_width ();
1946 }
1947
1948 static void
1949 set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1950 {
1951 set_screen_size ();
1952 }
1953
1954 /* Wait, so the user can read what's on the screen. Prompt the user
1955 to continue by pressing RETURN. */
1956
1957 static void
1958 prompt_for_continue (void)
1959 {
1960 char *ignore;
1961 char cont_prompt[120];
1962
1963 if (annotation_level > 1)
1964 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
1965
1966 strcpy (cont_prompt,
1967 "---Type <return> to continue, or q <return> to quit---");
1968 if (annotation_level > 1)
1969 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1970
1971 /* We must do this *before* we call gdb_readline, else it will eventually
1972 call us -- thinking that we're trying to print beyond the end of the
1973 screen. */
1974 reinitialize_more_filter ();
1975
1976 immediate_quit++;
1977 /* On a real operating system, the user can quit with SIGINT.
1978 But not on GO32.
1979
1980 'q' is provided on all systems so users don't have to change habits
1981 from system to system, and because telling them what to do in
1982 the prompt is more user-friendly than expecting them to think of
1983 SIGINT. */
1984 /* Call readline, not gdb_readline, because GO32 readline handles control-C
1985 whereas control-C to gdb_readline will cause the user to get dumped
1986 out to DOS. */
1987 ignore = gdb_readline_wrapper (cont_prompt);
1988
1989 if (annotation_level > 1)
1990 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
1991
1992 if (ignore)
1993 {
1994 char *p = ignore;
1995 while (*p == ' ' || *p == '\t')
1996 ++p;
1997 if (p[0] == 'q')
1998 async_request_quit (0);
1999 xfree (ignore);
2000 }
2001 immediate_quit--;
2002
2003 /* Now we have to do this again, so that GDB will know that it doesn't
2004 need to save the ---Type <return>--- line at the top of the screen. */
2005 reinitialize_more_filter ();
2006
2007 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
2008 }
2009
2010 /* Reinitialize filter; ie. tell it to reset to original values. */
2011
2012 void
2013 reinitialize_more_filter (void)
2014 {
2015 lines_printed = 0;
2016 chars_printed = 0;
2017 }
2018
2019 /* Indicate that if the next sequence of characters overflows the line,
2020 a newline should be inserted here rather than when it hits the end.
2021 If INDENT is non-null, it is a string to be printed to indent the
2022 wrapped part on the next line. INDENT must remain accessible until
2023 the next call to wrap_here() or until a newline is printed through
2024 fputs_filtered().
2025
2026 If the line is already overfull, we immediately print a newline and
2027 the indentation, and disable further wrapping.
2028
2029 If we don't know the width of lines, but we know the page height,
2030 we must not wrap words, but should still keep track of newlines
2031 that were explicitly printed.
2032
2033 INDENT should not contain tabs, as that will mess up the char count
2034 on the next line. FIXME.
2035
2036 This routine is guaranteed to force out any output which has been
2037 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
2038 used to force out output from the wrap_buffer. */
2039
2040 void
2041 wrap_here (char *indent)
2042 {
2043 /* This should have been allocated, but be paranoid anyway. */
2044 if (!wrap_buffer)
2045 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
2046
2047 if (wrap_buffer[0])
2048 {
2049 *wrap_pointer = '\0';
2050 fputs_unfiltered (wrap_buffer, gdb_stdout);
2051 }
2052 wrap_pointer = wrap_buffer;
2053 wrap_buffer[0] = '\0';
2054 if (chars_per_line == UINT_MAX) /* No line overflow checking */
2055 {
2056 wrap_column = 0;
2057 }
2058 else if (chars_printed >= chars_per_line)
2059 {
2060 puts_filtered ("\n");
2061 if (indent != NULL)
2062 puts_filtered (indent);
2063 wrap_column = 0;
2064 }
2065 else
2066 {
2067 wrap_column = chars_printed;
2068 if (indent == NULL)
2069 wrap_indent = "";
2070 else
2071 wrap_indent = indent;
2072 }
2073 }
2074
2075 /* Print input string to gdb_stdout, filtered, with wrap,
2076 arranging strings in columns of n chars. String can be
2077 right or left justified in the column. Never prints
2078 trailing spaces. String should never be longer than
2079 width. FIXME: this could be useful for the EXAMINE
2080 command, which currently doesn't tabulate very well */
2081
2082 void
2083 puts_filtered_tabular (char *string, int width, int right)
2084 {
2085 int spaces = 0;
2086 int stringlen;
2087 char *spacebuf;
2088
2089 gdb_assert (chars_per_line > 0);
2090 if (chars_per_line == UINT_MAX)
2091 {
2092 fputs_filtered (string, gdb_stdout);
2093 fputs_filtered ("\n", gdb_stdout);
2094 return;
2095 }
2096
2097 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
2098 fputs_filtered ("\n", gdb_stdout);
2099
2100 if (width >= chars_per_line)
2101 width = chars_per_line - 1;
2102
2103 stringlen = strlen (string);
2104
2105 if (chars_printed > 0)
2106 spaces = width - (chars_printed - 1) % width - 1;
2107 if (right)
2108 spaces += width - stringlen;
2109
2110 spacebuf = alloca (spaces + 1);
2111 spacebuf[spaces] = '\0';
2112 while (spaces--)
2113 spacebuf[spaces] = ' ';
2114
2115 fputs_filtered (spacebuf, gdb_stdout);
2116 fputs_filtered (string, gdb_stdout);
2117 }
2118
2119
2120 /* Ensure that whatever gets printed next, using the filtered output
2121 commands, starts at the beginning of the line. I.E. if there is
2122 any pending output for the current line, flush it and start a new
2123 line. Otherwise do nothing. */
2124
2125 void
2126 begin_line (void)
2127 {
2128 if (chars_printed > 0)
2129 {
2130 puts_filtered ("\n");
2131 }
2132 }
2133
2134
2135 /* Like fputs but if FILTER is true, pause after every screenful.
2136
2137 Regardless of FILTER can wrap at points other than the final
2138 character of a line.
2139
2140 Unlike fputs, fputs_maybe_filtered does not return a value.
2141 It is OK for LINEBUFFER to be NULL, in which case just don't print
2142 anything.
2143
2144 Note that a longjmp to top level may occur in this routine (only if
2145 FILTER is true) (since prompt_for_continue may do so) so this
2146 routine should not be called when cleanups are not in place. */
2147
2148 static void
2149 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
2150 int filter)
2151 {
2152 const char *lineptr;
2153
2154 if (linebuffer == 0)
2155 return;
2156
2157 /* Don't do any filtering if it is disabled. */
2158 if ((stream != gdb_stdout) || !pagination_enabled
2159 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
2160 {
2161 fputs_unfiltered (linebuffer, stream);
2162 return;
2163 }
2164
2165 /* Go through and output each character. Show line extension
2166 when this is necessary; prompt user for new page when this is
2167 necessary. */
2168
2169 lineptr = linebuffer;
2170 while (*lineptr)
2171 {
2172 /* Possible new page. */
2173 if (filter && (lines_printed >= lines_per_page - 1))
2174 prompt_for_continue ();
2175
2176 while (*lineptr && *lineptr != '\n')
2177 {
2178 /* Print a single line. */
2179 if (*lineptr == '\t')
2180 {
2181 if (wrap_column)
2182 *wrap_pointer++ = '\t';
2183 else
2184 fputc_unfiltered ('\t', stream);
2185 /* Shifting right by 3 produces the number of tab stops
2186 we have already passed, and then adding one and
2187 shifting left 3 advances to the next tab stop. */
2188 chars_printed = ((chars_printed >> 3) + 1) << 3;
2189 lineptr++;
2190 }
2191 else
2192 {
2193 if (wrap_column)
2194 *wrap_pointer++ = *lineptr;
2195 else
2196 fputc_unfiltered (*lineptr, stream);
2197 chars_printed++;
2198 lineptr++;
2199 }
2200
2201 if (chars_printed >= chars_per_line)
2202 {
2203 unsigned int save_chars = chars_printed;
2204
2205 chars_printed = 0;
2206 lines_printed++;
2207 /* If we aren't actually wrapping, don't output newline --
2208 if chars_per_line is right, we probably just overflowed
2209 anyway; if it's wrong, let us keep going. */
2210 if (wrap_column)
2211 fputc_unfiltered ('\n', stream);
2212
2213 /* Possible new page. */
2214 if (lines_printed >= lines_per_page - 1)
2215 prompt_for_continue ();
2216
2217 /* Now output indentation and wrapped string */
2218 if (wrap_column)
2219 {
2220 fputs_unfiltered (wrap_indent, stream);
2221 *wrap_pointer = '\0'; /* Null-terminate saved stuff */
2222 fputs_unfiltered (wrap_buffer, stream); /* and eject it */
2223 /* FIXME, this strlen is what prevents wrap_indent from
2224 containing tabs. However, if we recurse to print it
2225 and count its chars, we risk trouble if wrap_indent is
2226 longer than (the user settable) chars_per_line.
2227 Note also that this can set chars_printed > chars_per_line
2228 if we are printing a long string. */
2229 chars_printed = strlen (wrap_indent)
2230 + (save_chars - wrap_column);
2231 wrap_pointer = wrap_buffer; /* Reset buffer */
2232 wrap_buffer[0] = '\0';
2233 wrap_column = 0; /* And disable fancy wrap */
2234 }
2235 }
2236 }
2237
2238 if (*lineptr == '\n')
2239 {
2240 chars_printed = 0;
2241 wrap_here ((char *) 0); /* Spit out chars, cancel further wraps */
2242 lines_printed++;
2243 fputc_unfiltered ('\n', stream);
2244 lineptr++;
2245 }
2246 }
2247 }
2248
2249 void
2250 fputs_filtered (const char *linebuffer, struct ui_file *stream)
2251 {
2252 fputs_maybe_filtered (linebuffer, stream, 1);
2253 }
2254
2255 int
2256 putchar_unfiltered (int c)
2257 {
2258 char buf = c;
2259 ui_file_write (gdb_stdout, &buf, 1);
2260 return c;
2261 }
2262
2263 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2264 May return nonlocally. */
2265
2266 int
2267 putchar_filtered (int c)
2268 {
2269 return fputc_filtered (c, gdb_stdout);
2270 }
2271
2272 int
2273 fputc_unfiltered (int c, struct ui_file *stream)
2274 {
2275 char buf = c;
2276 ui_file_write (stream, &buf, 1);
2277 return c;
2278 }
2279
2280 int
2281 fputc_filtered (int c, struct ui_file *stream)
2282 {
2283 char buf[2];
2284
2285 buf[0] = c;
2286 buf[1] = 0;
2287 fputs_filtered (buf, stream);
2288 return c;
2289 }
2290
2291 /* puts_debug is like fputs_unfiltered, except it prints special
2292 characters in printable fashion. */
2293
2294 void
2295 puts_debug (char *prefix, char *string, char *suffix)
2296 {
2297 int ch;
2298
2299 /* Print prefix and suffix after each line. */
2300 static int new_line = 1;
2301 static int return_p = 0;
2302 static char *prev_prefix = "";
2303 static char *prev_suffix = "";
2304
2305 if (*string == '\n')
2306 return_p = 0;
2307
2308 /* If the prefix is changing, print the previous suffix, a new line,
2309 and the new prefix. */
2310 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
2311 {
2312 fputs_unfiltered (prev_suffix, gdb_stdlog);
2313 fputs_unfiltered ("\n", gdb_stdlog);
2314 fputs_unfiltered (prefix, gdb_stdlog);
2315 }
2316
2317 /* Print prefix if we printed a newline during the previous call. */
2318 if (new_line)
2319 {
2320 new_line = 0;
2321 fputs_unfiltered (prefix, gdb_stdlog);
2322 }
2323
2324 prev_prefix = prefix;
2325 prev_suffix = suffix;
2326
2327 /* Output characters in a printable format. */
2328 while ((ch = *string++) != '\0')
2329 {
2330 switch (ch)
2331 {
2332 default:
2333 if (isprint (ch))
2334 fputc_unfiltered (ch, gdb_stdlog);
2335
2336 else
2337 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
2338 break;
2339
2340 case '\\':
2341 fputs_unfiltered ("\\\\", gdb_stdlog);
2342 break;
2343 case '\b':
2344 fputs_unfiltered ("\\b", gdb_stdlog);
2345 break;
2346 case '\f':
2347 fputs_unfiltered ("\\f", gdb_stdlog);
2348 break;
2349 case '\n':
2350 new_line = 1;
2351 fputs_unfiltered ("\\n", gdb_stdlog);
2352 break;
2353 case '\r':
2354 fputs_unfiltered ("\\r", gdb_stdlog);
2355 break;
2356 case '\t':
2357 fputs_unfiltered ("\\t", gdb_stdlog);
2358 break;
2359 case '\v':
2360 fputs_unfiltered ("\\v", gdb_stdlog);
2361 break;
2362 }
2363
2364 return_p = ch == '\r';
2365 }
2366
2367 /* Print suffix if we printed a newline. */
2368 if (new_line)
2369 {
2370 fputs_unfiltered (suffix, gdb_stdlog);
2371 fputs_unfiltered ("\n", gdb_stdlog);
2372 }
2373 }
2374
2375
2376 /* Print a variable number of ARGS using format FORMAT. If this
2377 information is going to put the amount written (since the last call
2378 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2379 call prompt_for_continue to get the users permision to continue.
2380
2381 Unlike fprintf, this function does not return a value.
2382
2383 We implement three variants, vfprintf (takes a vararg list and stream),
2384 fprintf (takes a stream to write on), and printf (the usual).
2385
2386 Note also that a longjmp to top level may occur in this routine
2387 (since prompt_for_continue may do so) so this routine should not be
2388 called when cleanups are not in place. */
2389
2390 static void
2391 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2392 va_list args, int filter)
2393 {
2394 char *linebuffer;
2395 struct cleanup *old_cleanups;
2396
2397 linebuffer = xstrvprintf (format, args);
2398 old_cleanups = make_cleanup (xfree, linebuffer);
2399 fputs_maybe_filtered (linebuffer, stream, filter);
2400 do_cleanups (old_cleanups);
2401 }
2402
2403
2404 void
2405 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
2406 {
2407 vfprintf_maybe_filtered (stream, format, args, 1);
2408 }
2409
2410 void
2411 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
2412 {
2413 char *linebuffer;
2414 struct cleanup *old_cleanups;
2415
2416 linebuffer = xstrvprintf (format, args);
2417 old_cleanups = make_cleanup (xfree, linebuffer);
2418 if (debug_timestamp && stream == gdb_stdlog)
2419 {
2420 struct timeval tm;
2421 char *timestamp;
2422 int len, need_nl;
2423
2424 gettimeofday (&tm, NULL);
2425
2426 len = strlen (linebuffer);
2427 need_nl = (len > 0 && linebuffer[len - 1] != '\n');
2428
2429 timestamp = xstrprintf ("%ld:%ld %s%s",
2430 (long) tm.tv_sec, (long) tm.tv_usec,
2431 linebuffer,
2432 need_nl ? "\n": "");
2433 make_cleanup (xfree, timestamp);
2434 fputs_unfiltered (timestamp, stream);
2435 }
2436 else
2437 fputs_unfiltered (linebuffer, stream);
2438 do_cleanups (old_cleanups);
2439 }
2440
2441 void
2442 vprintf_filtered (const char *format, va_list args)
2443 {
2444 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2445 }
2446
2447 void
2448 vprintf_unfiltered (const char *format, va_list args)
2449 {
2450 vfprintf_unfiltered (gdb_stdout, format, args);
2451 }
2452
2453 void
2454 fprintf_filtered (struct ui_file *stream, const char *format, ...)
2455 {
2456 va_list args;
2457 va_start (args, format);
2458 vfprintf_filtered (stream, format, args);
2459 va_end (args);
2460 }
2461
2462 void
2463 fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
2464 {
2465 va_list args;
2466 va_start (args, format);
2467 vfprintf_unfiltered (stream, format, args);
2468 va_end (args);
2469 }
2470
2471 /* Like fprintf_filtered, but prints its result indented.
2472 Called as fprintfi_filtered (spaces, stream, format, ...); */
2473
2474 void
2475 fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2476 ...)
2477 {
2478 va_list args;
2479 va_start (args, format);
2480 print_spaces_filtered (spaces, stream);
2481
2482 vfprintf_filtered (stream, format, args);
2483 va_end (args);
2484 }
2485
2486
2487 void
2488 printf_filtered (const char *format, ...)
2489 {
2490 va_list args;
2491 va_start (args, format);
2492 vfprintf_filtered (gdb_stdout, format, args);
2493 va_end (args);
2494 }
2495
2496
2497 void
2498 printf_unfiltered (const char *format, ...)
2499 {
2500 va_list args;
2501 va_start (args, format);
2502 vfprintf_unfiltered (gdb_stdout, format, args);
2503 va_end (args);
2504 }
2505
2506 /* Like printf_filtered, but prints it's result indented.
2507 Called as printfi_filtered (spaces, format, ...); */
2508
2509 void
2510 printfi_filtered (int spaces, const char *format, ...)
2511 {
2512 va_list args;
2513 va_start (args, format);
2514 print_spaces_filtered (spaces, gdb_stdout);
2515 vfprintf_filtered (gdb_stdout, format, args);
2516 va_end (args);
2517 }
2518
2519 /* Easy -- but watch out!
2520
2521 This routine is *not* a replacement for puts()! puts() appends a newline.
2522 This one doesn't, and had better not! */
2523
2524 void
2525 puts_filtered (const char *string)
2526 {
2527 fputs_filtered (string, gdb_stdout);
2528 }
2529
2530 void
2531 puts_unfiltered (const char *string)
2532 {
2533 fputs_unfiltered (string, gdb_stdout);
2534 }
2535
2536 /* Return a pointer to N spaces and a null. The pointer is good
2537 until the next call to here. */
2538 char *
2539 n_spaces (int n)
2540 {
2541 char *t;
2542 static char *spaces = 0;
2543 static int max_spaces = -1;
2544
2545 if (n > max_spaces)
2546 {
2547 if (spaces)
2548 xfree (spaces);
2549 spaces = (char *) xmalloc (n + 1);
2550 for (t = spaces + n; t != spaces;)
2551 *--t = ' ';
2552 spaces[n] = '\0';
2553 max_spaces = n;
2554 }
2555
2556 return spaces + max_spaces - n;
2557 }
2558
2559 /* Print N spaces. */
2560 void
2561 print_spaces_filtered (int n, struct ui_file *stream)
2562 {
2563 fputs_filtered (n_spaces (n), stream);
2564 }
2565 \f
2566 /* C++/ObjC demangler stuff. */
2567
2568 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2569 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2570 If the name is not mangled, or the language for the name is unknown, or
2571 demangling is off, the name is printed in its "raw" form. */
2572
2573 void
2574 fprintf_symbol_filtered (struct ui_file *stream, char *name,
2575 enum language lang, int arg_mode)
2576 {
2577 char *demangled;
2578
2579 if (name != NULL)
2580 {
2581 /* If user wants to see raw output, no problem. */
2582 if (!demangle)
2583 {
2584 fputs_filtered (name, stream);
2585 }
2586 else
2587 {
2588 demangled = language_demangle (language_def (lang), name, arg_mode);
2589 fputs_filtered (demangled ? demangled : name, stream);
2590 if (demangled != NULL)
2591 {
2592 xfree (demangled);
2593 }
2594 }
2595 }
2596 }
2597
2598 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2599 differences in whitespace. Returns 0 if they match, non-zero if they
2600 don't (slightly different than strcmp()'s range of return values).
2601
2602 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2603 This "feature" is useful when searching for matching C++ function names
2604 (such as if the user types 'break FOO', where FOO is a mangled C++
2605 function). */
2606
2607 int
2608 strcmp_iw (const char *string1, const char *string2)
2609 {
2610 while ((*string1 != '\0') && (*string2 != '\0'))
2611 {
2612 while (isspace (*string1))
2613 {
2614 string1++;
2615 }
2616 while (isspace (*string2))
2617 {
2618 string2++;
2619 }
2620 if (*string1 != *string2)
2621 {
2622 break;
2623 }
2624 if (*string1 != '\0')
2625 {
2626 string1++;
2627 string2++;
2628 }
2629 }
2630 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2631 }
2632
2633 /* This is like strcmp except that it ignores whitespace and treats
2634 '(' as the first non-NULL character in terms of ordering. Like
2635 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2636 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2637 according to that ordering.
2638
2639 If a list is sorted according to this function and if you want to
2640 find names in the list that match some fixed NAME according to
2641 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2642 where this function would put NAME.
2643
2644 Here are some examples of why using strcmp to sort is a bad idea:
2645
2646 Whitespace example:
2647
2648 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2649 we try to do a search for "foo<char*>", strcmp will locate this
2650 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2651 will start looking at strings beginning with "goo", and will never
2652 see the correct match of "foo<char *>".
2653
2654 Parenthesis example:
2655
2656 In practice, this is less like to be an issue, but I'll give it a
2657 shot. Let's assume that '$' is a legitimate character to occur in
2658 symbols. (Which may well even be the case on some systems.) Then
2659 say that the partial symbol table contains "foo$" and "foo(int)".
2660 strcmp will put them in this order, since '$' < '('. Now, if the
2661 user searches for "foo", then strcmp will sort "foo" before "foo$".
2662 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2663 "foo") is false, so it won't proceed to the actual match of
2664 "foo(int)" with "foo". */
2665
2666 int
2667 strcmp_iw_ordered (const char *string1, const char *string2)
2668 {
2669 while ((*string1 != '\0') && (*string2 != '\0'))
2670 {
2671 while (isspace (*string1))
2672 {
2673 string1++;
2674 }
2675 while (isspace (*string2))
2676 {
2677 string2++;
2678 }
2679 if (*string1 != *string2)
2680 {
2681 break;
2682 }
2683 if (*string1 != '\0')
2684 {
2685 string1++;
2686 string2++;
2687 }
2688 }
2689
2690 switch (*string1)
2691 {
2692 /* Characters are non-equal unless they're both '\0'; we want to
2693 make sure we get the comparison right according to our
2694 comparison in the cases where one of them is '\0' or '('. */
2695 case '\0':
2696 if (*string2 == '\0')
2697 return 0;
2698 else
2699 return -1;
2700 case '(':
2701 if (*string2 == '\0')
2702 return 1;
2703 else
2704 return -1;
2705 default:
2706 if (*string2 == '(')
2707 return 1;
2708 else
2709 return *string1 - *string2;
2710 }
2711 }
2712
2713 /* A simple comparison function with opposite semantics to strcmp. */
2714
2715 int
2716 streq (const char *lhs, const char *rhs)
2717 {
2718 return !strcmp (lhs, rhs);
2719 }
2720 \f
2721
2722 /*
2723 ** subset_compare()
2724 ** Answer whether string_to_compare is a full or partial match to
2725 ** template_string. The partial match must be in sequence starting
2726 ** at index 0.
2727 */
2728 int
2729 subset_compare (char *string_to_compare, char *template_string)
2730 {
2731 int match;
2732 if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2733 && strlen (string_to_compare) <= strlen (template_string))
2734 match =
2735 (strncmp
2736 (template_string, string_to_compare, strlen (string_to_compare)) == 0);
2737 else
2738 match = 0;
2739 return match;
2740 }
2741
2742 static void
2743 pagination_on_command (char *arg, int from_tty)
2744 {
2745 pagination_enabled = 1;
2746 }
2747
2748 static void
2749 pagination_off_command (char *arg, int from_tty)
2750 {
2751 pagination_enabled = 0;
2752 }
2753
2754 static void
2755 show_debug_timestamp (struct ui_file *file, int from_tty,
2756 struct cmd_list_element *c, const char *value)
2757 {
2758 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"), value);
2759 }
2760 \f
2761
2762 void
2763 initialize_utils (void)
2764 {
2765 struct cmd_list_element *c;
2766
2767 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
2768 Set number of characters gdb thinks are in a line."), _("\
2769 Show number of characters gdb thinks are in a line."), NULL,
2770 set_width_command,
2771 show_chars_per_line,
2772 &setlist, &showlist);
2773
2774 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
2775 Set number of lines gdb thinks are in a page."), _("\
2776 Show number of lines gdb thinks are in a page."), NULL,
2777 set_height_command,
2778 show_lines_per_page,
2779 &setlist, &showlist);
2780
2781 init_page_info ();
2782
2783 add_setshow_boolean_cmd ("demangle", class_support, &demangle, _("\
2784 Set demangling of encoded C++/ObjC names when displaying symbols."), _("\
2785 Show demangling of encoded C++/ObjC names when displaying symbols."), NULL,
2786 NULL,
2787 show_demangle,
2788 &setprintlist, &showprintlist);
2789
2790 add_setshow_boolean_cmd ("pagination", class_support,
2791 &pagination_enabled, _("\
2792 Set state of pagination."), _("\
2793 Show state of pagination."), NULL,
2794 NULL,
2795 show_pagination_enabled,
2796 &setlist, &showlist);
2797
2798 if (xdb_commands)
2799 {
2800 add_com ("am", class_support, pagination_on_command,
2801 _("Enable pagination"));
2802 add_com ("sm", class_support, pagination_off_command,
2803 _("Disable pagination"));
2804 }
2805
2806 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2807 &sevenbit_strings, _("\
2808 Set printing of 8-bit characters in strings as \\nnn."), _("\
2809 Show printing of 8-bit characters in strings as \\nnn."), NULL,
2810 NULL,
2811 show_sevenbit_strings,
2812 &setprintlist, &showprintlist);
2813
2814 add_setshow_boolean_cmd ("asm-demangle", class_support, &asm_demangle, _("\
2815 Set demangling of C++/ObjC names in disassembly listings."), _("\
2816 Show demangling of C++/ObjC names in disassembly listings."), NULL,
2817 NULL,
2818 show_asm_demangle,
2819 &setprintlist, &showprintlist);
2820
2821 add_setshow_boolean_cmd ("timestamp", class_maintenance,
2822 &debug_timestamp, _("\
2823 Set timestamping of debugging messages."), _("\
2824 Show timestamping of debugging messages."), _("\
2825 When set, debugging messages will be marked with seconds and microseconds."),
2826 NULL,
2827 show_debug_timestamp,
2828 &setdebuglist, &showdebuglist);
2829 }
2830
2831 /* Machine specific function to handle SIGWINCH signal. */
2832
2833 #ifdef SIGWINCH_HANDLER_BODY
2834 SIGWINCH_HANDLER_BODY
2835 #endif
2836 /* print routines to handle variable size regs, etc. */
2837 /* temporary storage using circular buffer */
2838 #define NUMCELLS 16
2839 #define CELLSIZE 50
2840 static char *
2841 get_cell (void)
2842 {
2843 static char buf[NUMCELLS][CELLSIZE];
2844 static int cell = 0;
2845 if (++cell >= NUMCELLS)
2846 cell = 0;
2847 return buf[cell];
2848 }
2849
2850 int
2851 strlen_paddr (void)
2852 {
2853 return (gdbarch_addr_bit (current_gdbarch) / 8 * 2);
2854 }
2855
2856 char *
2857 paddr (CORE_ADDR addr)
2858 {
2859 return phex (addr, gdbarch_addr_bit (current_gdbarch) / 8);
2860 }
2861
2862 char *
2863 paddr_nz (CORE_ADDR addr)
2864 {
2865 return phex_nz (addr, gdbarch_addr_bit (current_gdbarch) / 8);
2866 }
2867
2868 const char *
2869 paddress (CORE_ADDR addr)
2870 {
2871 /* Truncate address to the size of a target address, avoiding shifts
2872 larger or equal than the width of a CORE_ADDR. The local
2873 variable ADDR_BIT stops the compiler reporting a shift overflow
2874 when it won't occur. */
2875 /* NOTE: This assumes that the significant address information is
2876 kept in the least significant bits of ADDR - the upper bits were
2877 either zero or sign extended. Should gdbarch_address_to_pointer or
2878 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2879
2880 int addr_bit = gdbarch_addr_bit (current_gdbarch);
2881
2882 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2883 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2884 return hex_string (addr);
2885 }
2886
2887 static char *
2888 decimal2str (char *sign, ULONGEST addr, int width)
2889 {
2890 /* Steal code from valprint.c:print_decimal(). Should this worry
2891 about the real size of addr as the above does? */
2892 unsigned long temp[3];
2893 char *str = get_cell ();
2894
2895 int i = 0;
2896 do
2897 {
2898 temp[i] = addr % (1000 * 1000 * 1000);
2899 addr /= (1000 * 1000 * 1000);
2900 i++;
2901 width -= 9;
2902 }
2903 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2904
2905 width += 9;
2906 if (width < 0)
2907 width = 0;
2908
2909 switch (i)
2910 {
2911 case 1:
2912 xsnprintf (str, CELLSIZE, "%s%0*lu", sign, width, temp[0]);
2913 break;
2914 case 2:
2915 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu", sign, width,
2916 temp[1], temp[0]);
2917 break;
2918 case 3:
2919 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu%09lu", sign, width,
2920 temp[2], temp[1], temp[0]);
2921 break;
2922 default:
2923 internal_error (__FILE__, __LINE__,
2924 _("failed internal consistency check"));
2925 }
2926
2927 return str;
2928 }
2929
2930 static char *
2931 octal2str (ULONGEST addr, int width)
2932 {
2933 unsigned long temp[3];
2934 char *str = get_cell ();
2935
2936 int i = 0;
2937 do
2938 {
2939 temp[i] = addr % (0100000 * 0100000);
2940 addr /= (0100000 * 0100000);
2941 i++;
2942 width -= 10;
2943 }
2944 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2945
2946 width += 10;
2947 if (width < 0)
2948 width = 0;
2949
2950 switch (i)
2951 {
2952 case 1:
2953 if (temp[0] == 0)
2954 xsnprintf (str, CELLSIZE, "%*o", width, 0);
2955 else
2956 xsnprintf (str, CELLSIZE, "0%0*lo", width, temp[0]);
2957 break;
2958 case 2:
2959 xsnprintf (str, CELLSIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
2960 break;
2961 case 3:
2962 xsnprintf (str, CELLSIZE, "0%0*lo%010lo%010lo", width,
2963 temp[2], temp[1], temp[0]);
2964 break;
2965 default:
2966 internal_error (__FILE__, __LINE__,
2967 _("failed internal consistency check"));
2968 }
2969
2970 return str;
2971 }
2972
2973 char *
2974 pulongest (ULONGEST u)
2975 {
2976 return decimal2str ("", u, 0);
2977 }
2978
2979 char *
2980 plongest (LONGEST l)
2981 {
2982 if (l < 0)
2983 return decimal2str ("-", -l, 0);
2984 else
2985 return decimal2str ("", l, 0);
2986 }
2987
2988 /* Eliminate warning from compiler on 32-bit systems. */
2989 static int thirty_two = 32;
2990
2991 char *
2992 phex (ULONGEST l, int sizeof_l)
2993 {
2994 char *str;
2995
2996 switch (sizeof_l)
2997 {
2998 case 8:
2999 str = get_cell ();
3000 xsnprintf (str, CELLSIZE, "%08lx%08lx",
3001 (unsigned long) (l >> thirty_two),
3002 (unsigned long) (l & 0xffffffff));
3003 break;
3004 case 4:
3005 str = get_cell ();
3006 xsnprintf (str, CELLSIZE, "%08lx", (unsigned long) l);
3007 break;
3008 case 2:
3009 str = get_cell ();
3010 xsnprintf (str, CELLSIZE, "%04x", (unsigned short) (l & 0xffff));
3011 break;
3012 default:
3013 str = phex (l, sizeof (l));
3014 break;
3015 }
3016
3017 return str;
3018 }
3019
3020 char *
3021 phex_nz (ULONGEST l, int sizeof_l)
3022 {
3023 char *str;
3024
3025 switch (sizeof_l)
3026 {
3027 case 8:
3028 {
3029 unsigned long high = (unsigned long) (l >> thirty_two);
3030 str = get_cell ();
3031 if (high == 0)
3032 xsnprintf (str, CELLSIZE, "%lx",
3033 (unsigned long) (l & 0xffffffff));
3034 else
3035 xsnprintf (str, CELLSIZE, "%lx%08lx", high,
3036 (unsigned long) (l & 0xffffffff));
3037 break;
3038 }
3039 case 4:
3040 str = get_cell ();
3041 xsnprintf (str, CELLSIZE, "%lx", (unsigned long) l);
3042 break;
3043 case 2:
3044 str = get_cell ();
3045 xsnprintf (str, CELLSIZE, "%x", (unsigned short) (l & 0xffff));
3046 break;
3047 default:
3048 str = phex_nz (l, sizeof (l));
3049 break;
3050 }
3051
3052 return str;
3053 }
3054
3055 /* Converts a LONGEST to a C-format hexadecimal literal and stores it
3056 in a static string. Returns a pointer to this string. */
3057 char *
3058 hex_string (LONGEST num)
3059 {
3060 char *result = get_cell ();
3061 xsnprintf (result, CELLSIZE, "0x%s", phex_nz (num, sizeof (num)));
3062 return result;
3063 }
3064
3065 /* Converts a LONGEST number to a C-format hexadecimal literal and
3066 stores it in a static string. Returns a pointer to this string
3067 that is valid until the next call. The number is padded on the
3068 left with 0s to at least WIDTH characters. */
3069 char *
3070 hex_string_custom (LONGEST num, int width)
3071 {
3072 char *result = get_cell ();
3073 char *result_end = result + CELLSIZE - 1;
3074 const char *hex = phex_nz (num, sizeof (num));
3075 int hex_len = strlen (hex);
3076
3077 if (hex_len > width)
3078 width = hex_len;
3079 if (width + 2 >= CELLSIZE)
3080 internal_error (__FILE__, __LINE__,
3081 _("hex_string_custom: insufficient space to store result"));
3082
3083 strcpy (result_end - width - 2, "0x");
3084 memset (result_end - width, '0', width);
3085 strcpy (result_end - hex_len, hex);
3086 return result_end - width - 2;
3087 }
3088
3089 /* Convert VAL to a numeral in the given radix. For
3090 * radix 10, IS_SIGNED may be true, indicating a signed quantity;
3091 * otherwise VAL is interpreted as unsigned. If WIDTH is supplied,
3092 * it is the minimum width (0-padded if needed). USE_C_FORMAT means
3093 * to use C format in all cases. If it is false, then 'x'
3094 * and 'o' formats do not include a prefix (0x or leading 0). */
3095
3096 char *
3097 int_string (LONGEST val, int radix, int is_signed, int width,
3098 int use_c_format)
3099 {
3100 switch (radix)
3101 {
3102 case 16:
3103 {
3104 char *result;
3105 if (width == 0)
3106 result = hex_string (val);
3107 else
3108 result = hex_string_custom (val, width);
3109 if (! use_c_format)
3110 result += 2;
3111 return result;
3112 }
3113 case 10:
3114 {
3115 if (is_signed && val < 0)
3116 return decimal2str ("-", -val, width);
3117 else
3118 return decimal2str ("", val, width);
3119 }
3120 case 8:
3121 {
3122 char *result = octal2str (val, width);
3123 if (use_c_format || val == 0)
3124 return result;
3125 else
3126 return result + 1;
3127 }
3128 default:
3129 internal_error (__FILE__, __LINE__,
3130 _("failed internal consistency check"));
3131 }
3132 }
3133
3134 /* Convert a CORE_ADDR into a string. */
3135 const char *
3136 core_addr_to_string (const CORE_ADDR addr)
3137 {
3138 char *str = get_cell ();
3139 strcpy (str, "0x");
3140 strcat (str, phex (addr, sizeof (addr)));
3141 return str;
3142 }
3143
3144 const char *
3145 core_addr_to_string_nz (const CORE_ADDR addr)
3146 {
3147 char *str = get_cell ();
3148 strcpy (str, "0x");
3149 strcat (str, phex_nz (addr, sizeof (addr)));
3150 return str;
3151 }
3152
3153 /* Convert a string back into a CORE_ADDR. */
3154 CORE_ADDR
3155 string_to_core_addr (const char *my_string)
3156 {
3157 int addr_bit = gdbarch_addr_bit (current_gdbarch);
3158 CORE_ADDR addr = 0;
3159
3160 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
3161 {
3162 /* Assume that it is in hex. */
3163 int i;
3164 for (i = 2; my_string[i] != '\0'; i++)
3165 {
3166 if (isdigit (my_string[i]))
3167 addr = (my_string[i] - '0') + (addr * 16);
3168 else if (isxdigit (my_string[i]))
3169 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
3170 else
3171 error (_("invalid hex \"%s\""), my_string);
3172 }
3173
3174 /* Not very modular, but if the executable format expects
3175 addresses to be sign-extended, then do so if the address was
3176 specified with only 32 significant bits. Really this should
3177 be determined by the target architecture, not by the object
3178 file. */
3179 if (i - 2 == addr_bit / 4
3180 && exec_bfd
3181 && bfd_get_sign_extend_vma (exec_bfd))
3182 addr = (addr ^ ((CORE_ADDR) 1 << (addr_bit - 1)))
3183 - ((CORE_ADDR) 1 << (addr_bit - 1));
3184 }
3185 else
3186 {
3187 /* Assume that it is in decimal. */
3188 int i;
3189 for (i = 0; my_string[i] != '\0'; i++)
3190 {
3191 if (isdigit (my_string[i]))
3192 addr = (my_string[i] - '0') + (addr * 10);
3193 else
3194 error (_("invalid decimal \"%s\""), my_string);
3195 }
3196 }
3197
3198 return addr;
3199 }
3200
3201 const char *
3202 host_address_to_string (const void *addr)
3203 {
3204 char *str = get_cell ();
3205
3206 xsnprintf (str, CELLSIZE, "0x%s", phex_nz ((uintptr_t) addr, sizeof (addr)));
3207 return str;
3208 }
3209
3210 char *
3211 gdb_realpath (const char *filename)
3212 {
3213 /* Method 1: The system has a compile time upper bound on a filename
3214 path. Use that and realpath() to canonicalize the name. This is
3215 the most common case. Note that, if there isn't a compile time
3216 upper bound, you want to avoid realpath() at all costs. */
3217 #if defined(HAVE_REALPATH)
3218 {
3219 # if defined (PATH_MAX)
3220 char buf[PATH_MAX];
3221 # define USE_REALPATH
3222 # elif defined (MAXPATHLEN)
3223 char buf[MAXPATHLEN];
3224 # define USE_REALPATH
3225 # endif
3226 # if defined (USE_REALPATH)
3227 const char *rp = realpath (filename, buf);
3228 if (rp == NULL)
3229 rp = filename;
3230 return xstrdup (rp);
3231 # endif
3232 }
3233 #endif /* HAVE_REALPATH */
3234
3235 /* Method 2: The host system (i.e., GNU) has the function
3236 canonicalize_file_name() which malloc's a chunk of memory and
3237 returns that, use that. */
3238 #if defined(HAVE_CANONICALIZE_FILE_NAME)
3239 {
3240 char *rp = canonicalize_file_name (filename);
3241 if (rp == NULL)
3242 return xstrdup (filename);
3243 else
3244 return rp;
3245 }
3246 #endif
3247
3248 /* FIXME: cagney/2002-11-13:
3249
3250 Method 2a: Use realpath() with a NULL buffer. Some systems, due
3251 to the problems described in in method 3, have modified their
3252 realpath() implementation so that it will allocate a buffer when
3253 NULL is passed in. Before this can be used, though, some sort of
3254 configure time test would need to be added. Otherwize the code
3255 will likely core dump. */
3256
3257 /* Method 3: Now we're getting desperate! The system doesn't have a
3258 compile time buffer size and no alternative function. Query the
3259 OS, using pathconf(), for the buffer limit. Care is needed
3260 though, some systems do not limit PATH_MAX (return -1 for
3261 pathconf()) making it impossible to pass a correctly sized buffer
3262 to realpath() (it could always overflow). On those systems, we
3263 skip this. */
3264 #if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
3265 {
3266 /* Find out the max path size. */
3267 long path_max = pathconf ("/", _PC_PATH_MAX);
3268 if (path_max > 0)
3269 {
3270 /* PATH_MAX is bounded. */
3271 char *buf = alloca (path_max);
3272 char *rp = realpath (filename, buf);
3273 return xstrdup (rp ? rp : filename);
3274 }
3275 }
3276 #endif
3277
3278 /* This system is a lost cause, just dup the buffer. */
3279 return xstrdup (filename);
3280 }
3281
3282 /* Return a copy of FILENAME, with its directory prefix canonicalized
3283 by gdb_realpath. */
3284
3285 char *
3286 xfullpath (const char *filename)
3287 {
3288 const char *base_name = lbasename (filename);
3289 char *dir_name;
3290 char *real_path;
3291 char *result;
3292
3293 /* Extract the basename of filename, and return immediately
3294 a copy of filename if it does not contain any directory prefix. */
3295 if (base_name == filename)
3296 return xstrdup (filename);
3297
3298 dir_name = alloca ((size_t) (base_name - filename + 2));
3299 /* Allocate enough space to store the dir_name + plus one extra
3300 character sometimes needed under Windows (see below), and
3301 then the closing \000 character */
3302 strncpy (dir_name, filename, base_name - filename);
3303 dir_name[base_name - filename] = '\000';
3304
3305 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
3306 /* We need to be careful when filename is of the form 'd:foo', which
3307 is equivalent of d:./foo, which is totally different from d:/foo. */
3308 if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
3309 {
3310 dir_name[2] = '.';
3311 dir_name[3] = '\000';
3312 }
3313 #endif
3314
3315 /* Canonicalize the directory prefix, and build the resulting
3316 filename. If the dirname realpath already contains an ending
3317 directory separator, avoid doubling it. */
3318 real_path = gdb_realpath (dir_name);
3319 if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
3320 result = concat (real_path, base_name, (char *)NULL);
3321 else
3322 result = concat (real_path, SLASH_STRING, base_name, (char *)NULL);
3323
3324 xfree (real_path);
3325 return result;
3326 }
3327
3328
3329 /* This is the 32-bit CRC function used by the GNU separate debug
3330 facility. An executable may contain a section named
3331 .gnu_debuglink, which holds the name of a separate executable file
3332 containing its debug info, and a checksum of that file's contents,
3333 computed using this function. */
3334 unsigned long
3335 gnu_debuglink_crc32 (unsigned long crc, unsigned char *buf, size_t len)
3336 {
3337 static const unsigned long crc32_table[256] = {
3338 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
3339 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
3340 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
3341 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
3342 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
3343 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
3344 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
3345 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
3346 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
3347 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
3348 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
3349 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
3350 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
3351 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
3352 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
3353 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
3354 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
3355 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
3356 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
3357 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
3358 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
3359 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
3360 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
3361 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
3362 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
3363 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
3364 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
3365 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
3366 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
3367 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
3368 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
3369 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
3370 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
3371 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
3372 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
3373 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
3374 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
3375 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
3376 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
3377 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
3378 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
3379 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
3380 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
3381 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
3382 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
3383 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
3384 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
3385 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
3386 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
3387 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
3388 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
3389 0x2d02ef8d
3390 };
3391 unsigned char *end;
3392
3393 crc = ~crc & 0xffffffff;
3394 for (end = buf + len; buf < end; ++buf)
3395 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
3396 return ~crc & 0xffffffff;;
3397 }
3398
3399 ULONGEST
3400 align_up (ULONGEST v, int n)
3401 {
3402 /* Check that N is really a power of two. */
3403 gdb_assert (n && (n & (n-1)) == 0);
3404 return (v + n - 1) & -n;
3405 }
3406
3407 ULONGEST
3408 align_down (ULONGEST v, int n)
3409 {
3410 /* Check that N is really a power of two. */
3411 gdb_assert (n && (n & (n-1)) == 0);
3412 return (v & -n);
3413 }
3414
3415 /* Allocation function for the libiberty hash table which uses an
3416 obstack. The obstack is passed as DATA. */
3417
3418 void *
3419 hashtab_obstack_allocate (void *data, size_t size, size_t count)
3420 {
3421 unsigned int total = size * count;
3422 void *ptr = obstack_alloc ((struct obstack *) data, total);
3423 memset (ptr, 0, total);
3424 return ptr;
3425 }
3426
3427 /* Trivial deallocation function for the libiberty splay tree and hash
3428 table - don't deallocate anything. Rely on later deletion of the
3429 obstack. DATA will be the obstack, although it is not needed
3430 here. */
3431
3432 void
3433 dummy_obstack_deallocate (void *object, void *data)
3434 {
3435 return;
3436 }
3437
3438 /* The bit offset of the highest byte in a ULONGEST, for overflow
3439 checking. */
3440
3441 #define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
3442
3443 /* True (non-zero) iff DIGIT is a valid digit in radix BASE,
3444 where 2 <= BASE <= 36. */
3445
3446 static int
3447 is_digit_in_base (unsigned char digit, int base)
3448 {
3449 if (!isalnum (digit))
3450 return 0;
3451 if (base <= 10)
3452 return (isdigit (digit) && digit < base + '0');
3453 else
3454 return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
3455 }
3456
3457 static int
3458 digit_to_int (unsigned char c)
3459 {
3460 if (isdigit (c))
3461 return c - '0';
3462 else
3463 return tolower (c) - 'a' + 10;
3464 }
3465
3466 /* As for strtoul, but for ULONGEST results. */
3467
3468 ULONGEST
3469 strtoulst (const char *num, const char **trailer, int base)
3470 {
3471 unsigned int high_part;
3472 ULONGEST result;
3473 int minus = 0;
3474 int i = 0;
3475
3476 /* Skip leading whitespace. */
3477 while (isspace (num[i]))
3478 i++;
3479
3480 /* Handle prefixes. */
3481 if (num[i] == '+')
3482 i++;
3483 else if (num[i] == '-')
3484 {
3485 minus = 1;
3486 i++;
3487 }
3488
3489 if (base == 0 || base == 16)
3490 {
3491 if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
3492 {
3493 i += 2;
3494 if (base == 0)
3495 base = 16;
3496 }
3497 }
3498
3499 if (base == 0 && num[i] == '0')
3500 base = 8;
3501
3502 if (base == 0)
3503 base = 10;
3504
3505 if (base < 2 || base > 36)
3506 {
3507 errno = EINVAL;
3508 return 0;
3509 }
3510
3511 result = high_part = 0;
3512 for (; is_digit_in_base (num[i], base); i += 1)
3513 {
3514 result = result * base + digit_to_int (num[i]);
3515 high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
3516 result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
3517 if (high_part > 0xff)
3518 {
3519 errno = ERANGE;
3520 result = ~ (ULONGEST) 0;
3521 high_part = 0;
3522 minus = 0;
3523 break;
3524 }
3525 }
3526
3527 if (trailer != NULL)
3528 *trailer = &num[i];
3529
3530 result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
3531 if (minus)
3532 return -result;
3533 else
3534 return result;
3535 }
3536
3537 /* Simple, portable version of dirname that does not modify its
3538 argument. */
3539
3540 char *
3541 ldirname (const char *filename)
3542 {
3543 const char *base = lbasename (filename);
3544 char *dirname;
3545
3546 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
3547 --base;
3548
3549 if (base == filename)
3550 return NULL;
3551
3552 dirname = xmalloc (base - filename + 2);
3553 memcpy (dirname, filename, base - filename);
3554
3555 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
3556 create "d:./bar" later instead of the (different) "d:/bar". */
3557 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
3558 && !IS_DIR_SEPARATOR (filename[0]))
3559 dirname[base++ - filename] = '.';
3560
3561 dirname[base - filename] = '\0';
3562 return dirname;
3563 }
3564
3565 /* Call libiberty's buildargv, and return the result.
3566 If buildargv fails due to out-of-memory, call nomem.
3567 Therefore, the returned value is guaranteed to be non-NULL,
3568 unless the parameter itself is NULL. */
3569
3570 char **
3571 gdb_buildargv (const char *s)
3572 {
3573 char **argv = buildargv (s);
3574 if (s != NULL && argv == NULL)
3575 nomem (0);
3576 return argv;
3577 }
3578
3579 /* Provide a prototype to silence -Wmissing-prototypes. */
3580 extern initialize_file_ftype _initialize_utils;
3581
3582 void
3583 _initialize_utils (void)
3584 {
3585 add_internal_problem_command (&internal_error_problem);
3586 add_internal_problem_command (&internal_warning_problem);
3587 }
This page took 0.104239 seconds and 4 git commands to generate.