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