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