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