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