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