0d2595a050a6209ab2981918703ab41f7b54a7ef
[deliverable/binutils-gdb.git] / gdb / utils.c
1 /* General utility routines for GDB, the GNU debugger.
2 Copyright 1986, 1989, 1990-1992, 1995, 1996, 1998, 2000, 2001
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
21
22 #include "defs.h"
23 #include <ctype.h>
24 #include "gdb_string.h"
25 #include "event-top.h"
26
27 #ifdef HAVE_CURSES_H
28 #include <curses.h>
29 #endif
30 #ifdef HAVE_TERM_H
31 #include <term.h>
32 #endif
33
34 #ifdef __GO32__
35 #include <pc.h>
36 #endif
37
38 /* SunOS's curses.h has a '#define reg register' in it. Thank you Sun. */
39 #ifdef reg
40 #undef reg
41 #endif
42
43 #include <signal.h>
44 #include "gdbcmd.h"
45 #include "serial.h"
46 #include "bfd.h"
47 #include "target.h"
48 #include "demangle.h"
49 #include "expression.h"
50 #include "language.h"
51 #include "annotate.h"
52
53 #include "inferior.h" /* for signed_pointer_to_address */
54
55 #include <readline/readline.h>
56
57 #undef XMALLOC
58 #define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
59
60 /* readline defines this. */
61 #undef savestring
62
63 void (*error_begin_hook) (void);
64
65 /* Holds the last error message issued by gdb */
66
67 static struct ui_file *gdb_lasterr;
68
69 /* Prototypes for local functions */
70
71 static void vfprintf_maybe_filtered (struct ui_file *, const char *,
72 va_list, int);
73
74 static void fputs_maybe_filtered (const char *, struct ui_file *, int);
75
76 #if defined (USE_MMALLOC) && !defined (NO_MMCHECK)
77 static void malloc_botch (void);
78 #endif
79
80 static void prompt_for_continue (void);
81
82 static void set_width_command (char *, int, struct cmd_list_element *);
83
84 static void set_width (void);
85
86 /* Chain of cleanup actions established with make_cleanup,
87 to be executed if an error happens. */
88
89 static struct cleanup *cleanup_chain; /* cleaned up after a failed command */
90 static struct cleanup *final_cleanup_chain; /* cleaned up when gdb exits */
91 static struct cleanup *run_cleanup_chain; /* cleaned up on each 'run' */
92 static struct cleanup *exec_cleanup_chain; /* cleaned up on each execution command */
93 /* cleaned up on each error from within an execution command */
94 static struct cleanup *exec_error_cleanup_chain;
95
96 /* Pointer to what is left to do for an execution command after the
97 target stops. Used only in asynchronous mode, by targets that
98 support async execution. The finish and until commands use it. So
99 does the target extended-remote command. */
100 struct continuation *cmd_continuation;
101 struct continuation *intermediate_continuation;
102
103 /* Nonzero if we have job control. */
104
105 int job_control;
106
107 /* Nonzero means a quit has been requested. */
108
109 int quit_flag;
110
111 /* Nonzero means quit immediately if Control-C is typed now, rather
112 than waiting until QUIT is executed. Be careful in setting this;
113 code which executes with immediate_quit set has to be very careful
114 about being able to deal with being interrupted at any time. It is
115 almost always better to use QUIT; the only exception I can think of
116 is being able to quit out of a system call (using EINTR loses if
117 the SIGINT happens between the previous QUIT and the system call).
118 To immediately quit in the case in which a SIGINT happens between
119 the previous QUIT and setting immediate_quit (desirable anytime we
120 expect to block), call QUIT after setting immediate_quit. */
121
122 int immediate_quit;
123
124 /* Nonzero means that encoded C++ names should be printed out in their
125 C++ form rather than raw. */
126
127 int demangle = 1;
128
129 /* Nonzero means that encoded C++ names should be printed out in their
130 C++ form even in assembler language displays. If this is set, but
131 DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
132
133 int asm_demangle = 0;
134
135 /* Nonzero means that strings with character values >0x7F should be printed
136 as octal escapes. Zero means just print the value (e.g. it's an
137 international character, and the terminal or window can cope.) */
138
139 int sevenbit_strings = 0;
140
141 /* String to be printed before error messages, if any. */
142
143 char *error_pre_print;
144
145 /* String to be printed before quit messages, if any. */
146
147 char *quit_pre_print;
148
149 /* String to be printed before warning messages, if any. */
150
151 char *warning_pre_print = "\nwarning: ";
152
153 int pagination_enabled = 1;
154 \f
155
156 /* Add a new cleanup to the cleanup_chain,
157 and return the previous chain pointer
158 to be passed later to do_cleanups or discard_cleanups.
159 Args are FUNCTION to clean up with, and ARG to pass to it. */
160
161 struct cleanup *
162 make_cleanup (make_cleanup_ftype *function, void *arg)
163 {
164 return make_my_cleanup (&cleanup_chain, function, arg);
165 }
166
167 struct cleanup *
168 make_final_cleanup (make_cleanup_ftype *function, void *arg)
169 {
170 return make_my_cleanup (&final_cleanup_chain, function, arg);
171 }
172
173 struct cleanup *
174 make_run_cleanup (make_cleanup_ftype *function, void *arg)
175 {
176 return make_my_cleanup (&run_cleanup_chain, function, arg);
177 }
178
179 struct cleanup *
180 make_exec_cleanup (make_cleanup_ftype *function, void *arg)
181 {
182 return make_my_cleanup (&exec_cleanup_chain, function, arg);
183 }
184
185 struct cleanup *
186 make_exec_error_cleanup (make_cleanup_ftype *function, void *arg)
187 {
188 return make_my_cleanup (&exec_error_cleanup_chain, function, arg);
189 }
190
191 static void
192 do_freeargv (void *arg)
193 {
194 freeargv ((char **) arg);
195 }
196
197 struct cleanup *
198 make_cleanup_freeargv (char **arg)
199 {
200 return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
201 }
202
203 static void
204 do_bfd_close_cleanup (void *arg)
205 {
206 bfd_close (arg);
207 }
208
209 struct cleanup *
210 make_cleanup_bfd_close (bfd *abfd)
211 {
212 return make_cleanup (do_bfd_close_cleanup, abfd);
213 }
214
215 static void
216 do_close_cleanup (void *arg)
217 {
218 int *fd = arg;
219 close (*fd);
220 xfree (fd);
221 }
222
223 struct cleanup *
224 make_cleanup_close (int fd)
225 {
226 int *saved_fd = xmalloc (sizeof (fd));
227 *saved_fd = fd;
228 return make_cleanup (do_close_cleanup, saved_fd);
229 }
230
231 static void
232 do_ui_file_delete (void *arg)
233 {
234 ui_file_delete (arg);
235 }
236
237 struct cleanup *
238 make_cleanup_ui_file_delete (struct ui_file *arg)
239 {
240 return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
241 }
242
243 struct cleanup *
244 make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
245 void *arg)
246 {
247 register struct cleanup *new
248 = (struct cleanup *) xmalloc (sizeof (struct cleanup));
249 register struct cleanup *old_chain = *pmy_chain;
250
251 new->next = *pmy_chain;
252 new->function = function;
253 new->arg = arg;
254 *pmy_chain = new;
255
256 return old_chain;
257 }
258
259 /* Discard cleanups and do the actions they describe
260 until we get back to the point OLD_CHAIN in the cleanup_chain. */
261
262 void
263 do_cleanups (register struct cleanup *old_chain)
264 {
265 do_my_cleanups (&cleanup_chain, old_chain);
266 }
267
268 void
269 do_final_cleanups (register struct cleanup *old_chain)
270 {
271 do_my_cleanups (&final_cleanup_chain, old_chain);
272 }
273
274 void
275 do_run_cleanups (register struct cleanup *old_chain)
276 {
277 do_my_cleanups (&run_cleanup_chain, old_chain);
278 }
279
280 void
281 do_exec_cleanups (register struct cleanup *old_chain)
282 {
283 do_my_cleanups (&exec_cleanup_chain, old_chain);
284 }
285
286 void
287 do_exec_error_cleanups (register struct cleanup *old_chain)
288 {
289 do_my_cleanups (&exec_error_cleanup_chain, old_chain);
290 }
291
292 void
293 do_my_cleanups (register struct cleanup **pmy_chain,
294 register struct cleanup *old_chain)
295 {
296 register struct cleanup *ptr;
297 while ((ptr = *pmy_chain) != old_chain)
298 {
299 *pmy_chain = ptr->next; /* Do this first incase recursion */
300 (*ptr->function) (ptr->arg);
301 xfree (ptr);
302 }
303 }
304
305 /* Discard cleanups, not doing the actions they describe,
306 until we get back to the point OLD_CHAIN in the cleanup_chain. */
307
308 void
309 discard_cleanups (register struct cleanup *old_chain)
310 {
311 discard_my_cleanups (&cleanup_chain, old_chain);
312 }
313
314 void
315 discard_final_cleanups (register struct cleanup *old_chain)
316 {
317 discard_my_cleanups (&final_cleanup_chain, old_chain);
318 }
319
320 void
321 discard_exec_error_cleanups (register struct cleanup *old_chain)
322 {
323 discard_my_cleanups (&exec_error_cleanup_chain, old_chain);
324 }
325
326 void
327 discard_my_cleanups (register struct cleanup **pmy_chain,
328 register struct cleanup *old_chain)
329 {
330 register struct cleanup *ptr;
331 while ((ptr = *pmy_chain) != old_chain)
332 {
333 *pmy_chain = ptr->next;
334 xfree (ptr);
335 }
336 }
337
338 /* Set the cleanup_chain to 0, and return the old cleanup chain. */
339 struct cleanup *
340 save_cleanups (void)
341 {
342 return save_my_cleanups (&cleanup_chain);
343 }
344
345 struct cleanup *
346 save_final_cleanups (void)
347 {
348 return save_my_cleanups (&final_cleanup_chain);
349 }
350
351 struct cleanup *
352 save_my_cleanups (struct cleanup **pmy_chain)
353 {
354 struct cleanup *old_chain = *pmy_chain;
355
356 *pmy_chain = 0;
357 return old_chain;
358 }
359
360 /* Restore the cleanup chain from a previously saved chain. */
361 void
362 restore_cleanups (struct cleanup *chain)
363 {
364 restore_my_cleanups (&cleanup_chain, chain);
365 }
366
367 void
368 restore_final_cleanups (struct cleanup *chain)
369 {
370 restore_my_cleanups (&final_cleanup_chain, chain);
371 }
372
373 void
374 restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
375 {
376 *pmy_chain = chain;
377 }
378
379 /* This function is useful for cleanups.
380 Do
381
382 foo = xmalloc (...);
383 old_chain = make_cleanup (free_current_contents, &foo);
384
385 to arrange to free the object thus allocated. */
386
387 void
388 free_current_contents (void *ptr)
389 {
390 void **location = ptr;
391 if (location == NULL)
392 internal_error (__FILE__, __LINE__,
393 "free_current_contents: NULL pointer");
394 if (*location != NULL)
395 {
396 xfree (*location);
397 *location = NULL;
398 }
399 }
400
401 /* Provide a known function that does nothing, to use as a base for
402 for a possibly long chain of cleanups. This is useful where we
403 use the cleanup chain for handling normal cleanups as well as dealing
404 with cleanups that need to be done as a result of a call to error().
405 In such cases, we may not be certain where the first cleanup is, unless
406 we have a do-nothing one to always use as the base. */
407
408 /* ARGSUSED */
409 void
410 null_cleanup (void *arg)
411 {
412 }
413
414 /* Add a continuation to the continuation list, the global list
415 cmd_continuation. The new continuation will be added at the front.*/
416 void
417 add_continuation (void (*continuation_hook) (struct continuation_arg *),
418 struct continuation_arg *arg_list)
419 {
420 struct continuation *continuation_ptr;
421
422 continuation_ptr = (struct continuation *) xmalloc (sizeof (struct continuation));
423 continuation_ptr->continuation_hook = continuation_hook;
424 continuation_ptr->arg_list = arg_list;
425 continuation_ptr->next = cmd_continuation;
426 cmd_continuation = continuation_ptr;
427 }
428
429 /* Walk down the cmd_continuation list, and execute all the
430 continuations. There is a problem though. In some cases new
431 continuations may be added while we are in the middle of this
432 loop. If this happens they will be added in the front, and done
433 before we have a chance of exhausting those that were already
434 there. We need to then save the beginning of the list in a pointer
435 and do the continuations from there on, instead of using the
436 global beginning of list as our iteration pointer.*/
437 void
438 do_all_continuations (void)
439 {
440 struct continuation *continuation_ptr;
441 struct continuation *saved_continuation;
442
443 /* Copy the list header into another pointer, and set the global
444 list header to null, so that the global list can change as a side
445 effect of invoking the continuations and the processing of
446 the preexisting continuations will not be affected. */
447 continuation_ptr = cmd_continuation;
448 cmd_continuation = NULL;
449
450 /* Work now on the list we have set aside. */
451 while (continuation_ptr)
452 {
453 (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
454 saved_continuation = continuation_ptr;
455 continuation_ptr = continuation_ptr->next;
456 xfree (saved_continuation);
457 }
458 }
459
460 /* Walk down the cmd_continuation list, and get rid of all the
461 continuations. */
462 void
463 discard_all_continuations (void)
464 {
465 struct continuation *continuation_ptr;
466
467 while (cmd_continuation)
468 {
469 continuation_ptr = cmd_continuation;
470 cmd_continuation = continuation_ptr->next;
471 xfree (continuation_ptr);
472 }
473 }
474
475 /* Add a continuation to the continuation list, the global list
476 intermediate_continuation. The new continuation will be added at the front.*/
477 void
478 add_intermediate_continuation (void (*continuation_hook)
479 (struct continuation_arg *),
480 struct continuation_arg *arg_list)
481 {
482 struct continuation *continuation_ptr;
483
484 continuation_ptr = (struct continuation *) xmalloc (sizeof (struct continuation));
485 continuation_ptr->continuation_hook = continuation_hook;
486 continuation_ptr->arg_list = arg_list;
487 continuation_ptr->next = intermediate_continuation;
488 intermediate_continuation = continuation_ptr;
489 }
490
491 /* Walk down the cmd_continuation list, and execute all the
492 continuations. There is a problem though. In some cases new
493 continuations may be added while we are in the middle of this
494 loop. If this happens they will be added in the front, and done
495 before we have a chance of exhausting those that were already
496 there. We need to then save the beginning of the list in a pointer
497 and do the continuations from there on, instead of using the
498 global beginning of list as our iteration pointer.*/
499 void
500 do_all_intermediate_continuations (void)
501 {
502 struct continuation *continuation_ptr;
503 struct continuation *saved_continuation;
504
505 /* Copy the list header into another pointer, and set the global
506 list header to null, so that the global list can change as a side
507 effect of invoking the continuations and the processing of
508 the preexisting continuations will not be affected. */
509 continuation_ptr = intermediate_continuation;
510 intermediate_continuation = NULL;
511
512 /* Work now on the list we have set aside. */
513 while (continuation_ptr)
514 {
515 (continuation_ptr->continuation_hook) (continuation_ptr->arg_list);
516 saved_continuation = continuation_ptr;
517 continuation_ptr = continuation_ptr->next;
518 xfree (saved_continuation);
519 }
520 }
521
522 /* Walk down the cmd_continuation list, and get rid of all the
523 continuations. */
524 void
525 discard_all_intermediate_continuations (void)
526 {
527 struct continuation *continuation_ptr;
528
529 while (intermediate_continuation)
530 {
531 continuation_ptr = intermediate_continuation;
532 intermediate_continuation = continuation_ptr->next;
533 xfree (continuation_ptr);
534 }
535 }
536
537 \f
538
539 /* Print a warning message. Way to use this is to call warning_begin,
540 output the warning message (use unfiltered output to gdb_stderr),
541 ending in a newline. There is not currently a warning_end that you
542 call afterwards, but such a thing might be added if it is useful
543 for a GUI to separate warning messages from other output.
544
545 FIXME: Why do warnings use unfiltered output and errors filtered?
546 Is this anything other than a historical accident? */
547
548 void
549 warning_begin (void)
550 {
551 target_terminal_ours ();
552 wrap_here (""); /* Force out any buffered output */
553 gdb_flush (gdb_stdout);
554 if (warning_pre_print)
555 fprintf_unfiltered (gdb_stderr, warning_pre_print);
556 }
557
558 /* Print a warning message.
559 The first argument STRING is the warning message, used as a fprintf string,
560 and the remaining args are passed as arguments to it.
561 The primary difference between warnings and errors is that a warning
562 does not force the return to command level. */
563
564 void
565 warning (const char *string,...)
566 {
567 va_list args;
568 va_start (args, string);
569 if (warning_hook)
570 (*warning_hook) (string, args);
571 else
572 {
573 warning_begin ();
574 vfprintf_unfiltered (gdb_stderr, string, args);
575 fprintf_unfiltered (gdb_stderr, "\n");
576 va_end (args);
577 }
578 }
579
580 /* Start the printing of an error message. Way to use this is to call
581 this, output the error message (use filtered output to gdb_stderr
582 (FIXME: Some callers, like memory_error, use gdb_stdout)), ending
583 in a newline, and then call return_to_top_level (RETURN_ERROR).
584 error() provides a convenient way to do this for the special case
585 that the error message can be formatted with a single printf call,
586 but this is more general. */
587 void
588 error_begin (void)
589 {
590 if (error_begin_hook)
591 error_begin_hook ();
592
593 target_terminal_ours ();
594 wrap_here (""); /* Force out any buffered output */
595 gdb_flush (gdb_stdout);
596
597 annotate_error_begin ();
598
599 if (error_pre_print)
600 fprintf_filtered (gdb_stderr, error_pre_print);
601 }
602
603 /* Print an error message and return to command level.
604 The first argument STRING is the error message, used as a fprintf string,
605 and the remaining args are passed as arguments to it. */
606
607 NORETURN void
608 verror (const char *string, va_list args)
609 {
610 char *err_string;
611 struct cleanup *err_string_cleanup;
612 /* FIXME: cagney/1999-11-10: All error calls should come here.
613 Unfortunately some code uses the sequence: error_begin(); print
614 error message; return_to_top_level. That code should be
615 flushed. */
616 error_begin ();
617 /* NOTE: It's tempting to just do the following...
618 vfprintf_filtered (gdb_stderr, string, args);
619 and then follow with a similar looking statement to cause the message
620 to also go to gdb_lasterr. But if we do this, we'll be traversing the
621 va_list twice which works on some platforms and fails miserably on
622 others. */
623 /* Save it as the last error */
624 ui_file_rewind (gdb_lasterr);
625 vfprintf_filtered (gdb_lasterr, string, args);
626 /* Retrieve the last error and print it to gdb_stderr */
627 err_string = error_last_message ();
628 err_string_cleanup = make_cleanup (xfree, err_string);
629 fputs_filtered (err_string, gdb_stderr);
630 fprintf_filtered (gdb_stderr, "\n");
631 do_cleanups (err_string_cleanup);
632 return_to_top_level (RETURN_ERROR);
633 }
634
635 NORETURN void
636 error (const char *string,...)
637 {
638 va_list args;
639 va_start (args, string);
640 verror (string, args);
641 va_end (args);
642 }
643
644 NORETURN void
645 error_stream (struct ui_file *stream)
646 {
647 long size;
648 char *msg = ui_file_xstrdup (stream, &size);
649 make_cleanup (xfree, msg);
650 error ("%s", msg);
651 }
652
653 /* Get the last error message issued by gdb */
654
655 char *
656 error_last_message (void)
657 {
658 long len;
659 return ui_file_xstrdup (gdb_lasterr, &len);
660 }
661
662 /* This is to be called by main() at the very beginning */
663
664 void
665 error_init (void)
666 {
667 gdb_lasterr = mem_fileopen ();
668 }
669
670 /* Print a message reporting an internal error. Ask the user if they
671 want to continue, dump core, or just exit. */
672
673 NORETURN void
674 internal_verror (const char *file, int line,
675 const char *fmt, va_list ap)
676 {
677 static char msg[] = "Internal GDB error: recursive internal error.\n";
678 static int dejavu = 0;
679 int continue_p;
680 int dump_core_p;
681
682 /* don't allow infinite error recursion. */
683 switch (dejavu)
684 {
685 case 0:
686 dejavu = 1;
687 break;
688 case 1:
689 dejavu = 2;
690 fputs_unfiltered (msg, gdb_stderr);
691 abort ();
692 default:
693 dejavu = 3;
694 write (STDERR_FILENO, msg, sizeof (msg));
695 exit (1);
696 }
697
698 /* Try to get the message out */
699 target_terminal_ours ();
700 fprintf_unfiltered (gdb_stderr, "%s:%d: gdb-internal-error: ", file, line);
701 vfprintf_unfiltered (gdb_stderr, fmt, ap);
702 fputs_unfiltered ("\n", gdb_stderr);
703
704 /* Default (no case) is to quit GDB. When in batch mode this
705 lessens the likelhood of GDB going into an infinate loop. */
706 continue_p = query ("\
707 An internal GDB error was detected. This may make further\n\
708 debugging unreliable. Continue this debugging session? ");
709
710 /* Default (no case) is to not dump core. Lessen the chance of GDB
711 leaving random core files around. */
712 dump_core_p = query ("\
713 Create a core file containing the current state of GDB? ");
714
715 if (continue_p)
716 {
717 if (dump_core_p)
718 {
719 if (fork () == 0)
720 abort ();
721 }
722 }
723 else
724 {
725 if (dump_core_p)
726 abort ();
727 else
728 exit (1);
729 }
730
731 dejavu = 0;
732 return_to_top_level (RETURN_ERROR);
733 }
734
735 NORETURN void
736 internal_error (const char *file, int line, const char *string, ...)
737 {
738 va_list ap;
739 va_start (ap, string);
740
741 internal_verror (file, line, string, ap);
742 va_end (ap);
743 }
744
745 /* The strerror() function can return NULL for errno values that are
746 out of range. Provide a "safe" version that always returns a
747 printable string. */
748
749 char *
750 safe_strerror (int errnum)
751 {
752 char *msg;
753 static char buf[32];
754
755 if ((msg = strerror (errnum)) == NULL)
756 {
757 sprintf (buf, "(undocumented errno %d)", errnum);
758 msg = buf;
759 }
760 return (msg);
761 }
762
763 /* Print the system error message for errno, and also mention STRING
764 as the file name for which the error was encountered.
765 Then return to command level. */
766
767 NORETURN void
768 perror_with_name (char *string)
769 {
770 char *err;
771 char *combined;
772
773 err = safe_strerror (errno);
774 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
775 strcpy (combined, string);
776 strcat (combined, ": ");
777 strcat (combined, err);
778
779 /* I understand setting these is a matter of taste. Still, some people
780 may clear errno but not know about bfd_error. Doing this here is not
781 unreasonable. */
782 bfd_set_error (bfd_error_no_error);
783 errno = 0;
784
785 error ("%s.", combined);
786 }
787
788 /* Print the system error message for ERRCODE, and also mention STRING
789 as the file name for which the error was encountered. */
790
791 void
792 print_sys_errmsg (char *string, int errcode)
793 {
794 char *err;
795 char *combined;
796
797 err = safe_strerror (errcode);
798 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
799 strcpy (combined, string);
800 strcat (combined, ": ");
801 strcat (combined, err);
802
803 /* We want anything which was printed on stdout to come out first, before
804 this message. */
805 gdb_flush (gdb_stdout);
806 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
807 }
808
809 /* Control C eventually causes this to be called, at a convenient time. */
810
811 void
812 quit (void)
813 {
814 serial_t gdb_stdout_serial = serial_fdopen (1);
815
816 target_terminal_ours ();
817
818 /* We want all output to appear now, before we print "Quit". We
819 have 3 levels of buffering we have to flush (it's possible that
820 some of these should be changed to flush the lower-level ones
821 too): */
822
823 /* 1. The _filtered buffer. */
824 wrap_here ((char *) 0);
825
826 /* 2. The stdio buffer. */
827 gdb_flush (gdb_stdout);
828 gdb_flush (gdb_stderr);
829
830 /* 3. The system-level buffer. */
831 SERIAL_DRAIN_OUTPUT (gdb_stdout_serial);
832 SERIAL_UN_FDOPEN (gdb_stdout_serial);
833
834 annotate_error_begin ();
835
836 /* Don't use *_filtered; we don't want to prompt the user to continue. */
837 if (quit_pre_print)
838 fprintf_unfiltered (gdb_stderr, quit_pre_print);
839
840 #ifdef __MSDOS__
841 /* No steenking SIGINT will ever be coming our way when the
842 program is resumed. Don't lie. */
843 fprintf_unfiltered (gdb_stderr, "Quit\n");
844 #else
845 if (job_control
846 /* If there is no terminal switching for this target, then we can't
847 possibly get screwed by the lack of job control. */
848 || current_target.to_terminal_ours == NULL)
849 fprintf_unfiltered (gdb_stderr, "Quit\n");
850 else
851 fprintf_unfiltered (gdb_stderr,
852 "Quit (expect signal SIGINT when the program is resumed)\n");
853 #endif
854 return_to_top_level (RETURN_QUIT);
855 }
856
857
858 #if defined(_MSC_VER) /* should test for wingdb instead? */
859
860 /*
861 * Windows translates all keyboard and mouse events
862 * into a message which is appended to the message
863 * queue for the process.
864 */
865
866 void
867 notice_quit (void)
868 {
869 int k = win32pollquit ();
870 if (k == 1)
871 quit_flag = 1;
872 else if (k == 2)
873 immediate_quit = 1;
874 }
875
876 #else /* !defined(_MSC_VER) */
877
878 void
879 notice_quit (void)
880 {
881 /* Done by signals */
882 }
883
884 #endif /* !defined(_MSC_VER) */
885
886 /* Control C comes here */
887 void
888 request_quit (int signo)
889 {
890 quit_flag = 1;
891 /* Restore the signal handler. Harmless with BSD-style signals, needed
892 for System V-style signals. So just always do it, rather than worrying
893 about USG defines and stuff like that. */
894 signal (signo, request_quit);
895
896 #ifdef REQUEST_QUIT
897 REQUEST_QUIT;
898 #else
899 if (immediate_quit)
900 quit ();
901 #endif
902 }
903 \f
904 /* Memory management stuff (malloc friends). */
905
906 /* Make a substitute size_t for non-ANSI compilers. */
907
908 #ifndef HAVE_STDDEF_H
909 #ifndef size_t
910 #define size_t unsigned int
911 #endif
912 #endif
913
914 #if !defined (USE_MMALLOC)
915
916 PTR
917 mcalloc (PTR md, size_t number, size_t size)
918 {
919 return calloc (number, size);
920 }
921
922 PTR
923 mmalloc (PTR md, size_t size)
924 {
925 return malloc (size);
926 }
927
928 PTR
929 mrealloc (PTR md, PTR ptr, size_t size)
930 {
931 if (ptr == 0) /* Guard against old realloc's */
932 return malloc (size);
933 else
934 return realloc (ptr, size);
935 }
936
937 void
938 mfree (PTR md, PTR ptr)
939 {
940 xfree (ptr);
941 }
942
943 #endif /* USE_MMALLOC */
944
945 #if !defined (USE_MMALLOC) || defined (NO_MMCHECK)
946
947 void
948 init_malloc (void *md)
949 {
950 }
951
952 #else /* Have mmalloc and want corruption checking */
953
954 static void
955 malloc_botch (void)
956 {
957 fprintf_unfiltered (gdb_stderr, "Memory corruption\n");
958 abort ();
959 }
960
961 /* Attempt to install hooks in mmalloc/mrealloc/mfree for the heap specified
962 by MD, to detect memory corruption. Note that MD may be NULL to specify
963 the default heap that grows via sbrk.
964
965 Note that for freshly created regions, we must call mmcheckf prior to any
966 mallocs in the region. Otherwise, any region which was allocated prior to
967 installing the checking hooks, which is later reallocated or freed, will
968 fail the checks! The mmcheck function only allows initial hooks to be
969 installed before the first mmalloc. However, anytime after we have called
970 mmcheck the first time to install the checking hooks, we can call it again
971 to update the function pointer to the memory corruption handler.
972
973 Returns zero on failure, non-zero on success. */
974
975 #ifndef MMCHECK_FORCE
976 #define MMCHECK_FORCE 0
977 #endif
978
979 void
980 init_malloc (void *md)
981 {
982 if (!mmcheckf (md, malloc_botch, MMCHECK_FORCE))
983 {
984 /* Don't use warning(), which relies on current_target being set
985 to something other than dummy_target, until after
986 initialize_all_files(). */
987
988 fprintf_unfiltered
989 (gdb_stderr, "warning: failed to install memory consistency checks; ");
990 fprintf_unfiltered
991 (gdb_stderr, "configuration should define NO_MMCHECK or MMCHECK_FORCE\n");
992 }
993
994 mmtrace ();
995 }
996
997 #endif /* Have mmalloc and want corruption checking */
998
999 /* Called when a memory allocation fails, with the number of bytes of
1000 memory requested in SIZE. */
1001
1002 NORETURN void
1003 nomem (long size)
1004 {
1005 if (size > 0)
1006 {
1007 internal_error (__FILE__, __LINE__,
1008 "virtual memory exhausted: can't allocate %ld bytes.", size);
1009 }
1010 else
1011 {
1012 internal_error (__FILE__, __LINE__,
1013 "virtual memory exhausted.");
1014 }
1015 }
1016
1017 /* Like mmalloc but get error if no storage available, and protect against
1018 the caller wanting to allocate zero bytes. Whether to return NULL for
1019 a zero byte request, or translate the request into a request for one
1020 byte of zero'd storage, is a religious issue. */
1021
1022 PTR
1023 xmmalloc (PTR md, long size)
1024 {
1025 register PTR val;
1026
1027 if (size == 0)
1028 {
1029 val = NULL;
1030 }
1031 else if ((val = mmalloc (md, size)) == NULL)
1032 {
1033 nomem (size);
1034 }
1035 return (val);
1036 }
1037
1038 /* Like mrealloc but get error if no storage available. */
1039
1040 PTR
1041 xmrealloc (PTR md, PTR ptr, long size)
1042 {
1043 register PTR val;
1044
1045 if (ptr != NULL)
1046 {
1047 val = mrealloc (md, ptr, size);
1048 }
1049 else
1050 {
1051 val = mmalloc (md, size);
1052 }
1053 if (val == NULL)
1054 {
1055 nomem (size);
1056 }
1057 return (val);
1058 }
1059
1060 /* Like malloc but get error if no storage available, and protect against
1061 the caller wanting to allocate zero bytes. */
1062
1063 PTR
1064 xmalloc (size_t size)
1065 {
1066 return (xmmalloc ((PTR) NULL, size));
1067 }
1068
1069 /* Like calloc but get error if no storage available */
1070
1071 PTR
1072 xcalloc (size_t number, size_t size)
1073 {
1074 void *mem = mcalloc (NULL, number, size);
1075 if (mem == NULL)
1076 nomem (number * size);
1077 return mem;
1078 }
1079
1080 /* Like mrealloc but get error if no storage available. */
1081
1082 PTR
1083 xrealloc (PTR ptr, size_t size)
1084 {
1085 return (xmrealloc ((PTR) NULL, ptr, size));
1086 }
1087
1088 /* Free up space allocated by one of xmalloc(), xcalloc(), or
1089 xrealloc(). */
1090
1091 void
1092 xfree (void *ptr)
1093 {
1094 if (ptr != NULL)
1095 free (ptr);
1096 }
1097 \f
1098
1099 /* Like asprintf/vasprintf but get an internal_error if the call
1100 fails. */
1101
1102 void
1103 xasprintf (char **ret, const char *format, ...)
1104 {
1105 va_list args;
1106 va_start (args, format);
1107 xvasprintf (ret, format, args);
1108 va_end (args);
1109 }
1110
1111 void
1112 xvasprintf (char **ret, const char *format, va_list ap)
1113 {
1114 int status = vasprintf (ret, format, ap);
1115 /* NULL could be returned due to a memory allocation problem; a
1116 badly format string; or something else. */
1117 if ((*ret) == NULL)
1118 internal_error (__FILE__, __LINE__,
1119 "vasprintf returned NULL buffer (errno %d)",
1120 errno);
1121 /* A negative status with a non-NULL buffer shouldn't never
1122 happen. But to be sure. */
1123 if (status < 0)
1124 internal_error (__FILE__, __LINE__,
1125 "vasprintf call failed (errno %d)",
1126 errno);
1127 }
1128
1129
1130 /* My replacement for the read system call.
1131 Used like `read' but keeps going if `read' returns too soon. */
1132
1133 int
1134 myread (int desc, char *addr, int len)
1135 {
1136 register int val;
1137 int orglen = len;
1138
1139 while (len > 0)
1140 {
1141 val = read (desc, addr, len);
1142 if (val < 0)
1143 return val;
1144 if (val == 0)
1145 return orglen - len;
1146 len -= val;
1147 addr += val;
1148 }
1149 return orglen;
1150 }
1151 \f
1152 /* Make a copy of the string at PTR with SIZE characters
1153 (and add a null character at the end in the copy).
1154 Uses malloc to get the space. Returns the address of the copy. */
1155
1156 char *
1157 savestring (const char *ptr, int size)
1158 {
1159 register char *p = (char *) xmalloc (size + 1);
1160 memcpy (p, ptr, size);
1161 p[size] = 0;
1162 return p;
1163 }
1164
1165 char *
1166 msavestring (void *md, const char *ptr, int size)
1167 {
1168 register char *p = (char *) xmmalloc (md, size + 1);
1169 memcpy (p, ptr, size);
1170 p[size] = 0;
1171 return p;
1172 }
1173
1174 char *
1175 mstrsave (void *md, const char *ptr)
1176 {
1177 return (msavestring (md, ptr, strlen (ptr)));
1178 }
1179
1180 void
1181 print_spaces (register int n, register struct ui_file *file)
1182 {
1183 fputs_unfiltered (n_spaces (n), file);
1184 }
1185
1186 /* Print a host address. */
1187
1188 void
1189 gdb_print_host_address (void *addr, struct ui_file *stream)
1190 {
1191
1192 /* We could use the %p conversion specifier to fprintf if we had any
1193 way of knowing whether this host supports it. But the following
1194 should work on the Alpha and on 32 bit machines. */
1195
1196 fprintf_filtered (stream, "0x%lx", (unsigned long) addr);
1197 }
1198
1199 /* Ask user a y-or-n question and return 1 iff answer is yes.
1200 Takes three args which are given to printf to print the question.
1201 The first, a control string, should end in "? ".
1202 It should not say how to answer, because we do that. */
1203
1204 /* VARARGS */
1205 int
1206 query (char *ctlstr,...)
1207 {
1208 va_list args;
1209 register int answer;
1210 register int ans2;
1211 int retval;
1212
1213 va_start (args, ctlstr);
1214
1215 if (query_hook)
1216 {
1217 return query_hook (ctlstr, args);
1218 }
1219
1220 /* Automatically answer "yes" if input is not from a terminal. */
1221 if (!input_from_terminal_p ())
1222 return 1;
1223 #ifdef MPW
1224 /* FIXME Automatically answer "yes" if called from MacGDB. */
1225 if (mac_app)
1226 return 1;
1227 #endif /* MPW */
1228
1229 while (1)
1230 {
1231 wrap_here (""); /* Flush any buffered output */
1232 gdb_flush (gdb_stdout);
1233
1234 if (annotation_level > 1)
1235 printf_filtered ("\n\032\032pre-query\n");
1236
1237 vfprintf_filtered (gdb_stdout, ctlstr, args);
1238 printf_filtered ("(y or n) ");
1239
1240 if (annotation_level > 1)
1241 printf_filtered ("\n\032\032query\n");
1242
1243 #ifdef MPW
1244 /* If not in MacGDB, move to a new line so the entered line doesn't
1245 have a prompt on the front of it. */
1246 if (!mac_app)
1247 fputs_unfiltered ("\n", gdb_stdout);
1248 #endif /* MPW */
1249
1250 wrap_here ("");
1251 gdb_flush (gdb_stdout);
1252
1253 #if defined(TUI)
1254 if (!tui_version || cmdWin == tuiWinWithFocus ())
1255 #endif
1256 answer = fgetc (stdin);
1257 #if defined(TUI)
1258 else
1259 answer = (unsigned char) tuiBufferGetc ();
1260
1261 #endif
1262 clearerr (stdin); /* in case of C-d */
1263 if (answer == EOF) /* C-d */
1264 {
1265 retval = 1;
1266 break;
1267 }
1268 /* Eat rest of input line, to EOF or newline */
1269 if ((answer != '\n') || (tui_version && answer != '\r'))
1270 do
1271 {
1272 #if defined(TUI)
1273 if (!tui_version || cmdWin == tuiWinWithFocus ())
1274 #endif
1275 ans2 = fgetc (stdin);
1276 #if defined(TUI)
1277 else
1278 ans2 = (unsigned char) tuiBufferGetc ();
1279 #endif
1280 clearerr (stdin);
1281 }
1282 while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1283 TUIDO (((TuiOpaqueFuncPtr) tui_vStartNewLines, 1));
1284
1285 if (answer >= 'a')
1286 answer -= 040;
1287 if (answer == 'Y')
1288 {
1289 retval = 1;
1290 break;
1291 }
1292 if (answer == 'N')
1293 {
1294 retval = 0;
1295 break;
1296 }
1297 printf_filtered ("Please answer y or n.\n");
1298 }
1299
1300 if (annotation_level > 1)
1301 printf_filtered ("\n\032\032post-query\n");
1302 return retval;
1303 }
1304 \f
1305
1306 /* Parse a C escape sequence. STRING_PTR points to a variable
1307 containing a pointer to the string to parse. That pointer
1308 should point to the character after the \. That pointer
1309 is updated past the characters we use. The value of the
1310 escape sequence is returned.
1311
1312 A negative value means the sequence \ newline was seen,
1313 which is supposed to be equivalent to nothing at all.
1314
1315 If \ is followed by a null character, we return a negative
1316 value and leave the string pointer pointing at the null character.
1317
1318 If \ is followed by 000, we return 0 and leave the string pointer
1319 after the zeros. A value of 0 does not mean end of string. */
1320
1321 int
1322 parse_escape (char **string_ptr)
1323 {
1324 register int c = *(*string_ptr)++;
1325 switch (c)
1326 {
1327 case 'a':
1328 return 007; /* Bell (alert) char */
1329 case 'b':
1330 return '\b';
1331 case 'e': /* Escape character */
1332 return 033;
1333 case 'f':
1334 return '\f';
1335 case 'n':
1336 return '\n';
1337 case 'r':
1338 return '\r';
1339 case 't':
1340 return '\t';
1341 case 'v':
1342 return '\v';
1343 case '\n':
1344 return -2;
1345 case 0:
1346 (*string_ptr)--;
1347 return 0;
1348 case '^':
1349 c = *(*string_ptr)++;
1350 if (c == '\\')
1351 c = parse_escape (string_ptr);
1352 if (c == '?')
1353 return 0177;
1354 return (c & 0200) | (c & 037);
1355
1356 case '0':
1357 case '1':
1358 case '2':
1359 case '3':
1360 case '4':
1361 case '5':
1362 case '6':
1363 case '7':
1364 {
1365 register int i = c - '0';
1366 register int count = 0;
1367 while (++count < 3)
1368 {
1369 if ((c = *(*string_ptr)++) >= '0' && c <= '7')
1370 {
1371 i *= 8;
1372 i += c - '0';
1373 }
1374 else
1375 {
1376 (*string_ptr)--;
1377 break;
1378 }
1379 }
1380 return i;
1381 }
1382 default:
1383 return c;
1384 }
1385 }
1386 \f
1387 /* Print the character C on STREAM as part of the contents of a literal
1388 string whose delimiter is QUOTER. Note that this routine should only
1389 be call for printing things which are independent of the language
1390 of the program being debugged. */
1391
1392 static void
1393 printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
1394 void (*do_fprintf) (struct ui_file *, const char *, ...),
1395 struct ui_file *stream, int quoter)
1396 {
1397
1398 c &= 0xFF; /* Avoid sign bit follies */
1399
1400 if (c < 0x20 || /* Low control chars */
1401 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1402 (sevenbit_strings && c >= 0x80))
1403 { /* high order bit set */
1404 switch (c)
1405 {
1406 case '\n':
1407 do_fputs ("\\n", stream);
1408 break;
1409 case '\b':
1410 do_fputs ("\\b", stream);
1411 break;
1412 case '\t':
1413 do_fputs ("\\t", stream);
1414 break;
1415 case '\f':
1416 do_fputs ("\\f", stream);
1417 break;
1418 case '\r':
1419 do_fputs ("\\r", stream);
1420 break;
1421 case '\033':
1422 do_fputs ("\\e", stream);
1423 break;
1424 case '\007':
1425 do_fputs ("\\a", stream);
1426 break;
1427 default:
1428 do_fprintf (stream, "\\%.3o", (unsigned int) c);
1429 break;
1430 }
1431 }
1432 else
1433 {
1434 if (c == '\\' || c == quoter)
1435 do_fputs ("\\", stream);
1436 do_fprintf (stream, "%c", c);
1437 }
1438 }
1439
1440 /* Print the character C on STREAM as part of the contents of a
1441 literal string whose delimiter is QUOTER. Note that these routines
1442 should only be call for printing things which are independent of
1443 the language of the program being debugged. */
1444
1445 void
1446 fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
1447 {
1448 while (*str)
1449 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1450 }
1451
1452 void
1453 fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
1454 {
1455 while (*str)
1456 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1457 }
1458
1459 void
1460 fputstrn_unfiltered (const char *str, int n, int quoter, struct ui_file *stream)
1461 {
1462 int i;
1463 for (i = 0; i < n; i++)
1464 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1465 }
1466
1467 \f
1468
1469 /* Number of lines per page or UINT_MAX if paging is disabled. */
1470 static unsigned int lines_per_page;
1471 /* Number of chars per line or UINT_MAX if line folding is disabled. */
1472 static unsigned int chars_per_line;
1473 /* Current count of lines printed on this page, chars on this line. */
1474 static unsigned int lines_printed, chars_printed;
1475
1476 /* Buffer and start column of buffered text, for doing smarter word-
1477 wrapping. When someone calls wrap_here(), we start buffering output
1478 that comes through fputs_filtered(). If we see a newline, we just
1479 spit it out and forget about the wrap_here(). If we see another
1480 wrap_here(), we spit it out and remember the newer one. If we see
1481 the end of the line, we spit out a newline, the indent, and then
1482 the buffered output. */
1483
1484 /* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1485 are waiting to be output (they have already been counted in chars_printed).
1486 When wrap_buffer[0] is null, the buffer is empty. */
1487 static char *wrap_buffer;
1488
1489 /* Pointer in wrap_buffer to the next character to fill. */
1490 static char *wrap_pointer;
1491
1492 /* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1493 is non-zero. */
1494 static char *wrap_indent;
1495
1496 /* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1497 is not in effect. */
1498 static int wrap_column;
1499 \f
1500
1501 /* Inialize the lines and chars per page */
1502 void
1503 init_page_info (void)
1504 {
1505 #if defined(TUI)
1506 if (tui_version && m_winPtrNotNull (cmdWin))
1507 {
1508 lines_per_page = cmdWin->generic.height;
1509 chars_per_line = cmdWin->generic.width;
1510 }
1511 else
1512 #endif
1513 {
1514 /* These defaults will be used if we are unable to get the correct
1515 values from termcap. */
1516 #if defined(__GO32__)
1517 lines_per_page = ScreenRows ();
1518 chars_per_line = ScreenCols ();
1519 #else
1520 lines_per_page = 24;
1521 chars_per_line = 80;
1522
1523 #if !defined (MPW) && !defined (_WIN32)
1524 /* No termcap under MPW, although might be cool to do something
1525 by looking at worksheet or console window sizes. */
1526 /* Initialize the screen height and width from termcap. */
1527 {
1528 char *termtype = getenv ("TERM");
1529
1530 /* Positive means success, nonpositive means failure. */
1531 int status;
1532
1533 /* 2048 is large enough for all known terminals, according to the
1534 GNU termcap manual. */
1535 char term_buffer[2048];
1536
1537 if (termtype)
1538 {
1539 status = tgetent (term_buffer, termtype);
1540 if (status > 0)
1541 {
1542 int val;
1543 int running_in_emacs = getenv ("EMACS") != NULL;
1544
1545 val = tgetnum ("li");
1546 if (val >= 0 && !running_in_emacs)
1547 lines_per_page = val;
1548 else
1549 /* The number of lines per page is not mentioned
1550 in the terminal description. This probably means
1551 that paging is not useful (e.g. emacs shell window),
1552 so disable paging. */
1553 lines_per_page = UINT_MAX;
1554
1555 val = tgetnum ("co");
1556 if (val >= 0)
1557 chars_per_line = val;
1558 }
1559 }
1560 }
1561 #endif /* MPW */
1562
1563 #if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
1564
1565 /* If there is a better way to determine the window size, use it. */
1566 SIGWINCH_HANDLER (SIGWINCH);
1567 #endif
1568 #endif
1569 /* If the output is not a terminal, don't paginate it. */
1570 if (!ui_file_isatty (gdb_stdout))
1571 lines_per_page = UINT_MAX;
1572 } /* the command_line_version */
1573 set_width ();
1574 }
1575
1576 static void
1577 set_width (void)
1578 {
1579 if (chars_per_line == 0)
1580 init_page_info ();
1581
1582 if (!wrap_buffer)
1583 {
1584 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1585 wrap_buffer[0] = '\0';
1586 }
1587 else
1588 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
1589 wrap_pointer = wrap_buffer; /* Start it at the beginning */
1590 }
1591
1592 /* ARGSUSED */
1593 static void
1594 set_width_command (char *args, int from_tty, struct cmd_list_element *c)
1595 {
1596 set_width ();
1597 }
1598
1599 /* Wait, so the user can read what's on the screen. Prompt the user
1600 to continue by pressing RETURN. */
1601
1602 static void
1603 prompt_for_continue (void)
1604 {
1605 char *ignore;
1606 char cont_prompt[120];
1607
1608 if (annotation_level > 1)
1609 printf_unfiltered ("\n\032\032pre-prompt-for-continue\n");
1610
1611 strcpy (cont_prompt,
1612 "---Type <return> to continue, or q <return> to quit---");
1613 if (annotation_level > 1)
1614 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1615
1616 /* We must do this *before* we call gdb_readline, else it will eventually
1617 call us -- thinking that we're trying to print beyond the end of the
1618 screen. */
1619 reinitialize_more_filter ();
1620
1621 immediate_quit++;
1622 /* On a real operating system, the user can quit with SIGINT.
1623 But not on GO32.
1624
1625 'q' is provided on all systems so users don't have to change habits
1626 from system to system, and because telling them what to do in
1627 the prompt is more user-friendly than expecting them to think of
1628 SIGINT. */
1629 /* Call readline, not gdb_readline, because GO32 readline handles control-C
1630 whereas control-C to gdb_readline will cause the user to get dumped
1631 out to DOS. */
1632 ignore = readline (cont_prompt);
1633
1634 if (annotation_level > 1)
1635 printf_unfiltered ("\n\032\032post-prompt-for-continue\n");
1636
1637 if (ignore)
1638 {
1639 char *p = ignore;
1640 while (*p == ' ' || *p == '\t')
1641 ++p;
1642 if (p[0] == 'q')
1643 {
1644 if (!event_loop_p)
1645 request_quit (SIGINT);
1646 else
1647 async_request_quit (0);
1648 }
1649 xfree (ignore);
1650 }
1651 immediate_quit--;
1652
1653 /* Now we have to do this again, so that GDB will know that it doesn't
1654 need to save the ---Type <return>--- line at the top of the screen. */
1655 reinitialize_more_filter ();
1656
1657 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
1658 }
1659
1660 /* Reinitialize filter; ie. tell it to reset to original values. */
1661
1662 void
1663 reinitialize_more_filter (void)
1664 {
1665 lines_printed = 0;
1666 chars_printed = 0;
1667 }
1668
1669 /* Indicate that if the next sequence of characters overflows the line,
1670 a newline should be inserted here rather than when it hits the end.
1671 If INDENT is non-null, it is a string to be printed to indent the
1672 wrapped part on the next line. INDENT must remain accessible until
1673 the next call to wrap_here() or until a newline is printed through
1674 fputs_filtered().
1675
1676 If the line is already overfull, we immediately print a newline and
1677 the indentation, and disable further wrapping.
1678
1679 If we don't know the width of lines, but we know the page height,
1680 we must not wrap words, but should still keep track of newlines
1681 that were explicitly printed.
1682
1683 INDENT should not contain tabs, as that will mess up the char count
1684 on the next line. FIXME.
1685
1686 This routine is guaranteed to force out any output which has been
1687 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1688 used to force out output from the wrap_buffer. */
1689
1690 void
1691 wrap_here (char *indent)
1692 {
1693 /* This should have been allocated, but be paranoid anyway. */
1694 if (!wrap_buffer)
1695 abort ();
1696
1697 if (wrap_buffer[0])
1698 {
1699 *wrap_pointer = '\0';
1700 fputs_unfiltered (wrap_buffer, gdb_stdout);
1701 }
1702 wrap_pointer = wrap_buffer;
1703 wrap_buffer[0] = '\0';
1704 if (chars_per_line == UINT_MAX) /* No line overflow checking */
1705 {
1706 wrap_column = 0;
1707 }
1708 else if (chars_printed >= chars_per_line)
1709 {
1710 puts_filtered ("\n");
1711 if (indent != NULL)
1712 puts_filtered (indent);
1713 wrap_column = 0;
1714 }
1715 else
1716 {
1717 wrap_column = chars_printed;
1718 if (indent == NULL)
1719 wrap_indent = "";
1720 else
1721 wrap_indent = indent;
1722 }
1723 }
1724
1725 /* Ensure that whatever gets printed next, using the filtered output
1726 commands, starts at the beginning of the line. I.E. if there is
1727 any pending output for the current line, flush it and start a new
1728 line. Otherwise do nothing. */
1729
1730 void
1731 begin_line (void)
1732 {
1733 if (chars_printed > 0)
1734 {
1735 puts_filtered ("\n");
1736 }
1737 }
1738
1739
1740 /* Like fputs but if FILTER is true, pause after every screenful.
1741
1742 Regardless of FILTER can wrap at points other than the final
1743 character of a line.
1744
1745 Unlike fputs, fputs_maybe_filtered does not return a value.
1746 It is OK for LINEBUFFER to be NULL, in which case just don't print
1747 anything.
1748
1749 Note that a longjmp to top level may occur in this routine (only if
1750 FILTER is true) (since prompt_for_continue may do so) so this
1751 routine should not be called when cleanups are not in place. */
1752
1753 static void
1754 fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1755 int filter)
1756 {
1757 const char *lineptr;
1758
1759 if (linebuffer == 0)
1760 return;
1761
1762 /* Don't do any filtering if it is disabled. */
1763 if ((stream != gdb_stdout) || !pagination_enabled
1764 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
1765 {
1766 fputs_unfiltered (linebuffer, stream);
1767 return;
1768 }
1769
1770 /* Go through and output each character. Show line extension
1771 when this is necessary; prompt user for new page when this is
1772 necessary. */
1773
1774 lineptr = linebuffer;
1775 while (*lineptr)
1776 {
1777 /* Possible new page. */
1778 if (filter &&
1779 (lines_printed >= lines_per_page - 1))
1780 prompt_for_continue ();
1781
1782 while (*lineptr && *lineptr != '\n')
1783 {
1784 /* Print a single line. */
1785 if (*lineptr == '\t')
1786 {
1787 if (wrap_column)
1788 *wrap_pointer++ = '\t';
1789 else
1790 fputc_unfiltered ('\t', stream);
1791 /* Shifting right by 3 produces the number of tab stops
1792 we have already passed, and then adding one and
1793 shifting left 3 advances to the next tab stop. */
1794 chars_printed = ((chars_printed >> 3) + 1) << 3;
1795 lineptr++;
1796 }
1797 else
1798 {
1799 if (wrap_column)
1800 *wrap_pointer++ = *lineptr;
1801 else
1802 fputc_unfiltered (*lineptr, stream);
1803 chars_printed++;
1804 lineptr++;
1805 }
1806
1807 if (chars_printed >= chars_per_line)
1808 {
1809 unsigned int save_chars = chars_printed;
1810
1811 chars_printed = 0;
1812 lines_printed++;
1813 /* If we aren't actually wrapping, don't output newline --
1814 if chars_per_line is right, we probably just overflowed
1815 anyway; if it's wrong, let us keep going. */
1816 if (wrap_column)
1817 fputc_unfiltered ('\n', stream);
1818
1819 /* Possible new page. */
1820 if (lines_printed >= lines_per_page - 1)
1821 prompt_for_continue ();
1822
1823 /* Now output indentation and wrapped string */
1824 if (wrap_column)
1825 {
1826 fputs_unfiltered (wrap_indent, stream);
1827 *wrap_pointer = '\0'; /* Null-terminate saved stuff */
1828 fputs_unfiltered (wrap_buffer, stream); /* and eject it */
1829 /* FIXME, this strlen is what prevents wrap_indent from
1830 containing tabs. However, if we recurse to print it
1831 and count its chars, we risk trouble if wrap_indent is
1832 longer than (the user settable) chars_per_line.
1833 Note also that this can set chars_printed > chars_per_line
1834 if we are printing a long string. */
1835 chars_printed = strlen (wrap_indent)
1836 + (save_chars - wrap_column);
1837 wrap_pointer = wrap_buffer; /* Reset buffer */
1838 wrap_buffer[0] = '\0';
1839 wrap_column = 0; /* And disable fancy wrap */
1840 }
1841 }
1842 }
1843
1844 if (*lineptr == '\n')
1845 {
1846 chars_printed = 0;
1847 wrap_here ((char *) 0); /* Spit out chars, cancel further wraps */
1848 lines_printed++;
1849 fputc_unfiltered ('\n', stream);
1850 lineptr++;
1851 }
1852 }
1853 }
1854
1855 void
1856 fputs_filtered (const char *linebuffer, struct ui_file *stream)
1857 {
1858 fputs_maybe_filtered (linebuffer, stream, 1);
1859 }
1860
1861 int
1862 putchar_unfiltered (int c)
1863 {
1864 char buf = c;
1865 ui_file_write (gdb_stdout, &buf, 1);
1866 return c;
1867 }
1868
1869 /* Write character C to gdb_stdout using GDB's paging mechanism and return C.
1870 May return nonlocally. */
1871
1872 int
1873 putchar_filtered (int c)
1874 {
1875 return fputc_filtered (c, gdb_stdout);
1876 }
1877
1878 int
1879 fputc_unfiltered (int c, struct ui_file *stream)
1880 {
1881 char buf = c;
1882 ui_file_write (stream, &buf, 1);
1883 return c;
1884 }
1885
1886 int
1887 fputc_filtered (int c, struct ui_file *stream)
1888 {
1889 char buf[2];
1890
1891 buf[0] = c;
1892 buf[1] = 0;
1893 fputs_filtered (buf, stream);
1894 return c;
1895 }
1896
1897 /* puts_debug is like fputs_unfiltered, except it prints special
1898 characters in printable fashion. */
1899
1900 void
1901 puts_debug (char *prefix, char *string, char *suffix)
1902 {
1903 int ch;
1904
1905 /* Print prefix and suffix after each line. */
1906 static int new_line = 1;
1907 static int return_p = 0;
1908 static char *prev_prefix = "";
1909 static char *prev_suffix = "";
1910
1911 if (*string == '\n')
1912 return_p = 0;
1913
1914 /* If the prefix is changing, print the previous suffix, a new line,
1915 and the new prefix. */
1916 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
1917 {
1918 fputs_unfiltered (prev_suffix, gdb_stdlog);
1919 fputs_unfiltered ("\n", gdb_stdlog);
1920 fputs_unfiltered (prefix, gdb_stdlog);
1921 }
1922
1923 /* Print prefix if we printed a newline during the previous call. */
1924 if (new_line)
1925 {
1926 new_line = 0;
1927 fputs_unfiltered (prefix, gdb_stdlog);
1928 }
1929
1930 prev_prefix = prefix;
1931 prev_suffix = suffix;
1932
1933 /* Output characters in a printable format. */
1934 while ((ch = *string++) != '\0')
1935 {
1936 switch (ch)
1937 {
1938 default:
1939 if (isprint (ch))
1940 fputc_unfiltered (ch, gdb_stdlog);
1941
1942 else
1943 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
1944 break;
1945
1946 case '\\':
1947 fputs_unfiltered ("\\\\", gdb_stdlog);
1948 break;
1949 case '\b':
1950 fputs_unfiltered ("\\b", gdb_stdlog);
1951 break;
1952 case '\f':
1953 fputs_unfiltered ("\\f", gdb_stdlog);
1954 break;
1955 case '\n':
1956 new_line = 1;
1957 fputs_unfiltered ("\\n", gdb_stdlog);
1958 break;
1959 case '\r':
1960 fputs_unfiltered ("\\r", gdb_stdlog);
1961 break;
1962 case '\t':
1963 fputs_unfiltered ("\\t", gdb_stdlog);
1964 break;
1965 case '\v':
1966 fputs_unfiltered ("\\v", gdb_stdlog);
1967 break;
1968 }
1969
1970 return_p = ch == '\r';
1971 }
1972
1973 /* Print suffix if we printed a newline. */
1974 if (new_line)
1975 {
1976 fputs_unfiltered (suffix, gdb_stdlog);
1977 fputs_unfiltered ("\n", gdb_stdlog);
1978 }
1979 }
1980
1981
1982 /* Print a variable number of ARGS using format FORMAT. If this
1983 information is going to put the amount written (since the last call
1984 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
1985 call prompt_for_continue to get the users permision to continue.
1986
1987 Unlike fprintf, this function does not return a value.
1988
1989 We implement three variants, vfprintf (takes a vararg list and stream),
1990 fprintf (takes a stream to write on), and printf (the usual).
1991
1992 Note also that a longjmp to top level may occur in this routine
1993 (since prompt_for_continue may do so) so this routine should not be
1994 called when cleanups are not in place. */
1995
1996 static void
1997 vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
1998 va_list args, int filter)
1999 {
2000 char *linebuffer;
2001 struct cleanup *old_cleanups;
2002
2003 xvasprintf (&linebuffer, format, args);
2004 old_cleanups = make_cleanup (xfree, linebuffer);
2005 fputs_maybe_filtered (linebuffer, stream, filter);
2006 do_cleanups (old_cleanups);
2007 }
2008
2009
2010 void
2011 vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
2012 {
2013 vfprintf_maybe_filtered (stream, format, args, 1);
2014 }
2015
2016 void
2017 vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
2018 {
2019 char *linebuffer;
2020 struct cleanup *old_cleanups;
2021
2022 xvasprintf (&linebuffer, format, args);
2023 old_cleanups = make_cleanup (xfree, linebuffer);
2024 fputs_unfiltered (linebuffer, stream);
2025 do_cleanups (old_cleanups);
2026 }
2027
2028 void
2029 vprintf_filtered (const char *format, va_list args)
2030 {
2031 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2032 }
2033
2034 void
2035 vprintf_unfiltered (const char *format, va_list args)
2036 {
2037 vfprintf_unfiltered (gdb_stdout, format, args);
2038 }
2039
2040 void
2041 fprintf_filtered (struct ui_file * stream, const char *format,...)
2042 {
2043 va_list args;
2044 va_start (args, format);
2045 vfprintf_filtered (stream, format, args);
2046 va_end (args);
2047 }
2048
2049 void
2050 fprintf_unfiltered (struct ui_file * stream, const char *format,...)
2051 {
2052 va_list args;
2053 va_start (args, format);
2054 vfprintf_unfiltered (stream, format, args);
2055 va_end (args);
2056 }
2057
2058 /* Like fprintf_filtered, but prints its result indented.
2059 Called as fprintfi_filtered (spaces, stream, format, ...); */
2060
2061 void
2062 fprintfi_filtered (int spaces, struct ui_file * stream, const char *format,...)
2063 {
2064 va_list args;
2065 va_start (args, format);
2066 print_spaces_filtered (spaces, stream);
2067
2068 vfprintf_filtered (stream, format, args);
2069 va_end (args);
2070 }
2071
2072
2073 void
2074 printf_filtered (const char *format,...)
2075 {
2076 va_list args;
2077 va_start (args, format);
2078 vfprintf_filtered (gdb_stdout, format, args);
2079 va_end (args);
2080 }
2081
2082
2083 void
2084 printf_unfiltered (const char *format,...)
2085 {
2086 va_list args;
2087 va_start (args, format);
2088 vfprintf_unfiltered (gdb_stdout, format, args);
2089 va_end (args);
2090 }
2091
2092 /* Like printf_filtered, but prints it's result indented.
2093 Called as printfi_filtered (spaces, format, ...); */
2094
2095 void
2096 printfi_filtered (int spaces, const char *format,...)
2097 {
2098 va_list args;
2099 va_start (args, format);
2100 print_spaces_filtered (spaces, gdb_stdout);
2101 vfprintf_filtered (gdb_stdout, format, args);
2102 va_end (args);
2103 }
2104
2105 /* Easy -- but watch out!
2106
2107 This routine is *not* a replacement for puts()! puts() appends a newline.
2108 This one doesn't, and had better not! */
2109
2110 void
2111 puts_filtered (const char *string)
2112 {
2113 fputs_filtered (string, gdb_stdout);
2114 }
2115
2116 void
2117 puts_unfiltered (const char *string)
2118 {
2119 fputs_unfiltered (string, gdb_stdout);
2120 }
2121
2122 /* Return a pointer to N spaces and a null. The pointer is good
2123 until the next call to here. */
2124 char *
2125 n_spaces (int n)
2126 {
2127 char *t;
2128 static char *spaces = 0;
2129 static int max_spaces = -1;
2130
2131 if (n > max_spaces)
2132 {
2133 if (spaces)
2134 xfree (spaces);
2135 spaces = (char *) xmalloc (n + 1);
2136 for (t = spaces + n; t != spaces;)
2137 *--t = ' ';
2138 spaces[n] = '\0';
2139 max_spaces = n;
2140 }
2141
2142 return spaces + max_spaces - n;
2143 }
2144
2145 /* Print N spaces. */
2146 void
2147 print_spaces_filtered (int n, struct ui_file *stream)
2148 {
2149 fputs_filtered (n_spaces (n), stream);
2150 }
2151 \f
2152 /* C++ demangler stuff. */
2153
2154 /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2155 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2156 If the name is not mangled, or the language for the name is unknown, or
2157 demangling is off, the name is printed in its "raw" form. */
2158
2159 void
2160 fprintf_symbol_filtered (struct ui_file *stream, char *name, enum language lang,
2161 int arg_mode)
2162 {
2163 char *demangled;
2164
2165 if (name != NULL)
2166 {
2167 /* If user wants to see raw output, no problem. */
2168 if (!demangle)
2169 {
2170 fputs_filtered (name, stream);
2171 }
2172 else
2173 {
2174 switch (lang)
2175 {
2176 case language_cplus:
2177 demangled = cplus_demangle (name, arg_mode);
2178 break;
2179 case language_java:
2180 demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
2181 break;
2182 case language_chill:
2183 demangled = chill_demangle (name);
2184 break;
2185 default:
2186 demangled = NULL;
2187 break;
2188 }
2189 fputs_filtered (demangled ? demangled : name, stream);
2190 if (demangled != NULL)
2191 {
2192 xfree (demangled);
2193 }
2194 }
2195 }
2196 }
2197
2198 /* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2199 differences in whitespace. Returns 0 if they match, non-zero if they
2200 don't (slightly different than strcmp()'s range of return values).
2201
2202 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2203 This "feature" is useful when searching for matching C++ function names
2204 (such as if the user types 'break FOO', where FOO is a mangled C++
2205 function). */
2206
2207 int
2208 strcmp_iw (const char *string1, const char *string2)
2209 {
2210 while ((*string1 != '\0') && (*string2 != '\0'))
2211 {
2212 while (isspace (*string1))
2213 {
2214 string1++;
2215 }
2216 while (isspace (*string2))
2217 {
2218 string2++;
2219 }
2220 if (*string1 != *string2)
2221 {
2222 break;
2223 }
2224 if (*string1 != '\0')
2225 {
2226 string1++;
2227 string2++;
2228 }
2229 }
2230 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2231 }
2232 \f
2233
2234 /*
2235 ** subset_compare()
2236 ** Answer whether string_to_compare is a full or partial match to
2237 ** template_string. The partial match must be in sequence starting
2238 ** at index 0.
2239 */
2240 int
2241 subset_compare (char *string_to_compare, char *template_string)
2242 {
2243 int match;
2244 if (template_string != (char *) NULL && string_to_compare != (char *) NULL &&
2245 strlen (string_to_compare) <= strlen (template_string))
2246 match = (strncmp (template_string,
2247 string_to_compare,
2248 strlen (string_to_compare)) == 0);
2249 else
2250 match = 0;
2251 return match;
2252 }
2253
2254
2255 static void pagination_on_command (char *arg, int from_tty);
2256 static void
2257 pagination_on_command (char *arg, int from_tty)
2258 {
2259 pagination_enabled = 1;
2260 }
2261
2262 static void pagination_on_command (char *arg, int from_tty);
2263 static void
2264 pagination_off_command (char *arg, int from_tty)
2265 {
2266 pagination_enabled = 0;
2267 }
2268 \f
2269
2270 void
2271 initialize_utils (void)
2272 {
2273 struct cmd_list_element *c;
2274
2275 c = add_set_cmd ("width", class_support, var_uinteger,
2276 (char *) &chars_per_line,
2277 "Set number of characters gdb thinks are in a line.",
2278 &setlist);
2279 add_show_from_set (c, &showlist);
2280 c->function.sfunc = set_width_command;
2281
2282 add_show_from_set
2283 (add_set_cmd ("height", class_support,
2284 var_uinteger, (char *) &lines_per_page,
2285 "Set number of lines gdb thinks are in a page.", &setlist),
2286 &showlist);
2287
2288 init_page_info ();
2289
2290 /* If the output is not a terminal, don't paginate it. */
2291 if (!ui_file_isatty (gdb_stdout))
2292 lines_per_page = UINT_MAX;
2293
2294 set_width_command ((char *) NULL, 0, c);
2295
2296 add_show_from_set
2297 (add_set_cmd ("demangle", class_support, var_boolean,
2298 (char *) &demangle,
2299 "Set demangling of encoded C++ names when displaying symbols.",
2300 &setprintlist),
2301 &showprintlist);
2302
2303 add_show_from_set
2304 (add_set_cmd ("pagination", class_support,
2305 var_boolean, (char *) &pagination_enabled,
2306 "Set state of pagination.", &setlist),
2307 &showlist);
2308
2309 if (xdb_commands)
2310 {
2311 add_com ("am", class_support, pagination_on_command,
2312 "Enable pagination");
2313 add_com ("sm", class_support, pagination_off_command,
2314 "Disable pagination");
2315 }
2316
2317 add_show_from_set
2318 (add_set_cmd ("sevenbit-strings", class_support, var_boolean,
2319 (char *) &sevenbit_strings,
2320 "Set printing of 8-bit characters in strings as \\nnn.",
2321 &setprintlist),
2322 &showprintlist);
2323
2324 add_show_from_set
2325 (add_set_cmd ("asm-demangle", class_support, var_boolean,
2326 (char *) &asm_demangle,
2327 "Set demangling of C++ names in disassembly listings.",
2328 &setprintlist),
2329 &showprintlist);
2330 }
2331
2332 /* Machine specific function to handle SIGWINCH signal. */
2333
2334 #ifdef SIGWINCH_HANDLER_BODY
2335 SIGWINCH_HANDLER_BODY
2336 #endif
2337 \f
2338 /* Support for converting target fp numbers into host DOUBLEST format. */
2339
2340 /* XXX - This code should really be in libiberty/floatformat.c, however
2341 configuration issues with libiberty made this very difficult to do in the
2342 available time. */
2343
2344 #include "floatformat.h"
2345 #include <math.h> /* ldexp */
2346
2347 /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
2348 going to bother with trying to muck around with whether it is defined in
2349 a system header, what we do if not, etc. */
2350 #define FLOATFORMAT_CHAR_BIT 8
2351
2352 static unsigned long get_field (unsigned char *,
2353 enum floatformat_byteorders,
2354 unsigned int, unsigned int, unsigned int);
2355
2356 /* Extract a field which starts at START and is LEN bytes long. DATA and
2357 TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
2358 static unsigned long
2359 get_field (unsigned char *data, enum floatformat_byteorders order,
2360 unsigned int total_len, unsigned int start, unsigned int len)
2361 {
2362 unsigned long result;
2363 unsigned int cur_byte;
2364 int cur_bitshift;
2365
2366 /* Start at the least significant part of the field. */
2367 if (order == floatformat_little || order == floatformat_littlebyte_bigword)
2368 {
2369 /* We start counting from the other end (i.e, from the high bytes
2370 rather than the low bytes). As such, we need to be concerned
2371 with what happens if bit 0 doesn't start on a byte boundary.
2372 I.e, we need to properly handle the case where total_len is
2373 not evenly divisible by 8. So we compute ``excess'' which
2374 represents the number of bits from the end of our starting
2375 byte needed to get to bit 0. */
2376 int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT);
2377 cur_byte = (total_len / FLOATFORMAT_CHAR_BIT)
2378 - ((start + len + excess) / FLOATFORMAT_CHAR_BIT);
2379 cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT)
2380 - FLOATFORMAT_CHAR_BIT;
2381 }
2382 else
2383 {
2384 cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
2385 cur_bitshift =
2386 ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
2387 }
2388 if (cur_bitshift > -FLOATFORMAT_CHAR_BIT)
2389 result = *(data + cur_byte) >> (-cur_bitshift);
2390 else
2391 result = 0;
2392 cur_bitshift += FLOATFORMAT_CHAR_BIT;
2393 if (order == floatformat_little || order == floatformat_littlebyte_bigword)
2394 ++cur_byte;
2395 else
2396 --cur_byte;
2397
2398 /* Move towards the most significant part of the field. */
2399 while (cur_bitshift < len)
2400 {
2401 result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
2402 cur_bitshift += FLOATFORMAT_CHAR_BIT;
2403 if (order == floatformat_little || order == floatformat_littlebyte_bigword)
2404 ++cur_byte;
2405 else
2406 --cur_byte;
2407 }
2408 if (len < sizeof(result) * FLOATFORMAT_CHAR_BIT)
2409 /* Mask out bits which are not part of the field */
2410 result &= ((1UL << len) - 1);
2411 return result;
2412 }
2413
2414 /* Convert from FMT to a DOUBLEST.
2415 FROM is the address of the extended float.
2416 Store the DOUBLEST in *TO. */
2417
2418 void
2419 floatformat_to_doublest (const struct floatformat *fmt, char *from,
2420 DOUBLEST *to)
2421 {
2422 unsigned char *ufrom = (unsigned char *) from;
2423 DOUBLEST dto;
2424 long exponent;
2425 unsigned long mant;
2426 unsigned int mant_bits, mant_off;
2427 int mant_bits_left;
2428 int special_exponent; /* It's a NaN, denorm or zero */
2429
2430 /* If the mantissa bits are not contiguous from one end of the
2431 mantissa to the other, we need to make a private copy of the
2432 source bytes that is in the right order since the unpacking
2433 algorithm assumes that the bits are contiguous.
2434
2435 Swap the bytes individually rather than accessing them through
2436 "long *" since we have no guarantee that they start on a long
2437 alignment, and also sizeof(long) for the host could be different
2438 than sizeof(long) for the target. FIXME: Assumes sizeof(long)
2439 for the target is 4. */
2440
2441 if (fmt->byteorder == floatformat_littlebyte_bigword)
2442 {
2443 static unsigned char *newfrom;
2444 unsigned char *swapin, *swapout;
2445 int longswaps;
2446
2447 longswaps = fmt->totalsize / FLOATFORMAT_CHAR_BIT;
2448 longswaps >>= 3;
2449
2450 if (newfrom == NULL)
2451 {
2452 newfrom = (unsigned char *) xmalloc (fmt->totalsize);
2453 }
2454 swapout = newfrom;
2455 swapin = ufrom;
2456 ufrom = newfrom;
2457 while (longswaps-- > 0)
2458 {
2459 /* This is ugly, but efficient */
2460 *swapout++ = swapin[4];
2461 *swapout++ = swapin[5];
2462 *swapout++ = swapin[6];
2463 *swapout++ = swapin[7];
2464 *swapout++ = swapin[0];
2465 *swapout++ = swapin[1];
2466 *swapout++ = swapin[2];
2467 *swapout++ = swapin[3];
2468 swapin += 8;
2469 }
2470 }
2471
2472 exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
2473 fmt->exp_start, fmt->exp_len);
2474 /* Note that if exponent indicates a NaN, we can't really do anything useful
2475 (not knowing if the host has NaN's, or how to build one). So it will
2476 end up as an infinity or something close; that is OK. */
2477
2478 mant_bits_left = fmt->man_len;
2479 mant_off = fmt->man_start;
2480 dto = 0.0;
2481
2482 special_exponent = exponent == 0 || exponent == fmt->exp_nan;
2483
2484 /* Don't bias NaNs. Use minimum exponent for denorms. For simplicity,
2485 we don't check for zero as the exponent doesn't matter. */
2486 if (!special_exponent)
2487 exponent -= fmt->exp_bias;
2488 else if (exponent == 0)
2489 exponent = 1 - fmt->exp_bias;
2490
2491 /* Build the result algebraically. Might go infinite, underflow, etc;
2492 who cares. */
2493
2494 /* If this format uses a hidden bit, explicitly add it in now. Otherwise,
2495 increment the exponent by one to account for the integer bit. */
2496
2497 if (!special_exponent)
2498 {
2499 if (fmt->intbit == floatformat_intbit_no)
2500 dto = ldexp (1.0, exponent);
2501 else
2502 exponent++;
2503 }
2504
2505 while (mant_bits_left > 0)
2506 {
2507 mant_bits = min (mant_bits_left, 32);
2508
2509 mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
2510 mant_off, mant_bits);
2511
2512 dto += ldexp ((double) mant, exponent - mant_bits);
2513 exponent -= mant_bits;
2514 mant_off += mant_bits;
2515 mant_bits_left -= mant_bits;
2516 }
2517
2518 /* Negate it if negative. */
2519 if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
2520 dto = -dto;
2521 *to = dto;
2522 }
2523 \f
2524 static void put_field (unsigned char *, enum floatformat_byteorders,
2525 unsigned int,
2526 unsigned int, unsigned int, unsigned long);
2527
2528 /* Set a field which starts at START and is LEN bytes long. DATA and
2529 TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
2530 static void
2531 put_field (unsigned char *data, enum floatformat_byteorders order,
2532 unsigned int total_len, unsigned int start, unsigned int len,
2533 unsigned long stuff_to_put)
2534 {
2535 unsigned int cur_byte;
2536 int cur_bitshift;
2537
2538 /* Start at the least significant part of the field. */
2539 if (order == floatformat_little || order == floatformat_littlebyte_bigword)
2540 {
2541 int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT);
2542 cur_byte = (total_len / FLOATFORMAT_CHAR_BIT)
2543 - ((start + len + excess) / FLOATFORMAT_CHAR_BIT);
2544 cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT)
2545 - FLOATFORMAT_CHAR_BIT;
2546 }
2547 else
2548 {
2549 cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
2550 cur_bitshift =
2551 ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
2552 }
2553 if (cur_bitshift > -FLOATFORMAT_CHAR_BIT)
2554 {
2555 *(data + cur_byte) &=
2556 ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1)
2557 << (-cur_bitshift));
2558 *(data + cur_byte) |=
2559 (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
2560 }
2561 cur_bitshift += FLOATFORMAT_CHAR_BIT;
2562 if (order == floatformat_little || order == floatformat_littlebyte_bigword)
2563 ++cur_byte;
2564 else
2565 --cur_byte;
2566
2567 /* Move towards the most significant part of the field. */
2568 while (cur_bitshift < len)
2569 {
2570 if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
2571 {
2572 /* This is the last byte. */
2573 *(data + cur_byte) &=
2574 ~((1 << (len - cur_bitshift)) - 1);
2575 *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
2576 }
2577 else
2578 *(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
2579 & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
2580 cur_bitshift += FLOATFORMAT_CHAR_BIT;
2581 if (order == floatformat_little || order == floatformat_littlebyte_bigword)
2582 ++cur_byte;
2583 else
2584 --cur_byte;
2585 }
2586 }
2587
2588 #ifdef HAVE_LONG_DOUBLE
2589 /* Return the fractional part of VALUE, and put the exponent of VALUE in *EPTR.
2590 The range of the returned value is >= 0.5 and < 1.0. This is equivalent to
2591 frexp, but operates on the long double data type. */
2592
2593 static long double ldfrexp (long double value, int *eptr);
2594
2595 static long double
2596 ldfrexp (long double value, int *eptr)
2597 {
2598 long double tmp;
2599 int exp;
2600
2601 /* Unfortunately, there are no portable functions for extracting the exponent
2602 of a long double, so we have to do it iteratively by multiplying or dividing
2603 by two until the fraction is between 0.5 and 1.0. */
2604
2605 if (value < 0.0l)
2606 value = -value;
2607
2608 tmp = 1.0l;
2609 exp = 0;
2610
2611 if (value >= tmp) /* Value >= 1.0 */
2612 while (value >= tmp)
2613 {
2614 tmp *= 2.0l;
2615 exp++;
2616 }
2617 else if (value != 0.0l) /* Value < 1.0 and > 0.0 */
2618 {
2619 while (value < tmp)
2620 {
2621 tmp /= 2.0l;
2622 exp--;
2623 }
2624 tmp *= 2.0l;
2625 exp++;
2626 }
2627
2628 *eptr = exp;
2629 return value / tmp;
2630 }
2631 #endif /* HAVE_LONG_DOUBLE */
2632
2633
2634 /* The converse: convert the DOUBLEST *FROM to an extended float
2635 and store where TO points. Neither FROM nor TO have any alignment
2636 restrictions. */
2637
2638 void
2639 floatformat_from_doublest (CONST struct floatformat *fmt, DOUBLEST *from,
2640 char *to)
2641 {
2642 DOUBLEST dfrom;
2643 int exponent;
2644 DOUBLEST mant;
2645 unsigned int mant_bits, mant_off;
2646 int mant_bits_left;
2647 unsigned char *uto = (unsigned char *) to;
2648
2649 memcpy (&dfrom, from, sizeof (dfrom));
2650 memset (uto, 0, (fmt->totalsize + FLOATFORMAT_CHAR_BIT - 1)
2651 / FLOATFORMAT_CHAR_BIT);
2652 if (dfrom == 0)
2653 return; /* Result is zero */
2654 if (dfrom != dfrom) /* Result is NaN */
2655 {
2656 /* From is NaN */
2657 put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
2658 fmt->exp_len, fmt->exp_nan);
2659 /* Be sure it's not infinity, but NaN value is irrel */
2660 put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
2661 32, 1);
2662 return;
2663 }
2664
2665 /* If negative, set the sign bit. */
2666 if (dfrom < 0)
2667 {
2668 put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
2669 dfrom = -dfrom;
2670 }
2671
2672 if (dfrom + dfrom == dfrom && dfrom != 0.0) /* Result is Infinity */
2673 {
2674 /* Infinity exponent is same as NaN's. */
2675 put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
2676 fmt->exp_len, fmt->exp_nan);
2677 /* Infinity mantissa is all zeroes. */
2678 put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
2679 fmt->man_len, 0);
2680 return;
2681 }
2682
2683 #ifdef HAVE_LONG_DOUBLE
2684 mant = ldfrexp (dfrom, &exponent);
2685 #else
2686 mant = frexp (dfrom, &exponent);
2687 #endif
2688
2689 put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len,
2690 exponent + fmt->exp_bias - 1);
2691
2692 mant_bits_left = fmt->man_len;
2693 mant_off = fmt->man_start;
2694 while (mant_bits_left > 0)
2695 {
2696 unsigned long mant_long;
2697 mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
2698
2699 mant *= 4294967296.0;
2700 mant_long = ((unsigned long) mant) & 0xffffffffL;
2701 mant -= mant_long;
2702
2703 /* If the integer bit is implicit, then we need to discard it.
2704 If we are discarding a zero, we should be (but are not) creating
2705 a denormalized number which means adjusting the exponent
2706 (I think). */
2707 if (mant_bits_left == fmt->man_len
2708 && fmt->intbit == floatformat_intbit_no)
2709 {
2710 mant_long <<= 1;
2711 mant_long &= 0xffffffffL;
2712 mant_bits -= 1;
2713 }
2714
2715 if (mant_bits < 32)
2716 {
2717 /* The bits we want are in the most significant MANT_BITS bits of
2718 mant_long. Move them to the least significant. */
2719 mant_long >>= 32 - mant_bits;
2720 }
2721
2722 put_field (uto, fmt->byteorder, fmt->totalsize,
2723 mant_off, mant_bits, mant_long);
2724 mant_off += mant_bits;
2725 mant_bits_left -= mant_bits;
2726 }
2727 if (fmt->byteorder == floatformat_littlebyte_bigword)
2728 {
2729 int count;
2730 unsigned char *swaplow = uto;
2731 unsigned char *swaphigh = uto + 4;
2732 unsigned char tmp;
2733
2734 for (count = 0; count < 4; count++)
2735 {
2736 tmp = *swaplow;
2737 *swaplow++ = *swaphigh;
2738 *swaphigh++ = tmp;
2739 }
2740 }
2741 }
2742
2743 /* print routines to handle variable size regs, etc. */
2744
2745 /* temporary storage using circular buffer */
2746 #define NUMCELLS 16
2747 #define CELLSIZE 32
2748 static char *
2749 get_cell (void)
2750 {
2751 static char buf[NUMCELLS][CELLSIZE];
2752 static int cell = 0;
2753 if (++cell >= NUMCELLS)
2754 cell = 0;
2755 return buf[cell];
2756 }
2757
2758 int
2759 strlen_paddr (void)
2760 {
2761 return (TARGET_ADDR_BIT / 8 * 2);
2762 }
2763
2764 char *
2765 paddr (CORE_ADDR addr)
2766 {
2767 return phex (addr, TARGET_ADDR_BIT / 8);
2768 }
2769
2770 char *
2771 paddr_nz (CORE_ADDR addr)
2772 {
2773 return phex_nz (addr, TARGET_ADDR_BIT / 8);
2774 }
2775
2776 static void
2777 decimal2str (char *paddr_str, char *sign, ULONGEST addr)
2778 {
2779 /* steal code from valprint.c:print_decimal(). Should this worry
2780 about the real size of addr as the above does? */
2781 unsigned long temp[3];
2782 int i = 0;
2783 do
2784 {
2785 temp[i] = addr % (1000 * 1000 * 1000);
2786 addr /= (1000 * 1000 * 1000);
2787 i++;
2788 }
2789 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
2790 switch (i)
2791 {
2792 case 1:
2793 sprintf (paddr_str, "%s%lu",
2794 sign, temp[0]);
2795 break;
2796 case 2:
2797 sprintf (paddr_str, "%s%lu%09lu",
2798 sign, temp[1], temp[0]);
2799 break;
2800 case 3:
2801 sprintf (paddr_str, "%s%lu%09lu%09lu",
2802 sign, temp[2], temp[1], temp[0]);
2803 break;
2804 default:
2805 abort ();
2806 }
2807 }
2808
2809 char *
2810 paddr_u (CORE_ADDR addr)
2811 {
2812 char *paddr_str = get_cell ();
2813 decimal2str (paddr_str, "", addr);
2814 return paddr_str;
2815 }
2816
2817 char *
2818 paddr_d (LONGEST addr)
2819 {
2820 char *paddr_str = get_cell ();
2821 if (addr < 0)
2822 decimal2str (paddr_str, "-", -addr);
2823 else
2824 decimal2str (paddr_str, "", addr);
2825 return paddr_str;
2826 }
2827
2828 /* eliminate warning from compiler on 32-bit systems */
2829 static int thirty_two = 32;
2830
2831 char *
2832 phex (ULONGEST l, int sizeof_l)
2833 {
2834 char *str = get_cell ();
2835 switch (sizeof_l)
2836 {
2837 case 8:
2838 sprintf (str, "%08lx%08lx",
2839 (unsigned long) (l >> thirty_two),
2840 (unsigned long) (l & 0xffffffff));
2841 break;
2842 case 4:
2843 sprintf (str, "%08lx", (unsigned long) l);
2844 break;
2845 case 2:
2846 sprintf (str, "%04x", (unsigned short) (l & 0xffff));
2847 break;
2848 default:
2849 phex (l, sizeof (l));
2850 break;
2851 }
2852 return str;
2853 }
2854
2855 char *
2856 phex_nz (ULONGEST l, int sizeof_l)
2857 {
2858 char *str = get_cell ();
2859 switch (sizeof_l)
2860 {
2861 case 8:
2862 {
2863 unsigned long high = (unsigned long) (l >> thirty_two);
2864 if (high == 0)
2865 sprintf (str, "%lx", (unsigned long) (l & 0xffffffff));
2866 else
2867 sprintf (str, "%lx%08lx",
2868 high, (unsigned long) (l & 0xffffffff));
2869 break;
2870 }
2871 case 4:
2872 sprintf (str, "%lx", (unsigned long) l);
2873 break;
2874 case 2:
2875 sprintf (str, "%x", (unsigned short) (l & 0xffff));
2876 break;
2877 default:
2878 phex_nz (l, sizeof (l));
2879 break;
2880 }
2881 return str;
2882 }
2883
2884
2885 /* Convert to / from the hosts pointer to GDB's internal CORE_ADDR
2886 using the target's conversion routines. */
2887 CORE_ADDR
2888 host_pointer_to_address (void *ptr)
2889 {
2890 if (sizeof (ptr) != TYPE_LENGTH (builtin_type_ptr))
2891 internal_error (__FILE__, __LINE__,
2892 "core_addr_to_void_ptr: bad cast");
2893 return POINTER_TO_ADDRESS (builtin_type_ptr, &ptr);
2894 }
2895
2896 void *
2897 address_to_host_pointer (CORE_ADDR addr)
2898 {
2899 void *ptr;
2900 if (sizeof (ptr) != TYPE_LENGTH (builtin_type_ptr))
2901 internal_error (__FILE__, __LINE__,
2902 "core_addr_to_void_ptr: bad cast");
2903 ADDRESS_TO_POINTER (builtin_type_ptr, &ptr, addr);
2904 return ptr;
2905 }
This page took 0.115012 seconds and 3 git commands to generate.