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