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