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