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