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