Re-indent elf_x86_64_relocate_section
[deliverable/binutils-gdb.git] / gdb / utils.c
CommitLineData
c906108c 1/* General utility routines for GDB, the GNU debugger.
1bac305b 2
61baf725 3 Copyright (C) 1986-2017 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
4e8f7a8b 20#include "defs.h"
4e8f7a8b 21#include <ctype.h>
0b6cb71e 22#include "gdb_wait.h"
4e8f7a8b 23#include "event-top.h"
95e54da7 24#include "gdbthread.h"
202cbf1c 25#include "fnmatch.h"
cbb099e8 26#include "gdb_bfd.h"
7991dee7
JK
27#ifdef HAVE_SYS_RESOURCE_H
28#include <sys/resource.h>
29#endif /* HAVE_SYS_RESOURCE_H */
4e8f7a8b 30
6a83354a
AC
31#ifdef TUI
32#include "tui/tui.h" /* For tui_get_command_dimension. */
33#endif
34
9d271fd8
AC
35#ifdef __GO32__
36#include <pc.h>
37#endif
38
042be3a9 39#include <signal.h>
c906108c
SS
40#include "gdbcmd.h"
41#include "serial.h"
42#include "bfd.h"
43#include "target.h"
50f182aa 44#include "gdb-demangle.h"
c906108c
SS
45#include "expression.h"
46#include "language.h"
234b45d4 47#include "charset.h"
c906108c 48#include "annotate.h"
303c8ebd 49#include "filenames.h"
7b90c3f9 50#include "symfile.h"
ae5a43e0 51#include "gdb_obstack.h"
9544c605 52#include "gdbcore.h"
698ba934 53#include "top.h"
7c953934 54#include "main.h"
cb08cc53 55#include "solist.h"
c906108c 56
8731e58e 57#include "inferior.h" /* for signed_pointer_to_address */
ac2e2ef7 58
3b78cdbb 59#include "gdb_curses.h"
020cc13c 60
dbda9972 61#include "readline/readline.h"
c906108c 62
dcb07cfa 63#include <chrono>
75feb17d 64
8626589c 65#include "gdb_usleep.h"
390a8aca 66#include "interps.h"
db1ff28b 67#include "gdb_regex.h"
15652511 68#include "job-control.h"
8626589c 69
a3828db0 70#if !HAVE_DECL_MALLOC
5ac79d78 71extern PTR malloc (); /* ARI: PTR */
3c37485b 72#endif
a3828db0 73#if !HAVE_DECL_REALLOC
5ac79d78 74extern PTR realloc (); /* ARI: PTR */
0e52036f 75#endif
a3828db0 76#if !HAVE_DECL_FREE
81b8eb80
AC
77extern void free ();
78#endif
81b8eb80 79
9a4105ab 80void (*deprecated_error_begin_hook) (void);
c906108c
SS
81
82/* Prototypes for local functions */
83
d9fcf2fb 84static void vfprintf_maybe_filtered (struct ui_file *, const char *,
a0b31db1 85 va_list, int) ATTRIBUTE_PRINTF (2, 0);
c906108c 86
d9fcf2fb 87static void fputs_maybe_filtered (const char *, struct ui_file *, int);
c906108c 88
a14ed312 89static void prompt_for_continue (void);
c906108c 90
eb0d3137 91static void set_screen_size (void);
a14ed312 92static void set_width (void);
c906108c 93
260c0b2a
DE
94/* Time spent in prompt_for_continue in the currently executing command
95 waiting for user to respond.
96 Initialized in make_command_stats_cleanup.
97 Modified in prompt_for_continue and defaulted_query.
98 Used in report_command_stats. */
99
dcb07cfa 100static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
260c0b2a 101
75feb17d
DJ
102/* A flag indicating whether to timestamp debugging messages. */
103
104static int debug_timestamp = 0;
105
c906108c
SS
106/* Nonzero means that strings with character values >0x7F should be printed
107 as octal escapes. Zero means just print the value (e.g. it's an
108 international character, and the terminal or window can cope.) */
109
110int sevenbit_strings = 0;
920d2a44
AC
111static void
112show_sevenbit_strings (struct ui_file *file, int from_tty,
113 struct cmd_list_element *c, const char *value)
114{
3e43a32a
MS
115 fprintf_filtered (file, _("Printing of 8-bit characters "
116 "in strings as \\nnn is %s.\n"),
920d2a44
AC
117 value);
118}
c906108c 119
c906108c
SS
120/* String to be printed before warning messages, if any. */
121
69bbf465 122const char *warning_pre_print = "\nwarning: ";
c906108c
SS
123
124int pagination_enabled = 1;
920d2a44
AC
125static void
126show_pagination_enabled (struct ui_file *file, int from_tty,
127 struct cmd_list_element *c, const char *value)
128{
129 fprintf_filtered (file, _("State of pagination is %s.\n"), value);
130}
131
c906108c 132\f
c27f5738 133/* Cleanup utilities.
c5aa993b 134
c27f5738
DE
135 These are not defined in cleanups.c (nor declared in cleanups.h)
136 because while they use the "cleanup API" they are not part of the
137 "cleanup API". */
7a292a7a 138
7a292a7a 139static void
fba45db2 140do_freeargv (void *arg)
7a292a7a 141{
c5aa993b 142 freeargv ((char **) arg);
7a292a7a
SS
143}
144
145struct cleanup *
fba45db2 146make_cleanup_freeargv (char **arg)
7a292a7a 147{
e0088cfd 148 return make_cleanup (do_freeargv, arg);
7a292a7a
SS
149}
150
7c8a8b04
TT
151/* Helper function which does the work for make_cleanup_fclose. */
152
153static void
154do_fclose_cleanup (void *arg)
155{
19ba03f4 156 FILE *file = (FILE *) arg;
e0627e85 157
c02866a0 158 fclose (file);
7c8a8b04
TT
159}
160
161/* Return a new cleanup that closes FILE. */
162
163struct cleanup *
164make_cleanup_fclose (FILE *file)
165{
166 return make_cleanup (do_fclose_cleanup, file);
167}
168
8d4d924b
JK
169/* Helper function for make_cleanup_ui_out_redirect_pop. */
170
171static void
172do_ui_out_redirect_pop (void *arg)
173{
19ba03f4 174 struct ui_out *uiout = (struct ui_out *) arg;
8d4d924b 175
7becfd03 176 uiout->redirect (NULL);
8d4d924b
JK
177}
178
179/* Return a new cleanup that pops the last redirection by ui_out_redirect
180 with NULL parameter. */
181
182struct cleanup *
183make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
184{
e0088cfd 185 return make_cleanup (do_ui_out_redirect_pop, uiout);
8d4d924b
JK
186}
187
7b90c3f9
JB
188static void
189do_free_section_addr_info (void *arg)
190{
19ba03f4 191 free_section_addr_info ((struct section_addr_info *) arg);
7b90c3f9
JB
192}
193
194struct cleanup *
195make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
196{
e0088cfd 197 return make_cleanup (do_free_section_addr_info, addrs);
7b90c3f9
JB
198}
199
0b080f59
VP
200struct restore_integer_closure
201{
202 int *variable;
203 int value;
204};
205
206static void
207restore_integer (void *p)
208{
19ba03f4
SM
209 struct restore_integer_closure *closure
210 = (struct restore_integer_closure *) p;
e0627e85 211
0b080f59
VP
212 *(closure->variable) = closure->value;
213}
7b90c3f9 214
3e43a32a
MS
215/* Remember the current value of *VARIABLE and make it restored when
216 the cleanup is run. */
5da1313b 217
c906108c 218struct cleanup *
0b080f59
VP
219make_cleanup_restore_integer (int *variable)
220{
8d749320 221 struct restore_integer_closure *c = XNEW (struct restore_integer_closure);
e0627e85 222
0b080f59
VP
223 c->variable = variable;
224 c->value = *variable;
225
e0088cfd 226 return make_cleanup_dtor (restore_integer, (void *) c, xfree);
0b080f59
VP
227}
228
3e43a32a
MS
229/* Remember the current value of *VARIABLE and make it restored when
230 the cleanup is run. */
5da1313b
JK
231
232struct cleanup *
233make_cleanup_restore_uinteger (unsigned int *variable)
234{
235 return make_cleanup_restore_integer ((int *) variable);
236}
237
c0edd9ed
JK
238/* Helper for make_cleanup_unpush_target. */
239
240static void
241do_unpush_target (void *arg)
242{
19ba03f4 243 struct target_ops *ops = (struct target_ops *) arg;
c0edd9ed
JK
244
245 unpush_target (ops);
246}
247
248/* Return a new cleanup that unpushes OPS. */
249
250struct cleanup *
251make_cleanup_unpush_target (struct target_ops *ops)
252{
e0088cfd 253 return make_cleanup (do_unpush_target, ops);
c0edd9ed
JK
254}
255
028d0ed5
TJB
256/* Helper for make_cleanup_value_free_to_mark. */
257
258static void
259do_value_free_to_mark (void *value)
260{
261 value_free_to_mark ((struct value *) value);
262}
263
264/* Free all values allocated since MARK was obtained by value_mark
265 (except for those released) when the cleanup is run. */
266
267struct cleanup *
268make_cleanup_value_free_to_mark (struct value *mark)
269{
e0088cfd 270 return make_cleanup (do_value_free_to_mark, mark);
028d0ed5
TJB
271}
272
72fc29ff
TT
273/* Helper for make_cleanup_value_free. */
274
275static void
276do_value_free (void *value)
277{
19ba03f4 278 value_free ((struct value *) value);
72fc29ff
TT
279}
280
281/* Free VALUE. */
282
283struct cleanup *
284make_cleanup_value_free (struct value *value)
285{
e0088cfd 286 return make_cleanup (do_value_free, value);
72fc29ff
TT
287}
288
cb08cc53
JK
289/* Helper for make_cleanup_free_so. */
290
291static void
292do_free_so (void *arg)
293{
19ba03f4 294 struct so_list *so = (struct so_list *) arg;
cb08cc53
JK
295
296 free_so (so);
297}
298
299/* Make cleanup handler calling free_so for SO. */
300
301struct cleanup *
302make_cleanup_free_so (struct so_list *so)
303{
e0088cfd 304 return make_cleanup (do_free_so, so);
cb08cc53
JK
305}
306
5b12a61c
JK
307/* Helper for make_cleanup_restore_current_language. */
308
309static void
310do_restore_current_language (void *p)
311{
aead7601 312 enum language saved_lang = (enum language) (uintptr_t) p;
5b12a61c
JK
313
314 set_language (saved_lang);
315}
316
317/* Remember the current value of CURRENT_LANGUAGE and make it restored when
318 the cleanup is run. */
319
320struct cleanup *
321make_cleanup_restore_current_language (void)
322{
323 enum language saved_lang = current_language->la_language;
324
325 return make_cleanup (do_restore_current_language,
326 (void *) (uintptr_t) saved_lang);
327}
328
410a0ff2
SDJ
329/* Helper function for make_cleanup_clear_parser_state. */
330
331static void
332do_clear_parser_state (void *ptr)
333{
334 struct parser_state **p = (struct parser_state **) ptr;
335
336 *p = NULL;
337}
338
339/* Clean (i.e., set to NULL) the parser state variable P. */
340
341struct cleanup *
342make_cleanup_clear_parser_state (struct parser_state **p)
343{
344 return make_cleanup (do_clear_parser_state, (void *) p);
345}
346
c906108c
SS
347/* This function is useful for cleanups.
348 Do
349
c5aa993b
JM
350 foo = xmalloc (...);
351 old_chain = make_cleanup (free_current_contents, &foo);
c906108c
SS
352
353 to arrange to free the object thus allocated. */
354
355void
2f9429ae 356free_current_contents (void *ptr)
c906108c 357{
19ba03f4 358 void **location = (void **) ptr;
e0627e85 359
e2f9c474 360 if (location == NULL)
8e65ff28 361 internal_error (__FILE__, __LINE__,
e2e0b3e5 362 _("free_current_contents: NULL pointer"));
2f9429ae 363 if (*location != NULL)
e2f9c474 364 {
b8c9b27d 365 xfree (*location);
e2f9c474
AC
366 *location = NULL;
367 }
c906108c 368}
c906108c 369\f
c5aa993b 370
8731e58e 371
f5a96129
AC
372/* Print a warning message. The first argument STRING is the warning
373 message, used as an fprintf format string, the second is the
374 va_list of arguments for that string. A warning is unfiltered (not
375 paginated) so that the user does not need to page through each
376 screen full of warnings when there are lots of them. */
c906108c
SS
377
378void
f5a96129 379vwarning (const char *string, va_list args)
c906108c 380{
9a4105ab
AC
381 if (deprecated_warning_hook)
382 (*deprecated_warning_hook) (string, args);
f5a96129
AC
383 else
384 {
c5ac1540
PA
385 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
386
0d2f5c07 387 if (target_supports_terminal_ours ())
c5ac1540
PA
388 {
389 make_cleanup_restore_target_terminal ();
390 target_terminal_ours_for_output ();
391 }
0d2f5c07
GB
392 if (filtered_printing_initialized ())
393 wrap_here (""); /* Force out any buffered output. */
f5a96129
AC
394 gdb_flush (gdb_stdout);
395 if (warning_pre_print)
306d9ac5 396 fputs_unfiltered (warning_pre_print, gdb_stderr);
f5a96129
AC
397 vfprintf_unfiltered (gdb_stderr, string, args);
398 fprintf_unfiltered (gdb_stderr, "\n");
c5ac1540
PA
399
400 do_cleanups (old_chain);
f5a96129 401 }
c906108c
SS
402}
403
c906108c
SS
404/* Print an error message and return to command level.
405 The first argument STRING is the error message, used as a fprintf string,
406 and the remaining args are passed as arguments to it. */
407
c25c4a8b 408void
4ce44c66
JM
409verror (const char *string, va_list args)
410{
6b1b7650 411 throw_verror (GENERIC_ERROR, string, args);
4ce44c66
JM
412}
413
c25c4a8b 414void
d7e74731 415error_stream (const string_file &stream)
2acceee2 416{
d7e74731 417 error (("%s"), stream.c_str ());
2acceee2 418}
c906108c 419
2437fd32
GB
420/* Emit a message and abort. */
421
422static void ATTRIBUTE_NORETURN
423abort_with_message (const char *msg)
424{
425 if (gdb_stderr == NULL)
426 fputs (msg, stderr);
427 else
428 fputs_unfiltered (msg, gdb_stderr);
429
430 abort (); /* NOTE: GDB has only three calls to abort(). */
431}
432
7991dee7
JK
433/* Dump core trying to increase the core soft limit to hard limit first. */
434
eae7090b 435void
7991dee7
JK
436dump_core (void)
437{
438#ifdef HAVE_SETRLIMIT
439 struct rlimit rlim = { RLIM_INFINITY, RLIM_INFINITY };
440
441 setrlimit (RLIMIT_CORE, &rlim);
442#endif /* HAVE_SETRLIMIT */
443
444 abort (); /* NOTE: GDB has only three calls to abort(). */
445}
446
3e43a32a 447/* Check whether GDB will be able to dump core using the dump_core
eae7090b
GB
448 function. Returns zero if GDB cannot or should not dump core.
449 If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected.
450 If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */
7991dee7 451
eae7090b
GB
452int
453can_dump_core (enum resource_limit_kind limit_kind)
7991dee7
JK
454{
455#ifdef HAVE_GETRLIMIT
456 struct rlimit rlim;
457
458 /* Be quiet and assume we can dump if an error is returned. */
459 if (getrlimit (RLIMIT_CORE, &rlim) != 0)
460 return 1;
461
eae7090b 462 switch (limit_kind)
7991dee7 463 {
eae7090b
GB
464 case LIMIT_CUR:
465 if (rlim.rlim_cur == 0)
466 return 0;
467
468 case LIMIT_MAX:
469 if (rlim.rlim_max == 0)
470 return 0;
7991dee7
JK
471 }
472#endif /* HAVE_GETRLIMIT */
473
474 return 1;
475}
476
eae7090b
GB
477/* Print a warning that we cannot dump core. */
478
479void
480warn_cant_dump_core (const char *reason)
481{
482 fprintf_unfiltered (gdb_stderr,
483 _("%s\nUnable to dump core, use `ulimit -c"
484 " unlimited' before executing GDB next time.\n"),
485 reason);
486}
487
488/* Check whether GDB will be able to dump core using the dump_core
489 function, and print a warning if we cannot. */
490
491static int
492can_dump_core_warn (enum resource_limit_kind limit_kind,
493 const char *reason)
494{
495 int core_dump_allowed = can_dump_core (limit_kind);
496
497 if (!core_dump_allowed)
498 warn_cant_dump_core (reason);
499
500 return core_dump_allowed;
501}
502
3c16cced
PA
503/* Allow the user to configure the debugger behavior with respect to
504 what to do when an internal problem is detected. */
505
506const char internal_problem_ask[] = "ask";
507const char internal_problem_yes[] = "yes";
508const char internal_problem_no[] = "no";
40478521 509static const char *const internal_problem_modes[] =
3c16cced
PA
510{
511 internal_problem_ask,
512 internal_problem_yes,
513 internal_problem_no,
514 NULL
515};
3c16cced 516
581e13c1 517/* Print a message reporting an internal error/warning. Ask the user
dec43320
AC
518 if they want to continue, dump core, or just exit. Return
519 something to indicate a quit. */
c906108c 520
dec43320 521struct internal_problem
c906108c 522{
dec43320 523 const char *name;
57fcfb1b 524 int user_settable_should_quit;
3c16cced 525 const char *should_quit;
57fcfb1b 526 int user_settable_should_dump_core;
3c16cced 527 const char *should_dump_core;
dec43320
AC
528};
529
530/* Report a problem, internal to GDB, to the user. Once the problem
531 has been reported, and assuming GDB didn't quit, the caller can
532 either allow execution to resume or throw an error. */
533
a0b31db1 534static void ATTRIBUTE_PRINTF (4, 0)
dec43320 535internal_vproblem (struct internal_problem *problem,
8731e58e 536 const char *file, int line, const char *fmt, va_list ap)
dec43320 537{
dec43320 538 static int dejavu;
375fc983 539 int quit_p;
7be570e7 540 int dump_core_p;
714b1282 541 char *reason;
48be7c1b 542 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
c906108c 543
dec43320 544 /* Don't allow infinite error/warning recursion. */
714b1282
AC
545 {
546 static char msg[] = "Recursive internal problem.\n";
5d502164 547
714b1282
AC
548 switch (dejavu)
549 {
550 case 0:
551 dejavu = 1;
552 break;
553 case 1:
554 dejavu = 2;
2437fd32 555 abort_with_message (msg);
714b1282
AC
556 default:
557 dejavu = 3;
bf1d7d9c
JB
558 /* Newer GLIBC versions put the warn_unused_result attribute
559 on write, but this is one of those rare cases where
560 ignoring the return value is correct. Casting to (void)
561 does not fix this problem. This is the solution suggested
562 at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */
563 if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg))
7991dee7 564 abort (); /* NOTE: GDB has only three calls to abort(). */
714b1282
AC
565 exit (1);
566 }
567 }
c906108c 568
714b1282
AC
569 /* Create a string containing the full error/warning message. Need
570 to call query with this full string, as otherwize the reason
571 (error/warning) and question become separated. Format using a
572 style similar to a compiler error message. Include extra detail
573 so that the user knows that they are living on the edge. */
574 {
575 char *msg;
5d502164 576
e623b504 577 msg = xstrvprintf (fmt, ap);
3e43a32a
MS
578 reason = xstrprintf ("%s:%d: %s: %s\n"
579 "A problem internal to GDB has been detected,\n"
580 "further debugging may prove unreliable.",
581 file, line, problem->name, msg);
714b1282
AC
582 xfree (msg);
583 make_cleanup (xfree, reason);
584 }
7be570e7 585
2437fd32
GB
586 /* Fall back to abort_with_message if gdb_stderr is not set up. */
587 if (gdb_stderr == NULL)
588 {
589 fputs (reason, stderr);
590 abort_with_message ("\n");
591 }
592
593 /* Try to get the message out and at the start of a new line. */
594 if (target_supports_terminal_ours ())
c5ac1540
PA
595 {
596 make_cleanup_restore_target_terminal ();
597 target_terminal_ours_for_output ();
598 }
2437fd32
GB
599 if (filtered_printing_initialized ())
600 begin_line ();
601
196a707b 602 /* Emit the message unless query will emit it below. */
2437fd32
GB
603 if (problem->should_quit != internal_problem_ask
604 || !confirm
605 || !filtered_printing_initialized ())
196a707b
GB
606 fprintf_unfiltered (gdb_stderr, "%s\n", reason);
607
3c16cced 608 if (problem->should_quit == internal_problem_ask)
dec43320 609 {
dec43320 610 /* Default (yes/batch case) is to quit GDB. When in batch mode
3c16cced
PA
611 this lessens the likelihood of GDB going into an infinite
612 loop. */
2437fd32 613 if (!confirm || !filtered_printing_initialized ())
196a707b 614 quit_p = 1;
26bb68be
PP
615 else
616 quit_p = query (_("%s\nQuit this debugging session? "), reason);
dec43320 617 }
3c16cced
PA
618 else if (problem->should_quit == internal_problem_yes)
619 quit_p = 1;
620 else if (problem->should_quit == internal_problem_no)
621 quit_p = 0;
622 else
623 internal_error (__FILE__, __LINE__, _("bad switch"));
dec43320 624
add6c04d
GB
625 fputs_unfiltered (_("\nThis is a bug, please report it."), gdb_stderr);
626 if (REPORT_BUGS_TO[0])
627 fprintf_unfiltered (gdb_stderr, _(" For instructions, see:\n%s."),
628 REPORT_BUGS_TO);
629 fputs_unfiltered ("\n\n", gdb_stderr);
630
3c16cced 631 if (problem->should_dump_core == internal_problem_ask)
dec43320 632 {
eae7090b 633 if (!can_dump_core_warn (LIMIT_MAX, reason))
7991dee7 634 dump_core_p = 0;
2437fd32
GB
635 else if (!filtered_printing_initialized ())
636 dump_core_p = 1;
7991dee7
JK
637 else
638 {
639 /* Default (yes/batch case) is to dump core. This leaves a GDB
640 `dropping' so that it is easier to see that something went
641 wrong in GDB. */
642 dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
643 }
dec43320 644 }
3c16cced 645 else if (problem->should_dump_core == internal_problem_yes)
eae7090b 646 dump_core_p = can_dump_core_warn (LIMIT_MAX, reason);
3c16cced
PA
647 else if (problem->should_dump_core == internal_problem_no)
648 dump_core_p = 0;
649 else
650 internal_error (__FILE__, __LINE__, _("bad switch"));
7be570e7 651
375fc983 652 if (quit_p)
7be570e7
JM
653 {
654 if (dump_core_p)
7991dee7 655 dump_core ();
375fc983
AC
656 else
657 exit (1);
7be570e7
JM
658 }
659 else
660 {
661 if (dump_core_p)
375fc983 662 {
9b265ec2 663#ifdef HAVE_WORKING_FORK
375fc983 664 if (fork () == 0)
7991dee7 665 dump_core ();
9b265ec2 666#endif
375fc983 667 }
7be570e7 668 }
96baa820
JM
669
670 dejavu = 0;
48be7c1b 671 do_cleanups (cleanup);
dec43320
AC
672}
673
674static struct internal_problem internal_error_problem = {
57fcfb1b 675 "internal-error", 1, internal_problem_ask, 1, internal_problem_ask
dec43320
AC
676};
677
c25c4a8b 678void
8731e58e 679internal_verror (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
680{
681 internal_vproblem (&internal_error_problem, file, line, fmt, ap);
2c51604d 682 throw_quit (_("Command aborted."));
c906108c
SS
683}
684
dec43320 685static struct internal_problem internal_warning_problem = {
57fcfb1b 686 "internal-warning", 1, internal_problem_ask, 1, internal_problem_ask
dec43320
AC
687};
688
689void
8731e58e 690internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
691{
692 internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
693}
694
57fcfb1b
GB
695static struct internal_problem demangler_warning_problem = {
696 "demangler-warning", 1, internal_problem_ask, 0, internal_problem_no
697};
698
699void
700demangler_vwarning (const char *file, int line, const char *fmt, va_list ap)
701{
702 internal_vproblem (&demangler_warning_problem, file, line, fmt, ap);
703}
704
705void
706demangler_warning (const char *file, int line, const char *string, ...)
707{
708 va_list ap;
709
710 va_start (ap, string);
711 demangler_vwarning (file, line, string, ap);
712 va_end (ap);
713}
714
3c16cced
PA
715/* Dummy functions to keep add_prefix_cmd happy. */
716
717static void
718set_internal_problem_cmd (char *args, int from_tty)
719{
720}
721
722static void
723show_internal_problem_cmd (char *args, int from_tty)
724{
725}
726
727/* When GDB reports an internal problem (error or warning) it gives
728 the user the opportunity to quit GDB and/or create a core file of
729 the current debug session. This function registers a few commands
730 that make it possible to specify that GDB should always or never
731 quit or create a core file, without asking. The commands look
732 like:
733
734 maint set PROBLEM-NAME quit ask|yes|no
735 maint show PROBLEM-NAME quit
736 maint set PROBLEM-NAME corefile ask|yes|no
737 maint show PROBLEM-NAME corefile
738
739 Where PROBLEM-NAME is currently "internal-error" or
740 "internal-warning". */
741
742static void
743add_internal_problem_command (struct internal_problem *problem)
744{
745 struct cmd_list_element **set_cmd_list;
746 struct cmd_list_element **show_cmd_list;
747 char *set_doc;
748 char *show_doc;
749
8d749320
SM
750 set_cmd_list = XNEW (struct cmd_list_element *);
751 show_cmd_list = XNEW (struct cmd_list_element *);
3c16cced
PA
752 *set_cmd_list = NULL;
753 *show_cmd_list = NULL;
754
755 set_doc = xstrprintf (_("Configure what GDB does when %s is detected."),
756 problem->name);
757
758 show_doc = xstrprintf (_("Show what GDB does when %s is detected."),
759 problem->name);
760
761 add_prefix_cmd ((char*) problem->name,
762 class_maintenance, set_internal_problem_cmd, set_doc,
763 set_cmd_list,
c4f7c687
MK
764 concat ("maintenance set ", problem->name, " ",
765 (char *) NULL),
3c16cced
PA
766 0/*allow-unknown*/, &maintenance_set_cmdlist);
767
768 add_prefix_cmd ((char*) problem->name,
769 class_maintenance, show_internal_problem_cmd, show_doc,
770 show_cmd_list,
c4f7c687
MK
771 concat ("maintenance show ", problem->name, " ",
772 (char *) NULL),
3c16cced
PA
773 0/*allow-unknown*/, &maintenance_show_cmdlist);
774
57fcfb1b
GB
775 if (problem->user_settable_should_quit)
776 {
777 set_doc = xstrprintf (_("Set whether GDB should quit "
778 "when an %s is detected"),
779 problem->name);
780 show_doc = xstrprintf (_("Show whether GDB will quit "
781 "when an %s is detected"),
782 problem->name);
783 add_setshow_enum_cmd ("quit", class_maintenance,
784 internal_problem_modes,
785 &problem->should_quit,
786 set_doc,
787 show_doc,
788 NULL, /* help_doc */
789 NULL, /* setfunc */
790 NULL, /* showfunc */
791 set_cmd_list,
792 show_cmd_list);
793
794 xfree (set_doc);
795 xfree (show_doc);
796 }
1eefb858 797
57fcfb1b
GB
798 if (problem->user_settable_should_dump_core)
799 {
800 set_doc = xstrprintf (_("Set whether GDB should create a core "
801 "file of GDB when %s is detected"),
802 problem->name);
803 show_doc = xstrprintf (_("Show whether GDB will create a core "
804 "file of GDB when %s is detected"),
805 problem->name);
806 add_setshow_enum_cmd ("corefile", class_maintenance,
807 internal_problem_modes,
808 &problem->should_dump_core,
809 set_doc,
810 show_doc,
811 NULL, /* help_doc */
812 NULL, /* setfunc */
813 NULL, /* showfunc */
814 set_cmd_list,
815 show_cmd_list);
816
817 xfree (set_doc);
818 xfree (show_doc);
819 }
3c16cced
PA
820}
821
0cf4063e
JB
822/* Return a newly allocated string, containing the PREFIX followed
823 by the system error message for errno (separated by a colon).
824
825 The result must be deallocated after use. */
826
827static char *
828perror_string (const char *prefix)
829{
830 char *err;
831 char *combined;
832
833 err = safe_strerror (errno);
834 combined = (char *) xmalloc (strlen (err) + strlen (prefix) + 3);
835 strcpy (combined, prefix);
836 strcat (combined, ": ");
837 strcat (combined, err);
838
839 return combined;
840}
841
c906108c 842/* Print the system error message for errno, and also mention STRING
598d3636
JK
843 as the file name for which the error was encountered. Use ERRCODE
844 for the thrown exception. Then return to command level. */
c906108c 845
c25c4a8b 846void
598d3636 847throw_perror_with_name (enum errors errcode, const char *string)
c906108c 848{
c906108c
SS
849 char *combined;
850
0cf4063e
JB
851 combined = perror_string (string);
852 make_cleanup (xfree, combined);
c906108c
SS
853
854 /* I understand setting these is a matter of taste. Still, some people
855 may clear errno but not know about bfd_error. Doing this here is not
581e13c1 856 unreasonable. */
c906108c
SS
857 bfd_set_error (bfd_error_no_error);
858 errno = 0;
859
598d3636
JK
860 throw_error (errcode, _("%s."), combined);
861}
862
863/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
864
865void
866perror_with_name (const char *string)
867{
868 throw_perror_with_name (GENERIC_ERROR, string);
c906108c
SS
869}
870
7c647d61
JB
871/* Same as perror_with_name except that it prints a warning instead
872 of throwing an error. */
873
874void
875perror_warning_with_name (const char *string)
876{
877 char *combined;
878
879 combined = perror_string (string);
880 warning (_("%s"), combined);
881 xfree (combined);
882}
883
c906108c
SS
884/* Print the system error message for ERRCODE, and also mention STRING
885 as the file name for which the error was encountered. */
886
887void
6972bc8b 888print_sys_errmsg (const char *string, int errcode)
c906108c
SS
889{
890 char *err;
891 char *combined;
892
893 err = safe_strerror (errcode);
894 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
895 strcpy (combined, string);
896 strcat (combined, ": ");
897 strcat (combined, err);
898
899 /* We want anything which was printed on stdout to come out first, before
900 this message. */
901 gdb_flush (gdb_stdout);
902 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
903}
904
905/* Control C eventually causes this to be called, at a convenient time. */
906
907void
fba45db2 908quit (void)
c906108c 909{
f38d3ad1
PA
910 struct ui *ui = current_ui;
911
06c868a8
JK
912 if (sync_quit_force_run)
913 {
914 sync_quit_force_run = 0;
268a799a 915 quit_force (NULL, 0);
06c868a8
JK
916 }
917
7be570e7
JM
918#ifdef __MSDOS__
919 /* No steenking SIGINT will ever be coming our way when the
920 program is resumed. Don't lie. */
2c51604d 921 throw_quit ("Quit");
7be570e7 922#else
c906108c 923 if (job_control
8731e58e
AC
924 /* If there is no terminal switching for this target, then we can't
925 possibly get screwed by the lack of job control. */
b0ed115f 926 || !target_supports_terminal_ours ())
2c51604d 927 throw_quit ("Quit");
c906108c 928 else
2c51604d 929 throw_quit ("Quit (expect signal SIGINT when the program is resumed)");
7be570e7 930#endif
c906108c
SS
931}
932
abc56d60
PA
933/* See defs.h. */
934
935void
936maybe_quit (void)
937{
048094ac 938 if (sync_quit_force_run)
abc56d60 939 quit ();
048094ac
PA
940
941 quit_handler ();
942
abc56d60
PA
943 if (deprecated_interactive_hook)
944 deprecated_interactive_hook ();
abc56d60
PA
945}
946
c906108c 947\f
c906108c 948/* Called when a memory allocation fails, with the number of bytes of
581e13c1 949 memory requested in SIZE. */
c906108c 950
c25c4a8b 951void
d26e3629 952malloc_failure (long size)
c906108c
SS
953{
954 if (size > 0)
955 {
8e65ff28 956 internal_error (__FILE__, __LINE__,
e2e0b3e5 957 _("virtual memory exhausted: can't allocate %ld bytes."),
8731e58e 958 size);
c906108c
SS
959 }
960 else
961 {
e2e0b3e5 962 internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
c906108c
SS
963 }
964}
965
c906108c
SS
966/* My replacement for the read system call.
967 Used like `read' but keeps going if `read' returns too soon. */
968
969int
fba45db2 970myread (int desc, char *addr, int len)
c906108c 971{
52f0bd74 972 int val;
c906108c
SS
973 int orglen = len;
974
975 while (len > 0)
976 {
977 val = read (desc, addr, len);
978 if (val < 0)
979 return val;
980 if (val == 0)
981 return orglen - len;
982 len -= val;
983 addr += val;
984 }
985 return orglen;
986}
d26e3629 987
c906108c 988void
aa1ee363 989print_spaces (int n, struct ui_file *file)
c906108c 990{
392a587b 991 fputs_unfiltered (n_spaces (n), file);
c906108c
SS
992}
993
994/* Print a host address. */
995
996void
b80c3053 997gdb_print_host_address_1 (const void *addr, struct ui_file *stream)
c906108c 998{
ea8992ce 999 fprintf_filtered (stream, "%s", host_address_to_string (addr));
c906108c 1000}
7c50a931
DE
1001
1002/* See utils.h. */
1003
1004char *
1005make_hex_string (const gdb_byte *data, size_t length)
1006{
224c3ddb 1007 char *result = (char *) xmalloc (length * 2 + 1);
7c50a931
DE
1008 char *p;
1009 size_t i;
1010
1011 p = result;
1012 for (i = 0; i < length; ++i)
dc4d6886 1013 p += xsnprintf (p, 3, "%02x", data[i]);
7c50a931
DE
1014 *p = '\0';
1015 return result;
1016}
1017
c906108c 1018\f
c5aa993b 1019
3eb7562a
PA
1020/* A cleanup that simply calls ui_unregister_input_event_handler. */
1021
1022static void
1023ui_unregister_input_event_handler_cleanup (void *ui)
1024{
1025 ui_unregister_input_event_handler ((struct ui *) ui);
1026}
1027
1028/* Set up to handle input. */
1029
1030static struct cleanup *
1031prepare_to_handle_input (void)
1032{
1033 struct cleanup *old_chain;
1034
1035 old_chain = make_cleanup_restore_target_terminal ();
1036 target_terminal_ours ();
1037
1038 ui_register_input_event_handler (current_ui);
1039 if (current_ui->prompt_state == PROMPT_BLOCKED)
1040 make_cleanup (ui_unregister_input_event_handler_cleanup, current_ui);
1041
1042 make_cleanup_override_quit_handler (default_quit_handler);
1043
1044 return old_chain;
1045}
1046
db1ff28b
JK
1047\f
1048
981c7f5a 1049/* This function supports the query, nquery, and yquery functions.
cbdeadca 1050 Ask user a y-or-n question and return 0 if answer is no, 1 if
981c7f5a
DJ
1051 answer is yes, or default the answer to the specified default
1052 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a
1053 default answer, or '\0' for no default.
cbdeadca
JJ
1054 CTLSTR is the control string and should end in "? ". It should
1055 not say how to answer, because we do that.
1056 ARGS are the arguments passed along with the CTLSTR argument to
1057 printf. */
1058
a0b31db1 1059static int ATTRIBUTE_PRINTF (1, 0)
cbdeadca
JJ
1060defaulted_query (const char *ctlstr, const char defchar, va_list args)
1061{
cbdeadca
JJ
1062 int ans2;
1063 int retval;
1064 int def_value;
1065 char def_answer, not_def_answer;
a121b7c1
PA
1066 const char *y_string, *n_string;
1067 char *question, *prompt;
80dbc9fd 1068 struct cleanup *old_chain;
cbdeadca
JJ
1069
1070 /* Set up according to which answer is the default. */
981c7f5a
DJ
1071 if (defchar == '\0')
1072 {
1073 def_value = 1;
1074 def_answer = 'Y';
1075 not_def_answer = 'N';
1076 y_string = "y";
1077 n_string = "n";
1078 }
1079 else if (defchar == 'y')
cbdeadca
JJ
1080 {
1081 def_value = 1;
1082 def_answer = 'Y';
1083 not_def_answer = 'N';
1084 y_string = "[y]";
1085 n_string = "n";
1086 }
1087 else
1088 {
1089 def_value = 0;
1090 def_answer = 'N';
1091 not_def_answer = 'Y';
1092 y_string = "y";
1093 n_string = "[n]";
1094 }
1095
981c7f5a 1096 /* Automatically answer the default value if the user did not want
a502cf95 1097 prompts or the command was issued with the server prefix. */
e360902b 1098 if (!confirm || server_command)
981c7f5a
DJ
1099 return def_value;
1100
1101 /* If input isn't coming from the user directly, just say what
7a01c6e0 1102 question we're asking, and then answer the default automatically. This
981c7f5a
DJ
1103 way, important error messages don't get lost when talking to GDB
1104 over a pipe. */
268a799a 1105 if (current_ui->instream != current_ui->stdin_stream
26a06916
SM
1106 || !input_interactive_p (current_ui)
1107 /* Restrict queries to the main UI. */
1108 || current_ui != main_ui)
981c7f5a 1109 {
3eb7562a
PA
1110 old_chain = make_cleanup_restore_target_terminal ();
1111
651ce16a 1112 target_terminal_ours_for_output ();
981c7f5a
DJ
1113 wrap_here ("");
1114 vfprintf_filtered (gdb_stdout, ctlstr, args);
1115
3e43a32a
MS
1116 printf_filtered (_("(%s or %s) [answered %c; "
1117 "input not from terminal]\n"),
981c7f5a
DJ
1118 y_string, n_string, def_answer);
1119 gdb_flush (gdb_stdout);
1120
651ce16a 1121 do_cleanups (old_chain);
981c7f5a
DJ
1122 return def_value;
1123 }
1124
9a4105ab 1125 if (deprecated_query_hook)
cbdeadca 1126 {
651ce16a 1127 int res;
cbdeadca 1128
3eb7562a 1129 old_chain = make_cleanup_restore_target_terminal ();
651ce16a
PA
1130 res = deprecated_query_hook (ctlstr, args);
1131 do_cleanups (old_chain);
1132 return res;
1133 }
80dbc9fd 1134
981c7f5a
DJ
1135 /* Format the question outside of the loop, to avoid reusing args. */
1136 question = xstrvprintf (ctlstr, args);
3eb7562a 1137 old_chain = make_cleanup (xfree, question);
588dcc3e
PP
1138 prompt = xstrprintf (_("%s%s(%s or %s) %s"),
1139 annotation_level > 1 ? "\n\032\032pre-query\n" : "",
1140 question, y_string, n_string,
1141 annotation_level > 1 ? "\n\032\032query\n" : "");
80dbc9fd 1142 make_cleanup (xfree, prompt);
981c7f5a 1143
dcb07cfa
PA
1144 /* Used to add duration we waited for user to respond to
1145 prompt_for_continue_wait_time. */
1146 using namespace std::chrono;
1147 steady_clock::time_point prompt_started = steady_clock::now ();
260c0b2a 1148
3eb7562a 1149 prepare_to_handle_input ();
651ce16a 1150
cbdeadca
JJ
1151 while (1)
1152 {
588dcc3e 1153 char *response, answer;
cbdeadca 1154
cbdeadca 1155 gdb_flush (gdb_stdout);
588dcc3e 1156 response = gdb_readline_wrapper (prompt);
cbdeadca 1157
588dcc3e 1158 if (response == NULL) /* C-d */
cbdeadca 1159 {
fa3fd85b 1160 printf_filtered ("EOF [assumed %c]\n", def_answer);
cbdeadca
JJ
1161 retval = def_value;
1162 break;
1163 }
588dcc3e
PP
1164
1165 answer = response[0];
1166 xfree (response);
cbdeadca
JJ
1167
1168 if (answer >= 'a')
1169 answer -= 040;
1170 /* Check answer. For the non-default, the user must specify
1171 the non-default explicitly. */
1172 if (answer == not_def_answer)
1173 {
1174 retval = !def_value;
1175 break;
1176 }
981c7f5a
DJ
1177 /* Otherwise, if a default was specified, the user may either
1178 specify the required input or have it default by entering
1179 nothing. */
1180 if (answer == def_answer
588dcc3e 1181 || (defchar != '\0' && answer == '\0'))
cbdeadca
JJ
1182 {
1183 retval = def_value;
1184 break;
1185 }
1186 /* Invalid entries are not defaulted and require another selection. */
a3f17187 1187 printf_filtered (_("Please answer %s or %s.\n"),
cbdeadca
JJ
1188 y_string, n_string);
1189 }
1190
260c0b2a 1191 /* Add time spend in this routine to prompt_for_continue_wait_time. */
dcb07cfa 1192 prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
260c0b2a 1193
cbdeadca 1194 if (annotation_level > 1)
a3f17187 1195 printf_filtered (("\n\032\032post-query\n"));
80dbc9fd 1196 do_cleanups (old_chain);
cbdeadca
JJ
1197 return retval;
1198}
1199\f
1200
1201/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1202 answer is yes, or 0 if answer is defaulted.
1203 Takes three args which are given to printf to print the question.
1204 The first, a control string, should end in "? ".
1205 It should not say how to answer, because we do that. */
1206
1207int
1208nquery (const char *ctlstr, ...)
1209{
1210 va_list args;
899500d6 1211 int ret;
cbdeadca
JJ
1212
1213 va_start (args, ctlstr);
899500d6 1214 ret = defaulted_query (ctlstr, 'n', args);
cbdeadca 1215 va_end (args);
899500d6 1216 return ret;
cbdeadca
JJ
1217}
1218
1219/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1220 answer is yes, or 1 if answer is defaulted.
1221 Takes three args which are given to printf to print the question.
1222 The first, a control string, should end in "? ".
1223 It should not say how to answer, because we do that. */
1224
1225int
1226yquery (const char *ctlstr, ...)
1227{
1228 va_list args;
899500d6 1229 int ret;
cbdeadca
JJ
1230
1231 va_start (args, ctlstr);
899500d6 1232 ret = defaulted_query (ctlstr, 'y', args);
cbdeadca 1233 va_end (args);
899500d6 1234 return ret;
cbdeadca
JJ
1235}
1236
981c7f5a
DJ
1237/* Ask user a y-or-n question and return 1 iff answer is yes.
1238 Takes three args which are given to printf to print the question.
1239 The first, a control string, should end in "? ".
1240 It should not say how to answer, because we do that. */
1241
1242int
1243query (const char *ctlstr, ...)
1244{
1245 va_list args;
899500d6 1246 int ret;
981c7f5a
DJ
1247
1248 va_start (args, ctlstr);
899500d6 1249 ret = defaulted_query (ctlstr, '\0', args);
981c7f5a 1250 va_end (args);
899500d6 1251 return ret;
981c7f5a
DJ
1252}
1253
6c7a06a3
TT
1254/* A helper for parse_escape that converts a host character to a
1255 target character. C is the host character. If conversion is
1256 possible, then the target character is stored in *TARGET_C and the
1257 function returns 1. Otherwise, the function returns 0. */
1258
1259static int
f870a310 1260host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
234b45d4 1261{
6c7a06a3 1262 char the_char = c;
6c7a06a3 1263 int result = 0;
234b45d4 1264
8268c778 1265 auto_obstack host_data;
234b45d4 1266
f870a310 1267 convert_between_encodings (target_charset (gdbarch), host_charset (),
ac91cd70
PA
1268 (gdb_byte *) &the_char, 1, 1,
1269 &host_data, translit_none);
6c7a06a3
TT
1270
1271 if (obstack_object_size (&host_data) == 1)
1272 {
1273 result = 1;
1274 *target_c = *(char *) obstack_base (&host_data);
1275 }
1276
6c7a06a3 1277 return result;
234b45d4
KB
1278}
1279
c906108c
SS
1280/* Parse a C escape sequence. STRING_PTR points to a variable
1281 containing a pointer to the string to parse. That pointer
1282 should point to the character after the \. That pointer
1283 is updated past the characters we use. The value of the
1284 escape sequence is returned.
1285
1286 A negative value means the sequence \ newline was seen,
1287 which is supposed to be equivalent to nothing at all.
1288
1289 If \ is followed by a null character, we return a negative
1290 value and leave the string pointer pointing at the null character.
1291
1292 If \ is followed by 000, we return 0 and leave the string pointer
1293 after the zeros. A value of 0 does not mean end of string. */
1294
1295int
d7561cbb 1296parse_escape (struct gdbarch *gdbarch, const char **string_ptr)
c906108c 1297{
581e13c1 1298 int target_char = -2; /* Initialize to avoid GCC warnings. */
52f0bd74 1299 int c = *(*string_ptr)++;
e0627e85 1300
6c7a06a3
TT
1301 switch (c)
1302 {
8731e58e
AC
1303 case '\n':
1304 return -2;
1305 case 0:
1306 (*string_ptr)--;
1307 return 0;
8731e58e
AC
1308
1309 case '0':
1310 case '1':
1311 case '2':
1312 case '3':
1313 case '4':
1314 case '5':
1315 case '6':
1316 case '7':
1317 {
6c7a06a3 1318 int i = host_hex_value (c);
aa1ee363 1319 int count = 0;
8731e58e
AC
1320 while (++count < 3)
1321 {
5cb316ef 1322 c = (**string_ptr);
6c7a06a3 1323 if (isdigit (c) && c != '8' && c != '9')
8731e58e 1324 {
5cb316ef 1325 (*string_ptr)++;
8731e58e 1326 i *= 8;
6c7a06a3 1327 i += host_hex_value (c);
8731e58e
AC
1328 }
1329 else
1330 {
8731e58e
AC
1331 break;
1332 }
1333 }
1334 return i;
1335 }
6c7a06a3
TT
1336
1337 case 'a':
1338 c = '\a';
1339 break;
1340 case 'b':
1341 c = '\b';
1342 break;
1343 case 'f':
1344 c = '\f';
1345 break;
1346 case 'n':
1347 c = '\n';
1348 break;
1349 case 'r':
1350 c = '\r';
1351 break;
1352 case 't':
1353 c = '\t';
1354 break;
1355 case 'v':
1356 c = '\v';
1357 break;
1358
1359 default:
1360 break;
1361 }
1362
f870a310 1363 if (!host_char_to_target (gdbarch, c, &target_char))
3351ea09
JB
1364 error (_("The escape sequence `\\%c' is equivalent to plain `%c',"
1365 " which has no equivalent\nin the `%s' character set."),
905b671b 1366 c, c, target_charset (gdbarch));
6c7a06a3 1367 return target_char;
c906108c
SS
1368}
1369\f
1370/* Print the character C on STREAM as part of the contents of a literal
1371 string whose delimiter is QUOTER. Note that this routine should only
f9acce4a 1372 be called for printing things which are independent of the language
6ef284bd
SM
1373 of the program being debugged.
1374
1375 printchar will normally escape backslashes and instances of QUOTER. If
1376 QUOTER is 0, printchar won't escape backslashes or any quoting character.
1377 As a side effect, if you pass the backslash character as the QUOTER,
1378 printchar will escape backslashes as usual, but not any other quoting
1379 character. */
c906108c 1380
43e526b9 1381static void
74f832da 1382printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
bee0189a
DJ
1383 void (*do_fprintf) (struct ui_file *, const char *, ...)
1384 ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
c906108c 1385{
c906108c
SS
1386 c &= 0xFF; /* Avoid sign bit follies */
1387
c5aa993b
JM
1388 if (c < 0x20 || /* Low control chars */
1389 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1390 (sevenbit_strings && c >= 0x80))
1391 { /* high order bit set */
1392 switch (c)
1393 {
1394 case '\n':
43e526b9 1395 do_fputs ("\\n", stream);
c5aa993b
JM
1396 break;
1397 case '\b':
43e526b9 1398 do_fputs ("\\b", stream);
c5aa993b
JM
1399 break;
1400 case '\t':
43e526b9 1401 do_fputs ("\\t", stream);
c5aa993b
JM
1402 break;
1403 case '\f':
43e526b9 1404 do_fputs ("\\f", stream);
c5aa993b
JM
1405 break;
1406 case '\r':
43e526b9 1407 do_fputs ("\\r", stream);
c5aa993b
JM
1408 break;
1409 case '\033':
43e526b9 1410 do_fputs ("\\e", stream);
c5aa993b
JM
1411 break;
1412 case '\007':
43e526b9 1413 do_fputs ("\\a", stream);
c5aa993b
JM
1414 break;
1415 default:
43e526b9 1416 do_fprintf (stream, "\\%.3o", (unsigned int) c);
c5aa993b
JM
1417 break;
1418 }
1419 }
1420 else
1421 {
6ef284bd 1422 if (quoter != 0 && (c == '\\' || c == quoter))
43e526b9
JM
1423 do_fputs ("\\", stream);
1424 do_fprintf (stream, "%c", c);
c5aa993b 1425 }
c906108c 1426}
43e526b9
JM
1427
1428/* Print the character C on STREAM as part of the contents of a
1429 literal string whose delimiter is QUOTER. Note that these routines
1430 should only be call for printing things which are independent of
581e13c1 1431 the language of the program being debugged. */
43e526b9
JM
1432
1433void
fba45db2 1434fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1435{
1436 while (*str)
1437 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1438}
1439
1440void
fba45db2 1441fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1442{
1443 while (*str)
1444 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1445}
1446
0876f84a
DJ
1447void
1448fputstrn_filtered (const char *str, int n, int quoter,
1449 struct ui_file *stream)
1450{
1451 int i;
e0627e85 1452
0876f84a
DJ
1453 for (i = 0; i < n; i++)
1454 printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1455}
1456
43e526b9 1457void
8731e58e
AC
1458fputstrn_unfiltered (const char *str, int n, int quoter,
1459 struct ui_file *stream)
43e526b9
JM
1460{
1461 int i;
5d502164 1462
43e526b9
JM
1463 for (i = 0; i < n; i++)
1464 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1465}
c906108c 1466\f
c5aa993b 1467
c906108c
SS
1468/* Number of lines per page or UINT_MAX if paging is disabled. */
1469static unsigned int lines_per_page;
920d2a44
AC
1470static void
1471show_lines_per_page (struct ui_file *file, int from_tty,
1472 struct cmd_list_element *c, const char *value)
1473{
3e43a32a
MS
1474 fprintf_filtered (file,
1475 _("Number of lines gdb thinks are in a page is %s.\n"),
920d2a44
AC
1476 value);
1477}
eb0d3137 1478
cbfbd72a 1479/* Number of chars per line or UINT_MAX if line folding is disabled. */
c906108c 1480static unsigned int chars_per_line;
920d2a44
AC
1481static void
1482show_chars_per_line (struct ui_file *file, int from_tty,
1483 struct cmd_list_element *c, const char *value)
1484{
3e43a32a
MS
1485 fprintf_filtered (file,
1486 _("Number of characters gdb thinks "
1487 "are in a line is %s.\n"),
920d2a44
AC
1488 value);
1489}
eb0d3137 1490
c906108c
SS
1491/* Current count of lines printed on this page, chars on this line. */
1492static unsigned int lines_printed, chars_printed;
1493
1494/* Buffer and start column of buffered text, for doing smarter word-
1495 wrapping. When someone calls wrap_here(), we start buffering output
1496 that comes through fputs_filtered(). If we see a newline, we just
1497 spit it out and forget about the wrap_here(). If we see another
1498 wrap_here(), we spit it out and remember the newer one. If we see
1499 the end of the line, we spit out a newline, the indent, and then
1500 the buffered output. */
1501
1502/* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1503 are waiting to be output (they have already been counted in chars_printed).
1504 When wrap_buffer[0] is null, the buffer is empty. */
1505static char *wrap_buffer;
1506
1507/* Pointer in wrap_buffer to the next character to fill. */
1508static char *wrap_pointer;
1509
1510/* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1511 is non-zero. */
d2c0eef4 1512static const char *wrap_indent;
c906108c
SS
1513
1514/* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1515 is not in effect. */
1516static int wrap_column;
c906108c 1517\f
c5aa993b 1518
26c4b26f 1519/* Initialize the number of lines per page and chars per line. */
eb0d3137 1520
c906108c 1521void
fba45db2 1522init_page_info (void)
c906108c 1523{
5da1313b
JK
1524 if (batch_flag)
1525 {
1526 lines_per_page = UINT_MAX;
1527 chars_per_line = UINT_MAX;
1528 }
1529 else
c906108c 1530#if defined(TUI)
5ecb1806 1531 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
c906108c
SS
1532#endif
1533 {
eb0d3137 1534 int rows, cols;
c906108c 1535
ec145965
EZ
1536#if defined(__GO32__)
1537 rows = ScreenRows ();
1538 cols = ScreenCols ();
1539 lines_per_page = rows;
1540 chars_per_line = cols;
1541#else
eb0d3137
MK
1542 /* Make sure Readline has initialized its terminal settings. */
1543 rl_reset_terminal (NULL);
c906108c 1544
eb0d3137
MK
1545 /* Get the screen size from Readline. */
1546 rl_get_screen_size (&rows, &cols);
1547 lines_per_page = rows;
1548 chars_per_line = cols;
c906108c 1549
1a66331e
PM
1550 /* Readline should have fetched the termcap entry for us.
1551 Only try to use tgetnum function if rl_get_screen_size
1552 did not return a useful value. */
a121b7c1 1553 if (((rows <= 0) && (tgetnum ((char *) "li") < 0))
e681cf3f
EZ
1554 /* Also disable paging if inside Emacs. $EMACS was used
1555 before Emacs v25.1, $INSIDE_EMACS is used since then. */
1556 || getenv ("EMACS") || getenv ("INSIDE_EMACS"))
eb0d3137 1557 {
1a66331e
PM
1558 /* The number of lines per page is not mentioned in the terminal
1559 description or EMACS evironment variable is set. This probably
1560 means that paging is not useful, so disable paging. */
eb0d3137
MK
1561 lines_per_page = UINT_MAX;
1562 }
c906108c 1563
c906108c 1564 /* If the output is not a terminal, don't paginate it. */
d9fcf2fb 1565 if (!ui_file_isatty (gdb_stdout))
c5aa993b 1566 lines_per_page = UINT_MAX;
eb0d3137 1567#endif
ec145965 1568 }
eb0d3137 1569
24b73f8e
PP
1570 /* We handle SIGWINCH ourselves. */
1571 rl_catch_sigwinch = 0;
1572
eb0d3137 1573 set_screen_size ();
c5aa993b 1574 set_width ();
c906108c
SS
1575}
1576
2437fd32
GB
1577/* Return nonzero if filtered printing is initialized. */
1578int
1579filtered_printing_initialized (void)
1580{
1581 return wrap_buffer != NULL;
1582}
1583
5da1313b
JK
1584/* Helper for make_cleanup_restore_page_info. */
1585
1586static void
1587do_restore_page_info_cleanup (void *arg)
1588{
1589 set_screen_size ();
1590 set_width ();
1591}
1592
1593/* Provide cleanup for restoring the terminal size. */
1594
1595struct cleanup *
1596make_cleanup_restore_page_info (void)
1597{
1598 struct cleanup *back_to;
1599
1600 back_to = make_cleanup (do_restore_page_info_cleanup, NULL);
1601 make_cleanup_restore_uinteger (&lines_per_page);
1602 make_cleanup_restore_uinteger (&chars_per_line);
1603
1604 return back_to;
1605}
1606
1607/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
1608 Provide cleanup for restoring the original state. */
1609
1610struct cleanup *
1611set_batch_flag_and_make_cleanup_restore_page_info (void)
1612{
1613 struct cleanup *back_to = make_cleanup_restore_page_info ();
1614
1615 make_cleanup_restore_integer (&batch_flag);
1616 batch_flag = 1;
1617 init_page_info ();
1618
1619 return back_to;
1620}
1621
eb0d3137
MK
1622/* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1623
1624static void
1625set_screen_size (void)
1626{
1627 int rows = lines_per_page;
1628 int cols = chars_per_line;
1629
1630 if (rows <= 0)
1631 rows = INT_MAX;
1632
1633 if (cols <= 0)
0caa462c 1634 cols = INT_MAX;
eb0d3137
MK
1635
1636 /* Update Readline's idea of the terminal size. */
1637 rl_set_screen_size (rows, cols);
1638}
1639
1640/* Reinitialize WRAP_BUFFER according to the current value of
1641 CHARS_PER_LINE. */
1642
c906108c 1643static void
fba45db2 1644set_width (void)
c906108c
SS
1645{
1646 if (chars_per_line == 0)
c5aa993b 1647 init_page_info ();
c906108c
SS
1648
1649 if (!wrap_buffer)
1650 {
1651 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1652 wrap_buffer[0] = '\0';
1653 }
1654 else
1655 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
eb0d3137 1656 wrap_pointer = wrap_buffer; /* Start it at the beginning. */
c906108c
SS
1657}
1658
c5aa993b 1659static void
fba45db2 1660set_width_command (char *args, int from_tty, struct cmd_list_element *c)
c906108c 1661{
eb0d3137 1662 set_screen_size ();
c906108c
SS
1663 set_width ();
1664}
1665
eb0d3137
MK
1666static void
1667set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1668{
1669 set_screen_size ();
1670}
1671
d6e5e7f7
PP
1672/* See utils.h. */
1673
1674void
1675set_screen_width_and_height (int width, int height)
1676{
1677 lines_per_page = height;
1678 chars_per_line = width;
1679
1680 set_screen_size ();
1681 set_width ();
1682}
1683
c906108c 1684/* Wait, so the user can read what's on the screen. Prompt the user
720d2e96
PA
1685 to continue by pressing RETURN. 'q' is also provided because
1686 telling users what to do in the prompt is more user-friendly than
1687 expecting them to think of Ctrl-C/SIGINT. */
c906108c
SS
1688
1689static void
fba45db2 1690prompt_for_continue (void)
c906108c
SS
1691{
1692 char *ignore;
1693 char cont_prompt[120];
dcb07cfa 1694 struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
260c0b2a
DE
1695 /* Used to add duration we waited for user to respond to
1696 prompt_for_continue_wait_time. */
dcb07cfa
PA
1697 using namespace std::chrono;
1698 steady_clock::time_point prompt_started = steady_clock::now ();
c906108c
SS
1699
1700 if (annotation_level > 1)
a3f17187 1701 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
c906108c
SS
1702
1703 strcpy (cont_prompt,
1704 "---Type <return> to continue, or q <return> to quit---");
1705 if (annotation_level > 1)
1706 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1707
720d2e96
PA
1708 /* We must do this *before* we call gdb_readline_wrapper, else it
1709 will eventually call us -- thinking that we're trying to print
1710 beyond the end of the screen. */
c906108c
SS
1711 reinitialize_more_filter ();
1712
3eb7562a 1713 prepare_to_handle_input ();
82584158 1714
720d2e96
PA
1715 /* Call gdb_readline_wrapper, not readline, in order to keep an
1716 event loop running. */
b4f5539f 1717 ignore = gdb_readline_wrapper (cont_prompt);
80dbc9fd 1718 make_cleanup (xfree, ignore);
c906108c 1719
260c0b2a 1720 /* Add time spend in this routine to prompt_for_continue_wait_time. */
dcb07cfa 1721 prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
260c0b2a 1722
c906108c 1723 if (annotation_level > 1)
a3f17187 1724 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
c906108c 1725
80dbc9fd 1726 if (ignore != NULL)
c906108c
SS
1727 {
1728 char *p = ignore;
5d502164 1729
c906108c
SS
1730 while (*p == ' ' || *p == '\t')
1731 ++p;
1732 if (p[0] == 'q')
1690b616
SL
1733 /* Do not call quit here; there is no possibility of SIGINT. */
1734 throw_quit ("Quit");
c906108c 1735 }
c906108c
SS
1736
1737 /* Now we have to do this again, so that GDB will know that it doesn't
1738 need to save the ---Type <return>--- line at the top of the screen. */
1739 reinitialize_more_filter ();
1740
581e13c1 1741 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
80dbc9fd
PA
1742
1743 do_cleanups (old_chain);
c906108c
SS
1744}
1745
26c4b26f 1746/* Initialize timer to keep track of how long we waited for the user. */
bd712aed
DE
1747
1748void
1749reset_prompt_for_continue_wait_time (void)
1750{
dcb07cfa 1751 using namespace std::chrono;
bd712aed 1752
dcb07cfa 1753 prompt_for_continue_wait_time = steady_clock::duration::zero ();
bd712aed
DE
1754}
1755
1756/* Fetch the cumulative time spent in prompt_for_continue. */
1757
dcb07cfa
PA
1758std::chrono::steady_clock::duration
1759get_prompt_for_continue_wait_time ()
bd712aed
DE
1760{
1761 return prompt_for_continue_wait_time;
1762}
1763
c906108c
SS
1764/* Reinitialize filter; ie. tell it to reset to original values. */
1765
1766void
fba45db2 1767reinitialize_more_filter (void)
c906108c
SS
1768{
1769 lines_printed = 0;
1770 chars_printed = 0;
1771}
1772
1773/* Indicate that if the next sequence of characters overflows the line,
581e13c1 1774 a newline should be inserted here rather than when it hits the end.
c906108c
SS
1775 If INDENT is non-null, it is a string to be printed to indent the
1776 wrapped part on the next line. INDENT must remain accessible until
1777 the next call to wrap_here() or until a newline is printed through
1778 fputs_filtered().
1779
1780 If the line is already overfull, we immediately print a newline and
1781 the indentation, and disable further wrapping.
1782
1783 If we don't know the width of lines, but we know the page height,
1784 we must not wrap words, but should still keep track of newlines
1785 that were explicitly printed.
1786
1787 INDENT should not contain tabs, as that will mess up the char count
1788 on the next line. FIXME.
1789
1790 This routine is guaranteed to force out any output which has been
1791 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1792 used to force out output from the wrap_buffer. */
1793
1794void
d2c0eef4 1795wrap_here (const char *indent)
c906108c 1796{
581e13c1 1797 /* This should have been allocated, but be paranoid anyway. */
c906108c 1798 if (!wrap_buffer)
3e43a32a
MS
1799 internal_error (__FILE__, __LINE__,
1800 _("failed internal consistency check"));
c906108c
SS
1801
1802 if (wrap_buffer[0])
1803 {
1804 *wrap_pointer = '\0';
1805 fputs_unfiltered (wrap_buffer, gdb_stdout);
1806 }
1807 wrap_pointer = wrap_buffer;
1808 wrap_buffer[0] = '\0';
3e43a32a 1809 if (chars_per_line == UINT_MAX) /* No line overflow checking. */
c906108c
SS
1810 {
1811 wrap_column = 0;
1812 }
1813 else if (chars_printed >= chars_per_line)
1814 {
1815 puts_filtered ("\n");
1816 if (indent != NULL)
1817 puts_filtered (indent);
1818 wrap_column = 0;
1819 }
1820 else
1821 {
1822 wrap_column = chars_printed;
1823 if (indent == NULL)
1824 wrap_indent = "";
1825 else
1826 wrap_indent = indent;
1827 }
1828}
1829
4a351cef 1830/* Print input string to gdb_stdout, filtered, with wrap,
581e13c1 1831 arranging strings in columns of n chars. String can be
4a351cef
AF
1832 right or left justified in the column. Never prints
1833 trailing spaces. String should never be longer than
1834 width. FIXME: this could be useful for the EXAMINE
581e13c1 1835 command, which currently doesn't tabulate very well. */
4a351cef
AF
1836
1837void
1838puts_filtered_tabular (char *string, int width, int right)
1839{
1840 int spaces = 0;
1841 int stringlen;
1842 char *spacebuf;
1843
1844 gdb_assert (chars_per_line > 0);
1845 if (chars_per_line == UINT_MAX)
1846 {
1847 fputs_filtered (string, gdb_stdout);
1848 fputs_filtered ("\n", gdb_stdout);
1849 return;
1850 }
1851
1852 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1853 fputs_filtered ("\n", gdb_stdout);
1854
1855 if (width >= chars_per_line)
1856 width = chars_per_line - 1;
1857
1858 stringlen = strlen (string);
1859
1860 if (chars_printed > 0)
1861 spaces = width - (chars_printed - 1) % width - 1;
1862 if (right)
1863 spaces += width - stringlen;
1864
224c3ddb 1865 spacebuf = (char *) alloca (spaces + 1);
4a351cef
AF
1866 spacebuf[spaces] = '\0';
1867 while (spaces--)
1868 spacebuf[spaces] = ' ';
1869
1870 fputs_filtered (spacebuf, gdb_stdout);
1871 fputs_filtered (string, gdb_stdout);
1872}
1873
1874
c906108c 1875/* Ensure that whatever gets printed next, using the filtered output
581e13c1 1876 commands, starts at the beginning of the line. I.e. if there is
c906108c 1877 any pending output for the current line, flush it and start a new
581e13c1 1878 line. Otherwise do nothing. */
c906108c
SS
1879
1880void
fba45db2 1881begin_line (void)
c906108c
SS
1882{
1883 if (chars_printed > 0)
1884 {
1885 puts_filtered ("\n");
1886 }
1887}
1888
ac9a91a7 1889
c906108c
SS
1890/* Like fputs but if FILTER is true, pause after every screenful.
1891
1892 Regardless of FILTER can wrap at points other than the final
1893 character of a line.
1894
1895 Unlike fputs, fputs_maybe_filtered does not return a value.
1896 It is OK for LINEBUFFER to be NULL, in which case just don't print
1897 anything.
1898
1899 Note that a longjmp to top level may occur in this routine (only if
1900 FILTER is true) (since prompt_for_continue may do so) so this
1901 routine should not be called when cleanups are not in place. */
1902
1903static void
fba45db2
KB
1904fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1905 int filter)
c906108c
SS
1906{
1907 const char *lineptr;
1908
1909 if (linebuffer == 0)
1910 return;
1911
1912 /* Don't do any filtering if it is disabled. */
390a8aca 1913 if (stream != gdb_stdout
b2e7f004
JK
1914 || !pagination_enabled
1915 || batch_flag
390a8aca 1916 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
58dadb1b 1917 || top_level_interpreter () == NULL
112e8700 1918 || interp_ui_out (top_level_interpreter ())->is_mi_like_p ())
c906108c
SS
1919 {
1920 fputs_unfiltered (linebuffer, stream);
1921 return;
1922 }
1923
1924 /* Go through and output each character. Show line extension
1925 when this is necessary; prompt user for new page when this is
1926 necessary. */
c5aa993b 1927
c906108c
SS
1928 lineptr = linebuffer;
1929 while (*lineptr)
1930 {
1931 /* Possible new page. */
8731e58e 1932 if (filter && (lines_printed >= lines_per_page - 1))
c906108c
SS
1933 prompt_for_continue ();
1934
1935 while (*lineptr && *lineptr != '\n')
1936 {
1937 /* Print a single line. */
1938 if (*lineptr == '\t')
1939 {
1940 if (wrap_column)
1941 *wrap_pointer++ = '\t';
1942 else
1943 fputc_unfiltered ('\t', stream);
1944 /* Shifting right by 3 produces the number of tab stops
1945 we have already passed, and then adding one and
c5aa993b 1946 shifting left 3 advances to the next tab stop. */
c906108c
SS
1947 chars_printed = ((chars_printed >> 3) + 1) << 3;
1948 lineptr++;
1949 }
1950 else
1951 {
1952 if (wrap_column)
1953 *wrap_pointer++ = *lineptr;
1954 else
c5aa993b 1955 fputc_unfiltered (*lineptr, stream);
c906108c
SS
1956 chars_printed++;
1957 lineptr++;
1958 }
c5aa993b 1959
c906108c
SS
1960 if (chars_printed >= chars_per_line)
1961 {
1962 unsigned int save_chars = chars_printed;
1963
1964 chars_printed = 0;
1965 lines_printed++;
1966 /* If we aren't actually wrapping, don't output newline --
c5aa993b
JM
1967 if chars_per_line is right, we probably just overflowed
1968 anyway; if it's wrong, let us keep going. */
c906108c
SS
1969 if (wrap_column)
1970 fputc_unfiltered ('\n', stream);
1971
1972 /* Possible new page. */
1973 if (lines_printed >= lines_per_page - 1)
1974 prompt_for_continue ();
1975
581e13c1 1976 /* Now output indentation and wrapped string. */
c906108c
SS
1977 if (wrap_column)
1978 {
1979 fputs_unfiltered (wrap_indent, stream);
581e13c1
MS
1980 *wrap_pointer = '\0'; /* Null-terminate saved stuff, */
1981 fputs_unfiltered (wrap_buffer, stream); /* and eject it. */
c906108c
SS
1982 /* FIXME, this strlen is what prevents wrap_indent from
1983 containing tabs. However, if we recurse to print it
1984 and count its chars, we risk trouble if wrap_indent is
581e13c1 1985 longer than (the user settable) chars_per_line.
c906108c
SS
1986 Note also that this can set chars_printed > chars_per_line
1987 if we are printing a long string. */
1988 chars_printed = strlen (wrap_indent)
c5aa993b 1989 + (save_chars - wrap_column);
c906108c
SS
1990 wrap_pointer = wrap_buffer; /* Reset buffer */
1991 wrap_buffer[0] = '\0';
c5aa993b
JM
1992 wrap_column = 0; /* And disable fancy wrap */
1993 }
c906108c
SS
1994 }
1995 }
1996
1997 if (*lineptr == '\n')
1998 {
1999 chars_printed = 0;
3e43a32a
MS
2000 wrap_here ((char *) 0); /* Spit out chars, cancel
2001 further wraps. */
c906108c
SS
2002 lines_printed++;
2003 fputc_unfiltered ('\n', stream);
2004 lineptr++;
2005 }
2006 }
2007}
2008
2009void
fba45db2 2010fputs_filtered (const char *linebuffer, struct ui_file *stream)
c906108c
SS
2011{
2012 fputs_maybe_filtered (linebuffer, stream, 1);
2013}
2014
2015int
fba45db2 2016putchar_unfiltered (int c)
c906108c 2017{
11cf8741 2018 char buf = c;
e0627e85 2019
d9fcf2fb 2020 ui_file_write (gdb_stdout, &buf, 1);
c906108c
SS
2021 return c;
2022}
2023
d1f4cff8
AC
2024/* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2025 May return nonlocally. */
2026
2027int
2028putchar_filtered (int c)
2029{
2030 return fputc_filtered (c, gdb_stdout);
2031}
2032
c906108c 2033int
fba45db2 2034fputc_unfiltered (int c, struct ui_file *stream)
c906108c 2035{
11cf8741 2036 char buf = c;
e0627e85 2037
d9fcf2fb 2038 ui_file_write (stream, &buf, 1);
c906108c
SS
2039 return c;
2040}
2041
2042int
fba45db2 2043fputc_filtered (int c, struct ui_file *stream)
c906108c
SS
2044{
2045 char buf[2];
2046
2047 buf[0] = c;
2048 buf[1] = 0;
2049 fputs_filtered (buf, stream);
2050 return c;
2051}
2052
2053/* puts_debug is like fputs_unfiltered, except it prints special
2054 characters in printable fashion. */
2055
2056void
fba45db2 2057puts_debug (char *prefix, char *string, char *suffix)
c906108c
SS
2058{
2059 int ch;
2060
2061 /* Print prefix and suffix after each line. */
2062 static int new_line = 1;
2063 static int return_p = 0;
a121b7c1
PA
2064 static const char *prev_prefix = "";
2065 static const char *prev_suffix = "";
c906108c
SS
2066
2067 if (*string == '\n')
2068 return_p = 0;
2069
2070 /* If the prefix is changing, print the previous suffix, a new line,
2071 and the new prefix. */
c5aa993b 2072 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
c906108c 2073 {
9846de1b
JM
2074 fputs_unfiltered (prev_suffix, gdb_stdlog);
2075 fputs_unfiltered ("\n", gdb_stdlog);
2076 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2077 }
2078
2079 /* Print prefix if we printed a newline during the previous call. */
2080 if (new_line)
2081 {
2082 new_line = 0;
9846de1b 2083 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2084 }
2085
2086 prev_prefix = prefix;
2087 prev_suffix = suffix;
2088
2089 /* Output characters in a printable format. */
2090 while ((ch = *string++) != '\0')
2091 {
2092 switch (ch)
c5aa993b 2093 {
c906108c
SS
2094 default:
2095 if (isprint (ch))
9846de1b 2096 fputc_unfiltered (ch, gdb_stdlog);
c906108c
SS
2097
2098 else
9846de1b 2099 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
c906108c
SS
2100 break;
2101
c5aa993b
JM
2102 case '\\':
2103 fputs_unfiltered ("\\\\", gdb_stdlog);
2104 break;
2105 case '\b':
2106 fputs_unfiltered ("\\b", gdb_stdlog);
2107 break;
2108 case '\f':
2109 fputs_unfiltered ("\\f", gdb_stdlog);
2110 break;
2111 case '\n':
2112 new_line = 1;
2113 fputs_unfiltered ("\\n", gdb_stdlog);
2114 break;
2115 case '\r':
2116 fputs_unfiltered ("\\r", gdb_stdlog);
2117 break;
2118 case '\t':
2119 fputs_unfiltered ("\\t", gdb_stdlog);
2120 break;
2121 case '\v':
2122 fputs_unfiltered ("\\v", gdb_stdlog);
2123 break;
2124 }
c906108c
SS
2125
2126 return_p = ch == '\r';
2127 }
2128
2129 /* Print suffix if we printed a newline. */
2130 if (new_line)
2131 {
9846de1b
JM
2132 fputs_unfiltered (suffix, gdb_stdlog);
2133 fputs_unfiltered ("\n", gdb_stdlog);
c906108c
SS
2134 }
2135}
2136
2137
2138/* Print a variable number of ARGS using format FORMAT. If this
2139 information is going to put the amount written (since the last call
2140 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2141 call prompt_for_continue to get the users permision to continue.
2142
2143 Unlike fprintf, this function does not return a value.
2144
2145 We implement three variants, vfprintf (takes a vararg list and stream),
2146 fprintf (takes a stream to write on), and printf (the usual).
2147
2148 Note also that a longjmp to top level may occur in this routine
2149 (since prompt_for_continue may do so) so this routine should not be
2150 called when cleanups are not in place. */
2151
2152static void
fba45db2
KB
2153vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2154 va_list args, int filter)
c906108c
SS
2155{
2156 char *linebuffer;
2157 struct cleanup *old_cleanups;
2158
e623b504 2159 linebuffer = xstrvprintf (format, args);
b8c9b27d 2160 old_cleanups = make_cleanup (xfree, linebuffer);
c906108c
SS
2161 fputs_maybe_filtered (linebuffer, stream, filter);
2162 do_cleanups (old_cleanups);
2163}
2164
2165
2166void
fba45db2 2167vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2168{
2169 vfprintf_maybe_filtered (stream, format, args, 1);
2170}
2171
2172void
fba45db2 2173vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2174{
2175 char *linebuffer;
2176 struct cleanup *old_cleanups;
2177
e623b504 2178 linebuffer = xstrvprintf (format, args);
b8c9b27d 2179 old_cleanups = make_cleanup (xfree, linebuffer);
75feb17d
DJ
2180 if (debug_timestamp && stream == gdb_stdlog)
2181 {
dcb07cfa 2182 using namespace std::chrono;
6e5abd65 2183 int len, need_nl;
75feb17d 2184
dcb07cfa
PA
2185 steady_clock::time_point now = steady_clock::now ();
2186 seconds s = duration_cast<seconds> (now.time_since_epoch ());
2187 microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
6e5abd65
PA
2188
2189 len = strlen (linebuffer);
2190 need_nl = (len > 0 && linebuffer[len - 1] != '\n');
2191
dcb07cfa
PA
2192 std::string timestamp = string_printf ("%ld.%06ld %s%s",
2193 (long) s.count (),
2194 (long) us.count (),
2195 linebuffer, need_nl ? "\n": "");
2196 fputs_unfiltered (timestamp.c_str (), stream);
75feb17d 2197 }
6e5abd65
PA
2198 else
2199 fputs_unfiltered (linebuffer, stream);
c906108c
SS
2200 do_cleanups (old_cleanups);
2201}
2202
2203void
fba45db2 2204vprintf_filtered (const char *format, va_list args)
c906108c
SS
2205{
2206 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2207}
2208
2209void
fba45db2 2210vprintf_unfiltered (const char *format, va_list args)
c906108c
SS
2211{
2212 vfprintf_unfiltered (gdb_stdout, format, args);
2213}
2214
c906108c 2215void
8731e58e 2216fprintf_filtered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2217{
2218 va_list args;
e0627e85 2219
c906108c 2220 va_start (args, format);
c906108c
SS
2221 vfprintf_filtered (stream, format, args);
2222 va_end (args);
2223}
2224
c906108c 2225void
8731e58e 2226fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2227{
2228 va_list args;
e0627e85 2229
c906108c 2230 va_start (args, format);
c906108c
SS
2231 vfprintf_unfiltered (stream, format, args);
2232 va_end (args);
2233}
2234
2235/* Like fprintf_filtered, but prints its result indented.
2236 Called as fprintfi_filtered (spaces, stream, format, ...); */
2237
c906108c 2238void
8731e58e
AC
2239fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2240 ...)
c906108c
SS
2241{
2242 va_list args;
e0627e85 2243
c906108c 2244 va_start (args, format);
c906108c
SS
2245 print_spaces_filtered (spaces, stream);
2246
2247 vfprintf_filtered (stream, format, args);
2248 va_end (args);
2249}
2250
2251
c906108c 2252void
8731e58e 2253printf_filtered (const char *format, ...)
c906108c
SS
2254{
2255 va_list args;
e0627e85 2256
c906108c 2257 va_start (args, format);
c906108c
SS
2258 vfprintf_filtered (gdb_stdout, format, args);
2259 va_end (args);
2260}
2261
2262
c906108c 2263void
8731e58e 2264printf_unfiltered (const char *format, ...)
c906108c
SS
2265{
2266 va_list args;
e0627e85 2267
c906108c 2268 va_start (args, format);
c906108c
SS
2269 vfprintf_unfiltered (gdb_stdout, format, args);
2270 va_end (args);
2271}
2272
2273/* Like printf_filtered, but prints it's result indented.
2274 Called as printfi_filtered (spaces, format, ...); */
2275
c906108c 2276void
8731e58e 2277printfi_filtered (int spaces, const char *format, ...)
c906108c
SS
2278{
2279 va_list args;
e0627e85 2280
c906108c 2281 va_start (args, format);
c906108c
SS
2282 print_spaces_filtered (spaces, gdb_stdout);
2283 vfprintf_filtered (gdb_stdout, format, args);
2284 va_end (args);
2285}
2286
2287/* Easy -- but watch out!
2288
2289 This routine is *not* a replacement for puts()! puts() appends a newline.
2290 This one doesn't, and had better not! */
2291
2292void
fba45db2 2293puts_filtered (const char *string)
c906108c
SS
2294{
2295 fputs_filtered (string, gdb_stdout);
2296}
2297
2298void
fba45db2 2299puts_unfiltered (const char *string)
c906108c
SS
2300{
2301 fputs_unfiltered (string, gdb_stdout);
2302}
2303
2304/* Return a pointer to N spaces and a null. The pointer is good
2305 until the next call to here. */
2306char *
fba45db2 2307n_spaces (int n)
c906108c 2308{
392a587b
JM
2309 char *t;
2310 static char *spaces = 0;
2311 static int max_spaces = -1;
c906108c
SS
2312
2313 if (n > max_spaces)
2314 {
2315 if (spaces)
b8c9b27d 2316 xfree (spaces);
c5aa993b
JM
2317 spaces = (char *) xmalloc (n + 1);
2318 for (t = spaces + n; t != spaces;)
c906108c
SS
2319 *--t = ' ';
2320 spaces[n] = '\0';
2321 max_spaces = n;
2322 }
2323
2324 return spaces + max_spaces - n;
2325}
2326
2327/* Print N spaces. */
2328void
fba45db2 2329print_spaces_filtered (int n, struct ui_file *stream)
c906108c
SS
2330{
2331 fputs_filtered (n_spaces (n), stream);
2332}
2333\f
4a351cef 2334/* C++/ObjC demangler stuff. */
c906108c 2335
389e51db
AC
2336/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2337 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2338 If the name is not mangled, or the language for the name is unknown, or
581e13c1 2339 demangling is off, the name is printed in its "raw" form. */
c906108c
SS
2340
2341void
0d5cff50 2342fprintf_symbol_filtered (struct ui_file *stream, const char *name,
8731e58e 2343 enum language lang, int arg_mode)
c906108c
SS
2344{
2345 char *demangled;
2346
2347 if (name != NULL)
2348 {
2349 /* If user wants to see raw output, no problem. */
2350 if (!demangle)
2351 {
2352 fputs_filtered (name, stream);
2353 }
2354 else
2355 {
9a3d7dfd 2356 demangled = language_demangle (language_def (lang), name, arg_mode);
c906108c
SS
2357 fputs_filtered (demangled ? demangled : name, stream);
2358 if (demangled != NULL)
2359 {
b8c9b27d 2360 xfree (demangled);
c906108c
SS
2361 }
2362 }
2363 }
2364}
2365
2366/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2367 differences in whitespace. Returns 0 if they match, non-zero if they
2368 don't (slightly different than strcmp()'s range of return values).
c5aa993b 2369
c906108c
SS
2370 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2371 This "feature" is useful when searching for matching C++ function names
2372 (such as if the user types 'break FOO', where FOO is a mangled C++
581e13c1 2373 function). */
c906108c
SS
2374
2375int
fba45db2 2376strcmp_iw (const char *string1, const char *string2)
c906108c
SS
2377{
2378 while ((*string1 != '\0') && (*string2 != '\0'))
2379 {
2380 while (isspace (*string1))
2381 {
2382 string1++;
2383 }
2384 while (isspace (*string2))
2385 {
2386 string2++;
2387 }
559a7a62
JK
2388 if (case_sensitivity == case_sensitive_on && *string1 != *string2)
2389 break;
2390 if (case_sensitivity == case_sensitive_off
2391 && (tolower ((unsigned char) *string1)
2392 != tolower ((unsigned char) *string2)))
2393 break;
c906108c
SS
2394 if (*string1 != '\0')
2395 {
2396 string1++;
2397 string2++;
2398 }
2399 }
2400 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2401}
2de7ced7 2402
0fe19209
DC
2403/* This is like strcmp except that it ignores whitespace and treats
2404 '(' as the first non-NULL character in terms of ordering. Like
2405 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2406 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2407 according to that ordering.
2408
2409 If a list is sorted according to this function and if you want to
2410 find names in the list that match some fixed NAME according to
2411 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2412 where this function would put NAME.
2413
559a7a62
JK
2414 This function must be neutral to the CASE_SENSITIVITY setting as the user
2415 may choose it during later lookup. Therefore this function always sorts
2416 primarily case-insensitively and secondarily case-sensitively.
2417
0fe19209
DC
2418 Here are some examples of why using strcmp to sort is a bad idea:
2419
2420 Whitespace example:
2421
2422 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2423 we try to do a search for "foo<char*>", strcmp will locate this
2424 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2425 will start looking at strings beginning with "goo", and will never
2426 see the correct match of "foo<char *>".
2427
2428 Parenthesis example:
2429
2430 In practice, this is less like to be an issue, but I'll give it a
2431 shot. Let's assume that '$' is a legitimate character to occur in
2432 symbols. (Which may well even be the case on some systems.) Then
2433 say that the partial symbol table contains "foo$" and "foo(int)".
2434 strcmp will put them in this order, since '$' < '('. Now, if the
2435 user searches for "foo", then strcmp will sort "foo" before "foo$".
2436 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2437 "foo") is false, so it won't proceed to the actual match of
2438 "foo(int)" with "foo". */
2439
2440int
2441strcmp_iw_ordered (const char *string1, const char *string2)
2442{
559a7a62
JK
2443 const char *saved_string1 = string1, *saved_string2 = string2;
2444 enum case_sensitivity case_pass = case_sensitive_off;
2445
2446 for (;;)
0fe19209 2447 {
b11b1f88
JK
2448 /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'.
2449 Provide stub characters if we are already at the end of one of the
2450 strings. */
2451 char c1 = 'X', c2 = 'X';
2452
2453 while (*string1 != '\0' && *string2 != '\0')
0fe19209 2454 {
b11b1f88
JK
2455 while (isspace (*string1))
2456 string1++;
2457 while (isspace (*string2))
2458 string2++;
2459
559a7a62
JK
2460 switch (case_pass)
2461 {
2462 case case_sensitive_off:
2463 c1 = tolower ((unsigned char) *string1);
2464 c2 = tolower ((unsigned char) *string2);
2465 break;
2466 case case_sensitive_on:
b11b1f88
JK
2467 c1 = *string1;
2468 c2 = *string2;
559a7a62
JK
2469 break;
2470 }
b11b1f88
JK
2471 if (c1 != c2)
2472 break;
2473
2474 if (*string1 != '\0')
2475 {
2476 string1++;
2477 string2++;
2478 }
0fe19209 2479 }
b11b1f88
JK
2480
2481 switch (*string1)
0fe19209 2482 {
b11b1f88
JK
2483 /* Characters are non-equal unless they're both '\0'; we want to
2484 make sure we get the comparison right according to our
2485 comparison in the cases where one of them is '\0' or '('. */
2486 case '\0':
2487 if (*string2 == '\0')
559a7a62 2488 break;
b11b1f88
JK
2489 else
2490 return -1;
2491 case '(':
2492 if (*string2 == '\0')
2493 return 1;
2494 else
2495 return -1;
2496 default:
2497 if (*string2 == '\0' || *string2 == '(')
2498 return 1;
559a7a62
JK
2499 else if (c1 > c2)
2500 return 1;
2501 else if (c1 < c2)
2502 return -1;
2503 /* PASSTHRU */
0fe19209 2504 }
559a7a62
JK
2505
2506 if (case_pass == case_sensitive_on)
2507 return 0;
2508
2509 /* Otherwise the strings were equal in case insensitive way, make
2510 a more fine grained comparison in a case sensitive way. */
2511
2512 case_pass = case_sensitive_on;
2513 string1 = saved_string1;
2514 string2 = saved_string2;
0fe19209 2515 }
0fe19209
DC
2516}
2517
2de7ced7
DJ
2518/* A simple comparison function with opposite semantics to strcmp. */
2519
2520int
2521streq (const char *lhs, const char *rhs)
2522{
2523 return !strcmp (lhs, rhs);
2524}
c906108c 2525\f
c5aa993b 2526
c906108c 2527/*
c5aa993b
JM
2528 ** subset_compare()
2529 ** Answer whether string_to_compare is a full or partial match to
2530 ** template_string. The partial match must be in sequence starting
2531 ** at index 0.
2532 */
c906108c 2533int
a121b7c1 2534subset_compare (const char *string_to_compare, const char *template_string)
7a292a7a
SS
2535{
2536 int match;
e0627e85 2537
8731e58e
AC
2538 if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2539 && strlen (string_to_compare) <= strlen (template_string))
2540 match =
61012eef 2541 (startswith (template_string, string_to_compare));
7a292a7a
SS
2542 else
2543 match = 0;
2544 return match;
2545}
c906108c 2546
75feb17d
DJ
2547static void
2548show_debug_timestamp (struct ui_file *file, int from_tty,
2549 struct cmd_list_element *c, const char *value)
2550{
3e43a32a
MS
2551 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"),
2552 value);
75feb17d 2553}
c906108c 2554\f
c5aa993b 2555
c906108c 2556void
fba45db2 2557initialize_utils (void)
c906108c 2558{
35096d9d 2559 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
77dec115
EZ
2560Set number of characters where GDB should wrap lines of its output."), _("\
2561Show number of characters where GDB should wrap lines of its output."), _("\
2562This affects where GDB wraps its output to fit the screen width.\n\
f81d1120 2563Setting this to \"unlimited\" or zero prevents GDB from wrapping its output."),
35096d9d 2564 set_width_command,
920d2a44 2565 show_chars_per_line,
35096d9d
AC
2566 &setlist, &showlist);
2567
2568 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
77dec115
EZ
2569Set number of lines in a page for GDB output pagination."), _("\
2570Show number of lines in a page for GDB output pagination."), _("\
2571This affects the number of lines after which GDB will pause\n\
2572its output and ask you whether to continue.\n\
f81d1120 2573Setting this to \"unlimited\" or zero causes GDB never pause during output."),
35096d9d 2574 set_height_command,
920d2a44 2575 show_lines_per_page,
35096d9d 2576 &setlist, &showlist);
c5aa993b 2577
5bf193a2
AC
2578 add_setshow_boolean_cmd ("pagination", class_support,
2579 &pagination_enabled, _("\
77dec115
EZ
2580Set state of GDB output pagination."), _("\
2581Show state of GDB output pagination."), _("\
2582When pagination is ON, GDB pauses at end of each screenful of\n\
2583its output and asks you whether to continue.\n\
f81d1120 2584Turning pagination off is an alternative to \"set height unlimited\"."),
5bf193a2 2585 NULL,
920d2a44 2586 show_pagination_enabled,
5bf193a2 2587 &setlist, &showlist);
4261bedc 2588
5bf193a2
AC
2589 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2590 &sevenbit_strings, _("\
2591Set printing of 8-bit characters in strings as \\nnn."), _("\
2592Show printing of 8-bit characters in strings as \\nnn."), NULL,
2593 NULL,
920d2a44 2594 show_sevenbit_strings,
5bf193a2
AC
2595 &setprintlist, &showprintlist);
2596
75feb17d
DJ
2597 add_setshow_boolean_cmd ("timestamp", class_maintenance,
2598 &debug_timestamp, _("\
2599Set timestamping of debugging messages."), _("\
2600Show timestamping of debugging messages."), _("\
2601When set, debugging messages will be marked with seconds and microseconds."),
2602 NULL,
2603 show_debug_timestamp,
2604 &setdebuglist, &showdebuglist);
c906108c
SS
2605}
2606
66bf4b3a 2607const char *
5af949e3 2608paddress (struct gdbarch *gdbarch, CORE_ADDR addr)
66bf4b3a
AC
2609{
2610 /* Truncate address to the size of a target address, avoiding shifts
2611 larger or equal than the width of a CORE_ADDR. The local
2612 variable ADDR_BIT stops the compiler reporting a shift overflow
581e13c1 2613 when it won't occur. */
66bf4b3a
AC
2614 /* NOTE: This assumes that the significant address information is
2615 kept in the least significant bits of ADDR - the upper bits were
76e71323 2616 either zero or sign extended. Should gdbarch_address_to_pointer or
66bf4b3a
AC
2617 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2618
5af949e3 2619 int addr_bit = gdbarch_addr_bit (gdbarch);
66bf4b3a
AC
2620
2621 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2622 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2623 return hex_string (addr);
2624}
2625
f1310107
TJB
2626/* This function is described in "defs.h". */
2627
2628const char *
2629print_core_address (struct gdbarch *gdbarch, CORE_ADDR address)
2630{
2631 int addr_bit = gdbarch_addr_bit (gdbarch);
2632
2633 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2634 address &= ((CORE_ADDR) 1 << addr_bit) - 1;
2635
2636 /* FIXME: cagney/2002-05-03: Need local_address_string() function
2637 that returns the language localized string formatted to a width
2638 based on gdbarch_addr_bit. */
2639 if (addr_bit <= 32)
2640 return hex_string_custom (address, 8);
2641 else
2642 return hex_string_custom (address, 16);
2643}
2644
8e3b41a9
JK
2645/* Callback hash_f for htab_create_alloc or htab_create_alloc_ex. */
2646
2647hashval_t
2648core_addr_hash (const void *ap)
2649{
19ba03f4 2650 const CORE_ADDR *addrp = (const CORE_ADDR *) ap;
8e3b41a9
JK
2651
2652 return *addrp;
2653}
2654
2655/* Callback eq_f for htab_create_alloc or htab_create_alloc_ex. */
2656
2657int
2658core_addr_eq (const void *ap, const void *bp)
2659{
19ba03f4
SM
2660 const CORE_ADDR *addr_ap = (const CORE_ADDR *) ap;
2661 const CORE_ADDR *addr_bp = (const CORE_ADDR *) bp;
8e3b41a9
JK
2662
2663 return *addr_ap == *addr_bp;
2664}
2665
03dd37c3
AC
2666/* Convert a string back into a CORE_ADDR. */
2667CORE_ADDR
2668string_to_core_addr (const char *my_string)
2669{
2670 CORE_ADDR addr = 0;
9544c605 2671
03dd37c3
AC
2672 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2673 {
ced572fe 2674 /* Assume that it is in hex. */
03dd37c3 2675 int i;
5d502164 2676
03dd37c3
AC
2677 for (i = 2; my_string[i] != '\0'; i++)
2678 {
2679 if (isdigit (my_string[i]))
2680 addr = (my_string[i] - '0') + (addr * 16);
8731e58e 2681 else if (isxdigit (my_string[i]))
03dd37c3
AC
2682 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2683 else
63f06803 2684 error (_("invalid hex \"%s\""), my_string);
03dd37c3
AC
2685 }
2686 }
2687 else
2688 {
2689 /* Assume that it is in decimal. */
2690 int i;
5d502164 2691
03dd37c3
AC
2692 for (i = 0; my_string[i] != '\0'; i++)
2693 {
2694 if (isdigit (my_string[i]))
2695 addr = (my_string[i] - '0') + (addr * 10);
2696 else
63f06803 2697 error (_("invalid decimal \"%s\""), my_string);
03dd37c3
AC
2698 }
2699 }
9544c605 2700
03dd37c3
AC
2701 return addr;
2702}
58d370e0
TT
2703
2704char *
2705gdb_realpath (const char *filename)
2706{
0fa9473f
JB
2707/* On most hosts, we rely on canonicalize_file_name to compute
2708 the FILENAME's realpath.
2709
2710 But the situation is slightly more complex on Windows, due to some
2711 versions of GCC which were reported to generate paths where
2712 backlashes (the directory separator) were doubled. For instance:
2713 c:\\some\\double\\slashes\\dir
2714 ... instead of ...
2715 c:\some\double\slashes\dir
2716 Those double-slashes were getting in the way when comparing paths,
2717 for instance when trying to insert a breakpoint as follow:
2718 (gdb) b c:/some/double/slashes/dir/foo.c:4
2719 No source file named c:/some/double/slashes/dir/foo.c:4.
2720 (gdb) b c:\some\double\slashes\dir\foo.c:4
2721 No source file named c:\some\double\slashes\dir\foo.c:4.
2722 To prevent this from happening, we need this function to always
2723 strip those extra backslashes. While canonicalize_file_name does
2724 perform this simplification, it only works when the path is valid.
2725 Since the simplification would be useful even if the path is not
2726 valid (one can always set a breakpoint on a file, even if the file
2727 does not exist locally), we rely instead on GetFullPathName to
2728 perform the canonicalization. */
2729
9c5e4386
JB
2730#if defined (_WIN32)
2731 {
2732 char buf[MAX_PATH];
2733 DWORD len = GetFullPathName (filename, MAX_PATH, buf, NULL);
2734
0fa9473f
JB
2735 /* The file system is case-insensitive but case-preserving.
2736 So it is important we do not lowercase the path. Otherwise,
2737 we might not be able to display the original casing in a given
2738 path. */
9c5e4386
JB
2739 if (len > 0 && len < MAX_PATH)
2740 return xstrdup (buf);
2741 }
abbffc89
YQ
2742#else
2743 {
2744 char *rp = canonicalize_file_name (filename);
2745
2746 if (rp != NULL)
2747 return rp;
2748 }
9c5e4386
JB
2749#endif
2750
70d35819
AC
2751 /* This system is a lost cause, just dup the buffer. */
2752 return xstrdup (filename);
58d370e0 2753}
303c8ebd 2754
4856b6bc
JK
2755/* Return a copy of FILENAME, with its directory prefix canonicalized
2756 by gdb_realpath. */
2757
2758char *
2759gdb_realpath_keepfile (const char *filename)
2760{
2761 const char *base_name = lbasename (filename);
2762 char *dir_name;
2763 char *real_path;
2764 char *result;
2765
2766 /* Extract the basename of filename, and return immediately
2767 a copy of filename if it does not contain any directory prefix. */
2768 if (base_name == filename)
2769 return xstrdup (filename);
2770
224c3ddb 2771 dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
4856b6bc
JK
2772 /* Allocate enough space to store the dir_name + plus one extra
2773 character sometimes needed under Windows (see below), and
2774 then the closing \000 character. */
2775 strncpy (dir_name, filename, base_name - filename);
2776 dir_name[base_name - filename] = '\000';
2777
2778#ifdef HAVE_DOS_BASED_FILE_SYSTEM
2779 /* We need to be careful when filename is of the form 'd:foo', which
2780 is equivalent of d:./foo, which is totally different from d:/foo. */
2781 if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
2782 {
2783 dir_name[2] = '.';
2784 dir_name[3] = '\000';
2785 }
2786#endif
2787
2788 /* Canonicalize the directory prefix, and build the resulting
2789 filename. If the dirname realpath already contains an ending
2790 directory separator, avoid doubling it. */
2791 real_path = gdb_realpath (dir_name);
2792 if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
2793 result = concat (real_path, base_name, (char *) NULL);
2794 else
2795 result = concat (real_path, SLASH_STRING, base_name, (char *) NULL);
2796
2797 xfree (real_path);
2798 return result;
2799}
2800
04affae3
JK
2801/* Return PATH in absolute form, performing tilde-expansion if necessary.
2802 PATH cannot be NULL or the empty string.
2803 This does not resolve symlinks however, use gdb_realpath for that.
2804 Space for the result is allocated with malloc.
2805 If the path is already absolute, it is strdup'd.
2806 If there is a problem computing the absolute path, the path is returned
2807 unchanged (still strdup'd). */
2808
2809char *
2810gdb_abspath (const char *path)
2811{
2812 gdb_assert (path != NULL && path[0] != '\0');
2813
2814 if (path[0] == '~')
2815 return tilde_expand (path);
2816
2817 if (IS_ABSOLUTE_PATH (path))
2818 return xstrdup (path);
2819
2820 /* Beware the // my son, the Emacs barfs, the botch that catch... */
2821 return concat (current_directory,
2822 IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
2823 ? "" : SLASH_STRING,
2824 path, (char *) NULL);
2825}
2826
5b03f266
AC
2827ULONGEST
2828align_up (ULONGEST v, int n)
2829{
2830 /* Check that N is really a power of two. */
2831 gdb_assert (n && (n & (n-1)) == 0);
2832 return (v + n - 1) & -n;
2833}
2834
2835ULONGEST
2836align_down (ULONGEST v, int n)
2837{
2838 /* Check that N is really a power of two. */
2839 gdb_assert (n && (n & (n-1)) == 0);
2840 return (v & -n);
2841}
ae5a43e0
DJ
2842
2843/* Allocation function for the libiberty hash table which uses an
2844 obstack. The obstack is passed as DATA. */
2845
2846void *
2847hashtab_obstack_allocate (void *data, size_t size, size_t count)
2848{
241fd515 2849 size_t total = size * count;
ae5a43e0 2850 void *ptr = obstack_alloc ((struct obstack *) data, total);
e0627e85 2851
ae5a43e0
DJ
2852 memset (ptr, 0, total);
2853 return ptr;
2854}
2855
2856/* Trivial deallocation function for the libiberty splay tree and hash
2857 table - don't deallocate anything. Rely on later deletion of the
2858 obstack. DATA will be the obstack, although it is not needed
2859 here. */
2860
2861void
2862dummy_obstack_deallocate (void *object, void *data)
2863{
2864 return;
2865}
253c8abb 2866
e1024ff1
DJ
2867/* Simple, portable version of dirname that does not modify its
2868 argument. */
2869
d721ba37 2870std::string
e1024ff1
DJ
2871ldirname (const char *filename)
2872{
d721ba37 2873 std::string dirname;
e1024ff1 2874 const char *base = lbasename (filename);
e1024ff1
DJ
2875
2876 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
2877 --base;
2878
2879 if (base == filename)
d721ba37 2880 return dirname;
e1024ff1 2881
d721ba37 2882 dirname = std::string (filename, base - filename);
e1024ff1
DJ
2883
2884 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
2885 create "d:./bar" later instead of the (different) "d:/bar". */
2886 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
2887 && !IS_DIR_SEPARATOR (filename[0]))
2888 dirname[base++ - filename] = '.';
2889
e1024ff1
DJ
2890 return dirname;
2891}
d1a41061
PP
2892
2893/* Call libiberty's buildargv, and return the result.
2894 If buildargv fails due to out-of-memory, call nomem.
2895 Therefore, the returned value is guaranteed to be non-NULL,
2896 unless the parameter itself is NULL. */
2897
2898char **
2899gdb_buildargv (const char *s)
2900{
2901 char **argv = buildargv (s);
e0627e85 2902
d1a41061 2903 if (s != NULL && argv == NULL)
d26e3629 2904 malloc_failure (0);
d1a41061
PP
2905 return argv;
2906}
3c16cced 2907
dc146f7c
VP
2908int
2909compare_positive_ints (const void *ap, const void *bp)
2910{
2911 /* Because we know we're comparing two ints which are positive,
2912 there's no danger of overflow here. */
2913 return * (int *) ap - * (int *) bp;
2914}
2915
f8eba3c6
TT
2916/* String compare function for qsort. */
2917
2918int
2919compare_strings (const void *arg1, const void *arg2)
2920{
2921 const char **s1 = (const char **) arg1;
2922 const char **s2 = (const char **) arg2;
2923
2924 return strcmp (*s1, *s2);
2925}
2926
d18b8b7a 2927#define AMBIGUOUS_MESS1 ".\nMatching formats:"
3e43a32a
MS
2928#define AMBIGUOUS_MESS2 \
2929 ".\nUse \"set gnutarget format-name\" to specify the format."
d18b8b7a
HZ
2930
2931const char *
2932gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
2933{
2934 char *ret, *retp;
2935 int ret_len;
2936 char **p;
2937
2938 /* Check if errmsg just need simple return. */
2939 if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL)
2940 return bfd_errmsg (error_tag);
2941
2942 ret_len = strlen (bfd_errmsg (error_tag)) + strlen (AMBIGUOUS_MESS1)
2943 + strlen (AMBIGUOUS_MESS2);
2944 for (p = matching; *p; p++)
2945 ret_len += strlen (*p) + 1;
224c3ddb 2946 ret = (char *) xmalloc (ret_len + 1);
d18b8b7a
HZ
2947 retp = ret;
2948 make_cleanup (xfree, ret);
2949
2950 strcpy (retp, bfd_errmsg (error_tag));
2951 retp += strlen (retp);
2952
2953 strcpy (retp, AMBIGUOUS_MESS1);
2954 retp += strlen (retp);
2955
2956 for (p = matching; *p; p++)
2957 {
2958 sprintf (retp, " %s", *p);
2959 retp += strlen (retp);
2960 }
2961 xfree (matching);
2962
2963 strcpy (retp, AMBIGUOUS_MESS2);
2964
2965 return ret;
2966}
2967
74164c56
JK
2968/* Return ARGS parsed as a valid pid, or throw an error. */
2969
2970int
c0939df1 2971parse_pid_to_attach (const char *args)
74164c56
JK
2972{
2973 unsigned long pid;
2974 char *dummy;
2975
2976 if (!args)
2977 error_no_arg (_("process-id to attach"));
2978
c0939df1 2979 dummy = (char *) args;
74164c56
JK
2980 pid = strtoul (args, &dummy, 0);
2981 /* Some targets don't set errno on errors, grrr! */
2982 if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)])
2983 error (_("Illegal process-id: %s."), args);
2984
2985 return pid;
2986}
2987
353d1d73
JK
2988/* Helper for make_bpstat_clear_actions_cleanup. */
2989
2990static void
2991do_bpstat_clear_actions_cleanup (void *unused)
2992{
2993 bpstat_clear_actions ();
2994}
2995
2996/* Call bpstat_clear_actions for the case an exception is throw. You should
2997 discard_cleanups if no exception is caught. */
2998
2999struct cleanup *
3000make_bpstat_clear_actions_cleanup (void)
3001{
3002 return make_cleanup (do_bpstat_clear_actions_cleanup, NULL);
3003}
3004
df15bd07
JK
3005/* Check for GCC >= 4.x according to the symtab->producer string. Return minor
3006 version (x) of 4.x in such case. If it is not GCC or it is GCC older than
3007 4.x return -1. If it is GCC 5.x or higher return INT_MAX. */
3008
3009int
3010producer_is_gcc_ge_4 (const char *producer)
3011{
df15bd07 3012 int major, minor;
b1ffba5a
MW
3013
3014 if (! producer_is_gcc (producer, &major, &minor))
3015 return -1;
df15bd07
JK
3016 if (major < 4)
3017 return -1;
3018 if (major > 4)
3019 return INT_MAX;
3020 return minor;
3021}
3022
cc7039d3
JB
3023/* Returns nonzero if the given PRODUCER string is GCC and sets the MAJOR
3024 and MINOR versions when not NULL. Returns zero if the given PRODUCER
b1ffba5a
MW
3025 is NULL or it isn't GCC. */
3026
cc7039d3 3027int
b1ffba5a 3028producer_is_gcc (const char *producer, int *major, int *minor)
38360086
MW
3029{
3030 const char *cs;
38360086 3031
61012eef 3032 if (producer != NULL && startswith (producer, "GNU "))
38360086 3033 {
b1ffba5a
MW
3034 int maj, min;
3035
3036 if (major == NULL)
3037 major = &maj;
3038 if (minor == NULL)
3039 minor = &min;
3040
9c37b5ae 3041 /* Skip any identifier after "GNU " - such as "C11" or "C++".
38360086
MW
3042 A full producer string might look like:
3043 "GNU C 4.7.2"
3044 "GNU Fortran 4.8.2 20140120 (Red Hat 4.8.2-16) -mtune=generic ..."
3045 "GNU C++14 5.0.0 20150123 (experimental)"
3046 */
3047 cs = &producer[strlen ("GNU ")];
3048 while (*cs && !isspace (*cs))
3049 cs++;
3050 if (*cs && isspace (*cs))
3051 cs++;
b1ffba5a 3052 if (sscanf (cs, "%d.%d", major, minor) == 2)
cc7039d3 3053 return 1;
38360086
MW
3054 }
3055
3056 /* Not recognized as GCC. */
cc7039d3 3057 return 0;
38360086
MW
3058}
3059
e4ab2fad
JK
3060/* Helper for make_cleanup_free_char_ptr_vec. */
3061
3062static void
3063do_free_char_ptr_vec (void *arg)
3064{
19ba03f4 3065 VEC (char_ptr) *char_ptr_vec = (VEC (char_ptr) *) arg;
e4ab2fad
JK
3066
3067 free_char_ptr_vec (char_ptr_vec);
3068}
3069
3070/* Make cleanup handler calling xfree for each element of CHAR_PTR_VEC and
3071 final VEC_free for CHAR_PTR_VEC itself.
3072
3073 You must not modify CHAR_PTR_VEC after this cleanup registration as the
3074 CHAR_PTR_VEC base address may change on its updates. Contrary to VEC_free
3075 this function does not (cannot) clear the pointer. */
3076
3077struct cleanup *
3078make_cleanup_free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec)
3079{
3080 return make_cleanup (do_free_char_ptr_vec, char_ptr_vec);
3081}
3082
6dea1fbd
JK
3083/* Substitute all occurences of string FROM by string TO in *STRINGP. *STRINGP
3084 must come from xrealloc-compatible allocator and it may be updated. FROM
1564a261
JK
3085 needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be
3086 located at the start or end of *STRINGP. */
6dea1fbd
JK
3087
3088void
3089substitute_path_component (char **stringp, const char *from, const char *to)
3090{
3091 char *string = *stringp, *s;
3092 const size_t from_len = strlen (from);
3093 const size_t to_len = strlen (to);
3094
3095 for (s = string;;)
3096 {
3097 s = strstr (s, from);
3098 if (s == NULL)
3099 break;
3100
1564a261
JK
3101 if ((s == string || IS_DIR_SEPARATOR (s[-1])
3102 || s[-1] == DIRNAME_SEPARATOR)
3103 && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len])
3104 || s[from_len] == DIRNAME_SEPARATOR))
6dea1fbd
JK
3105 {
3106 char *string_new;
3107
224c3ddb
SM
3108 string_new
3109 = (char *) xrealloc (string, (strlen (string) + to_len + 1));
6dea1fbd
JK
3110
3111 /* Relocate the current S pointer. */
3112 s = s - string + string_new;
3113 string = string_new;
3114
3115 /* Replace from by to. */
3116 memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1);
3117 memcpy (s, to, to_len);
3118
3119 s += to_len;
3120 }
3121 else
3122 s++;
3123 }
3124
3125 *stringp = string;
3126}
3127
0b6cb71e
DE
3128#ifdef HAVE_WAITPID
3129
3130#ifdef SIGALRM
3131
3132/* SIGALRM handler for waitpid_with_timeout. */
3133
3134static void
3135sigalrm_handler (int signo)
3136{
3137 /* Nothing to do. */
3138}
3139
3140#endif
3141
3142/* Wrapper to wait for child PID to die with TIMEOUT.
3143 TIMEOUT is the time to stop waiting in seconds.
3144 If TIMEOUT is zero, pass WNOHANG to waitpid.
3145 Returns PID if it was successfully waited for, otherwise -1.
3146
3147 Timeouts are currently implemented with alarm and SIGALRM.
3148 If the host does not support them, this waits "forever".
3149 It would be odd though for a host to have waitpid and not SIGALRM. */
3150
3151pid_t
3152wait_to_die_with_timeout (pid_t pid, int *status, int timeout)
3153{
3154 pid_t waitpid_result;
3155
3156 gdb_assert (pid > 0);
3157 gdb_assert (timeout >= 0);
3158
3159 if (timeout > 0)
3160 {
3161#ifdef SIGALRM
3162#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3163 struct sigaction sa, old_sa;
3164
3165 sa.sa_handler = sigalrm_handler;
3166 sigemptyset (&sa.sa_mask);
3167 sa.sa_flags = 0;
3168 sigaction (SIGALRM, &sa, &old_sa);
3169#else
a40805d4 3170 sighandler_t ofunc;
0b6cb71e 3171
a40805d4 3172 ofunc = signal (SIGALRM, sigalrm_handler);
0b6cb71e
DE
3173#endif
3174
3175 alarm (timeout);
3176#endif
3177
3178 waitpid_result = waitpid (pid, status, 0);
3179
3180#ifdef SIGALRM
3181 alarm (0);
3182#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3183 sigaction (SIGALRM, &old_sa, NULL);
3184#else
3185 signal (SIGALRM, ofunc);
3186#endif
3187#endif
3188 }
3189 else
3190 waitpid_result = waitpid (pid, status, WNOHANG);
3191
3192 if (waitpid_result == pid)
3193 return pid;
3194 else
3195 return -1;
3196}
3197
3198#endif /* HAVE_WAITPID */
3199
202cbf1c
JK
3200/* Provide fnmatch compatible function for FNM_FILE_NAME matching of host files.
3201 Both FNM_FILE_NAME and FNM_NOESCAPE must be set in FLAGS.
3202
3203 It handles correctly HAVE_DOS_BASED_FILE_SYSTEM and
3204 HAVE_CASE_INSENSITIVE_FILE_SYSTEM. */
3205
3206int
3207gdb_filename_fnmatch (const char *pattern, const char *string, int flags)
3208{
3209 gdb_assert ((flags & FNM_FILE_NAME) != 0);
3210
3211 /* It is unclear how '\' escaping vs. directory separator should coexist. */
3212 gdb_assert ((flags & FNM_NOESCAPE) != 0);
3213
3214#ifdef HAVE_DOS_BASED_FILE_SYSTEM
3215 {
3216 char *pattern_slash, *string_slash;
3217
3218 /* Replace '\' by '/' in both strings. */
3219
0ae1c716 3220 pattern_slash = (char *) alloca (strlen (pattern) + 1);
202cbf1c
JK
3221 strcpy (pattern_slash, pattern);
3222 pattern = pattern_slash;
3223 for (; *pattern_slash != 0; pattern_slash++)
3224 if (IS_DIR_SEPARATOR (*pattern_slash))
3225 *pattern_slash = '/';
3226
0ae1c716 3227 string_slash = (char *) alloca (strlen (string) + 1);
202cbf1c
JK
3228 strcpy (string_slash, string);
3229 string = string_slash;
3230 for (; *string_slash != 0; string_slash++)
3231 if (IS_DIR_SEPARATOR (*string_slash))
3232 *string_slash = '/';
3233 }
3234#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
3235
3236#ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
3237 flags |= FNM_CASEFOLD;
3238#endif /* HAVE_CASE_INSENSITIVE_FILE_SYSTEM */
3239
3240 return fnmatch (pattern, string, flags);
3241}
3242
cce0e923
DE
3243/* Return the number of path elements in PATH.
3244 / = 1
3245 /foo = 2
3246 /foo/ = 2
3247 foo/bar = 2
3248 foo/ = 1 */
3249
3250int
3251count_path_elements (const char *path)
3252{
3253 int count = 0;
3254 const char *p = path;
3255
3256 if (HAS_DRIVE_SPEC (p))
3257 {
3258 p = STRIP_DRIVE_SPEC (p);
3259 ++count;
3260 }
3261
3262 while (*p != '\0')
3263 {
3264 if (IS_DIR_SEPARATOR (*p))
3265 ++count;
3266 ++p;
3267 }
3268
3269 /* Backup one if last character is /, unless it's the only one. */
3270 if (p > path + 1 && IS_DIR_SEPARATOR (p[-1]))
3271 --count;
3272
3273 /* Add one for the file name, if present. */
3274 if (p > path && !IS_DIR_SEPARATOR (p[-1]))
3275 ++count;
3276
3277 return count;
3278}
3279
3280/* Remove N leading path elements from PATH.
3281 N must be non-negative.
3282 If PATH has more than N path elements then return NULL.
3283 If PATH has exactly N path elements then return "".
3284 See count_path_elements for a description of how we do the counting. */
3285
3286const char *
3287strip_leading_path_elements (const char *path, int n)
3288{
3289 int i = 0;
3290 const char *p = path;
3291
3292 gdb_assert (n >= 0);
3293
3294 if (n == 0)
3295 return p;
3296
3297 if (HAS_DRIVE_SPEC (p))
3298 {
3299 p = STRIP_DRIVE_SPEC (p);
3300 ++i;
3301 }
3302
3303 while (i < n)
3304 {
3305 while (*p != '\0' && !IS_DIR_SEPARATOR (*p))
3306 ++p;
3307 if (*p == '\0')
3308 {
3309 if (i + 1 == n)
3310 return "";
3311 return NULL;
3312 }
3313 ++p;
3314 ++i;
3315 }
3316
3317 return p;
3318}
3319
2c0b251b
PA
3320/* Provide a prototype to silence -Wmissing-prototypes. */
3321extern initialize_file_ftype _initialize_utils;
3322
3c16cced
PA
3323void
3324_initialize_utils (void)
3325{
3326 add_internal_problem_command (&internal_error_problem);
3327 add_internal_problem_command (&internal_warning_problem);
57fcfb1b 3328 add_internal_problem_command (&demangler_warning_problem);
3c16cced 3329}
This page took 3.222646 seconds and 4 git commands to generate.