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