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