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