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