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