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