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