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