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