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