OSDN Git Service

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