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