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