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