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